我正在尝试使用 python 3 上的 winsound 模块制作一个同时播放多个音符(和弦)的函数。
我创建了一个名为 playNote() 的函数,它可以接收格式为“C4”(中间 C)的音符和持续时间,以毫秒为单位。例如:
playNote('C4', 1000)
所以我尝试制作一个可以像这样演奏和弦的函数:
def playChord (notes, length):
notes *= length
for counter in range(0,length//100):
playNote(notes[counter], 1)
这将被称为:
playChord(['C4', 'E4', 'G4'], 1000)
但这并没有发出声音。我将其更改为:
def playChord (notes, length):
notes *= length
for counter in range(0,length//100):
playNote(notes[counter], 100)
但是,当然,只是一个接一个地弹奏音符,因为 playNote() 持续时间为 100,这违背了一个接一个地连续弹奏音符的原始目的,足够快,听起来像是在同时弹奏。
我查看了一个名为 pyFluidSynth 的模块,但它似乎与 64 位版本的 python 不兼容。
我在做什么大错特错?有没有更简单的方法来做到这一点?
最佳答案
我现在无法对此进行测试 - 但我认为使用线程可能会起作用。
import threading
def playChord(notes, length):
for note in notes:
t = threading.Thread(target=playNote, args=(note,length))
t.start()
time.sleep(length)
我认为,你必须玩弄它才能找到正确的时机。
关于python - 在 Python 3 上使用 winsound 同时演奏多个音符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34559170/