【问题标题】:Playing several notes simultaneously using winsound on Python 3在 Python 3 上使用 winsound 同时演奏多个音符
【发布时间】:2017-01-13 21:43:25
【问题描述】:

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

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

【问题讨论】:

标签: python python-3.x audio


【解决方案1】:

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

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

我认为,你必须玩弄它才能把握好时机。

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    相关资源
    最近更新 更多