在Python 3上使用winsound同时播放几个音符

时间:2016-01-01 19:11:58

标签: python python-3.x audio

我正在尝试使用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不兼容。

我做错了什么?是否有更简单的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

我现在无法测试 - 但我认为使用线程可能会有效。

import threading
def playChord(notes, length):
    for note in notes:
        t = threading.Thread(target=playNote, args=(note,length))
        t.start()
    time.sleep(length)

我认为,你必须利用它来确保正确的时机。