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

这是我用来测试的样本音乐之一(加拿大):

a4hc5qc5if4hg4qa4qbb4qc5qdb5qg4wz 

使用“z”是因为我设置的阅读框是 4,有些片段以只有三个字母 (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 回答