0

テキストファイルに書き込んだメモを読み取り、ピアノ音楽として再生する小さなプログラムを作成しようとしています。

私は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

そして、これは私がテストに使用したサンプル音楽の 1 つです (O Canada):

a4hc5qc5if4hg4qa4qbb4qc5qdb5qg4wz 

'z' が使用されているのは、私が設定した読み枠が 4 で、一部の曲は 3 文字 (abc) しかない白鍵で終わるためです。a は音符、b は位置、c は長さを示します。

4

2 に答える 2

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

これがお役に立てば幸いです。

于 2015-05-05T21:42:01.493 に答える
0

Pygame にはデフォルトで 8 つのチャネルがあります。

ミキサーはデフォルトで 8 つの同時サウンドファイルをサポートします。set_num_channels() 関数を使用して、いつでも使用可能なサウンド チャネルの数を変更できます。

https://www.pygame.org/docs/ref/mixer.html#pygame.mixer.get_busy

于 2018-05-23T15:19:28.937 に答える