2015-05-03 61 views
0

我正在嘗試創建一個小程序,它將讀取我在文本文件中寫入的音符並將其作爲鋼琴音樂播放。pygame.mixer不能播放超過8個音符

我正在使用pygame並使用調音臺播放.aiff聲音文件。一切正常,但它不會播放超過8個音符。有人對這個有了解嗎?我用不同的文件和筆記進行了嘗試,並且它在第8個音符後總是停止,但它會完整地播放該音符。

下面是一些代碼:

lines = f.readlines() 

while lines[x] != '': 
    line = lines[x] 
    readingframe = line[b:b+4] 
    for t in times: 
     if t in readingframe: 
      c = line.index(t,b) 
      note = line[b:c] 
      sound = mixer.Sound('C:/Python27/piano/' + note +'.aiff') 
      sound.play() 
      time.sleep(timeCorrespondence[t]) 
      b = c+1 

這是我使用測試(加拿大O)樣本音樂之一:

a4hc5qc5if4hg4qa4qbb4qc5qdb5qg4wz 

的「Z」被使用,因爲我設置的閱讀框爲4,一些作品以只有三個字母(abc)的白色鍵結束,其中a是音符,b表示位置,c表示長度。

+0

在您的問題中包含一些代碼可以幫助人們更好地理解問題。 (http://stackoverflow.com/help/how-to-ask) – ifm

+0

好的抱歉。馬上編輯 – Tony

+0

好吧,首先它看起來像你的框架捕獲4個字符('line [b:b + 4]'),而不是像你所描述的那樣3。 – ifm

回答

1

這個小修補程序應該解決您的問題:

lines = f.readlines() 

while lines[x] != '': 
    line = lines[x] 
    readingframe = line[b:b+4] 

    while b < len(readingframe): 
     for t in times: 
      if t in readingframe: 
       c = line.index(t,b) 
       note = line[b:c] 
       maxTime = timeCorrespondence[t] * 1000 
       sound = mixer.Sound('C:/Python27/piano/' + note +'.aiff') 
       sound.play(maxtime=maxTime) 
       b = c+1 
       break 

希望這有助於你。

+0

嗯,當我使用你的代碼時,它只播放2個音符。我想知道爲什麼,但我還沒有弄明白。 – Tony

+0

@Tony能否驗證程序是否正在讀取所有筆記,在獲取aiff文件之前添加'print note'。 – ifm

+0

是的,它絕對讀所有的筆記就好了。 請輸入文件name'let這一切」 C5 BB4 A4 F5 C5 A4 BB4 F5 F5 G5 F5 C5 C5 BB4 BB4 A4 BB4 C5 C5 e4 – Tony