logo

Thursday 24th of May 2012

廣告

廣告贊助商

首頁 Python教學 Python程式範例 巴哈雙小提琴Python版
巴哈雙小提琴Python版 PDF 列印 E-mail
作者是 Victor   
週三, 11 二月 2009 21:09

巴哈雙小提琴Python版

這個程式是改寫自"巴哈雙小提琴"的C語言版本,因為我發現Python有一個winsound的module,裡面也有Beep的功能,因此就改了一個Python的版本出來。

"""
@brief  Play Bach's concerto 
@author Victor Lin 
@author web-site : http://victorlin.serveftp.org/programming/

"""
import winsound
import time

# Base tune
D_BASE = 264

# How long a meter is
METRE = 500

DO = 0
RE = 2
MI = 4
FA = 5
SO = 7
LA = 9
SI = 11

def Play(d, h, delay):
    Tune = D_BASE * pow(pow(2, 1.0/12.0), d) * pow(2, h)
    winsound.Beep(int(Tune), delay)

def vibrato(d, h, delay, Times):
    for i in range(Times):
        Play(d    , h, METRE/(Times*2))
        Play(d+1  , h, METRE/(Times*2))

def Sleep(delay):
    time.sleep(delay/1000.0)

print "Concerto J.S. Bach (1685-1750) BWV 1043 Violin II"

Play(RE    ,0,METRE/4);
Play(MI    ,0,METRE/4);
Play(FA    ,0,METRE/4);
Play(SO    ,0,METRE/4);

Play(LA    ,0,METRE/2);
Play(RE    ,1,METRE/2);
Play(DO+1  ,1,METRE/2);
Play(LA    ,0,METRE/2);
Play(MI    ,0,METRE/2);
Play(SO    ,0,METRE/2);
Play(FA+1  ,0,METRE/2);
Play(RE    ,0,METRE/2);
Play(DO    ,1,int(METRE*1.50));

Play(SI    ,0,METRE/4);
Play(LA    ,0,METRE/4);
Play(SI    ,0,METRE/2);
Play(SO    ,0,METRE/2);
Play(MI    ,0,METRE/2);
Play(SO    ,0,METRE/2);
Play(SI-1  ,0,METRE/2);
Play(RE    ,0,METRE/2);
Play(DO+1  ,0,METRE/2);
Play(LA    ,0,METRE/2);
Play(RE    ,0,METRE/2);
Play(SO    ,0,METRE/2);

Play(FA    ,0,METRE);

vibrato(MI ,0,METRE,5);

Play(RE    ,0,METRE/4);
Play(DO+1  ,0,METRE/4);
Play(RE    ,0,METRE/4);
Play(MI    ,0,METRE/4);
Play(FA+1  ,0,METRE/4);
Play(SO+1  ,0,METRE/4);
Play(LA    ,0,METRE/4);
Play(SI    ,0,METRE/4);
Play(DO    ,1,METRE/4);
Play(SI    ,0,METRE/4);
Play(LA    ,0,METRE/4);
Play(SI    ,0,METRE/4);
Play(DO    ,1,METRE/4);
Play(SI    ,0,METRE/4);
Play(DO    ,1,METRE/4);
Play(RE    ,1,METRE/4);
Play(MI    ,1,METRE*2+METRE/4);

Play(RE    ,1,METRE/4);
Play(DO+1  ,1,METRE/4);
Play(SI    ,0,METRE/4);
Play(DO+1  ,1,METRE/4);
Play(LA    ,0,METRE/4);
Play(SI    ,0,METRE/4);
Play(DO+1  ,1,METRE/4);
Play(RE    ,1,METRE*2+METRE/4);

Play(DO    ,1,METRE/4);
Play(SI    ,0,METRE/4);
Play(DO    ,1,METRE/4);
Play(RE    ,1,METRE/4);
Play(MI    ,1,METRE/4);
Play(FA    ,1,METRE/4);
Play(RE    ,1,METRE/4);
Play(MI    ,1,METRE/4);
Play(FA    ,1,METRE/4);
Play(MI    ,1,METRE/4);
Play(RE    ,1,METRE/4);
Play(DO    ,1,METRE/4);
Play(SI    ,0,METRE/4);
Play(LA    ,0,METRE/4);
Play(SO+1  ,0,METRE/4);
Play(LA    ,0,METRE/2);
Play(LA    ,1,METRE);
Play(SO+1  ,1,METRE/2);
Play(LA    ,1,METRE/2);

Play(LA    ,0,METRE/4);
Play(SO+1  ,0,METRE/4);
Play(LA    ,0,METRE/4);
Play(SI    ,0,METRE/4);
Play(DO    ,1,METRE/4);
Play(LA    ,0,METRE/4);

Play(SI    ,0,METRE/4);
Play(LA    ,0,METRE/4);
Play(SI    ,0,METRE/4);
Play(DO    ,1,METRE/4);
Play(SI    ,0,METRE/4);
Play(DO+1  ,1,METRE/4);
Play(RE    ,1,METRE/4);
Play(SI    ,0,METRE/4);

Play(DO+1  ,1,METRE/4);
Play(SI    ,0,METRE/4);
Play(DO+1  ,1,METRE/4);
Play(RE    ,1,METRE/4);
Play(DO+1  ,1,METRE/4);
Play(RE    ,1,METRE/4);
Play(MI    ,1,METRE/4);
Play(DO+1  ,1,METRE/4);

Play(RE    ,1,METRE/2);
Play(LA    ,1,METRE/2);

Sleep(METRE/2);

Play(FA    ,1,METRE/2);
Play(MI    ,1,METRE/4);
Play(DO+1  ,1,METRE/4);
Play(SI    ,0,METRE/4);
Play(DO+1  ,1,METRE/4);
Play(LA    ,0,METRE/4);
Play(SI    ,0,METRE/4);
Play(DO+1  ,1,METRE/4);
Play(RE    ,1,METRE*2+METRE/4);

Play(DO    ,1,METRE/4);
Play(RE    ,1,METRE/4);
Play(MI    ,1,METRE/4);
Play(RE    ,1,METRE/4);
Play(FA    ,1,METRE/4);
Play(MI    ,1,METRE/4);
Play(RE    ,1,METRE/4);
Play(MI    ,1,METRE*2+METRE/4);
Play(RE    ,1,METRE/4);
Play(DO+1  ,1,METRE/4);
Play(SI-1  ,0,METRE/4);
Play(LA    ,0,METRE/4);
Play(SO    ,0,METRE/4);
Play(FA    ,0,METRE/4);
Play(MI    ,0,METRE/4);
Play(RE    ,0,METRE/4);

Play(DO    ,1,METRE/4);
Play(SI-1  ,0,METRE/4);
Play(LA    ,0,METRE/4);
Play(SO    ,0,METRE/4);
Play(FA    ,0,METRE/4);
Play(MI    ,0,METRE/4);
Play(SO    ,0,METRE/4);

Play(FA    ,0,METRE/2);
Play(RE    ,0,METRE/2);
Play(LA    ,0,METRE + METRE/4);

Play(SI    ,0,METRE/4);
Play(DO+1  ,1,METRE/4);
Play(RE    ,1,METRE/4);
Play(MI    ,1,METRE/2);
Play(SO    ,1,METRE/2);
Play(FA+1  ,1,METRE/2);
Play(RE    ,1,METRE/2);
Play(LA    ,0,METRE/2);
Play(DO    ,1,METRE/2);
Play(SI    ,0,METRE/2);
Play(SO    ,0,METRE/2);
Play(FA    ,1,int(METRE*1.50));

Play(MI    ,1,METRE/4);
Play(RE    ,1,METRE/4);

Play(MI    ,1,METRE/2);
Play(DO    ,1,METRE/2);
Play(LA    ,0,METRE/2);
Play(DO    ,1,METRE/2);
Play(MI-1  ,1,METRE/2);
Play(SO    ,0,METRE/2);
Play(FA+1  ,0,METRE/2);
Play(RE    ,1,METRE/2);
Play(SO    ,0,METRE/2);
Play(DO    ,1,METRE/2);

Play(SI-1  ,0,METRE);
Play(LA    ,0,METRE);
Play(SO    ,0,METRE);

Sleep(METRE/2);

Play(MI    ,0,METRE/2);
Play(LA    ,0,METRE*2 + METRE/4);
Play(SO+1  ,0,METRE/4);
Play(LA    ,0,METRE/4);
Play(SI    ,0,METRE/4);
Play(DO+1  ,1,METRE/4);
Play(RE    ,1,METRE/4);
Play(MI    ,1,METRE/4);
Play(DO+1  ,1,METRE/4);

Play(RE    ,1,METRE/4);
Play(SI-1  ,0,METRE/4);
Play(LA    ,0,METRE/4);
Play(SO    ,0,METRE/4);
Play(LA    ,0,METRE/4);
Play(FA+1  ,0,METRE/4);
Play(SO    ,0,METRE/4);
Play(LA    ,0,METRE/4);

Play(RE    ,0,METRE/2);
Play(SO    ,0,METRE/2);
Play(RE    ,1,METRE + METRE/2);

Play(DO+1  ,1,METRE/4);
Play(RE    ,1,METRE/4);
Play(MI    ,1,METRE/4);
Play(FA    ,1,METRE/4);
Play(SO    ,1,METRE/2 + METRE/4);

Play(MI    ,1,METRE/4);
Play(FA    ,1,METRE/4);
Play(SO    ,1,METRE/4);
Play(LA    ,1,METRE/2);
Play(MI    ,1,METRE/2 + METRE/2);

Play(RE    ,1,METRE);
Play(DO+1  ,1,METRE/2);
Play(RE    ,1,METRE);

 

核心是 Joomla!. Designed by: Free Joomla Theme, whois protect. Valid XHTML and CSS.