python - 在 Python 3 上使用 winsound 同时演奏多个音符

标签 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 不兼容。

我在做什么大错特错?有没有更简单的方法来做到这一点?

最佳答案

我现在无法对此进行测试 - 但我认为使用线程可能会起作用。

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/

相关文章:

python - 如何中止 AST 访问者并保持原始节点不变?

python - 步长为 0.005 的 numpy.arange 的意外输出

python - Pandas DataFrame 仅适用返回第一列

java - 如何添加持久媒体控件,如 Apollo 或 Google 音乐

java - 如何通过 Java 客户端和 Python 服务器通过套接字创建 IPC?

Python os.path.commonprefix - 是否有面向路径的函数?

python - 安装 Python : "Ignoring ensurepip failure: pip 8.1.1 requires SSL/TLS" 时出现 pip 错误

python - 使用 scipy.signal 查找局部最大值

c# - 使用NAudio在Unity中创建AudioClip,在读取数据时卡住1-2秒

android - 如何在Android上基于字符串变量播放音频文件