我正在尝试同时播放song1和song2(注释掉的那个),但我不知道如何使用myro或winsound或其他任何东西。有人建议使用线程,但我不知道该怎么做,因为我只是一个非常小的初学者程序员。有人请帮我解决这个问题和/或详细解释如何做到这一点?这是我到目前为止所做的:
import winsound
from myro import *
def main():
HftM1 = makeSong("Db4 3/8; C4 3/8; Bb3 1/4; Bb3 3/8; Ab3 3/8; Gb3 3/8; Ab3 1/16; C4 3/8; Bb3 3/8; Ab3 1/8; Eb3 1/16; F3 1/16; Ab3 3/8; G3 3/8; F3 3/8; C4 1/16; Db4 3/8; C4 3/8; Bb3 1/8; F3 1/16; Gb3 1/16; Bb3 3/8; Ab3 3/8; Gb3 3/8; C4 3/8; Bb3 3/8; Ab3 1/8; Eb3 1/16; F3 1/16; Ab3 3/8; G3 3/8; F3 3/8")
saveSong(HftM1, "HymnfortheMissing1.txt", append=1)
HftM2 = makeSong("Bb2 1/8; F3 1/8; Bb3 1/4; Bb2 1/8; F3 3/8; Gb2 1/8; Db3 1/8; Gb3 1/4; Gb2 1/8; Db3 3/8; Ab2 1/8; Eb3 1/8; Ab3 1/4; Ab2 1/8; Eb3 3/8; F2 1/8; C3 1/8; F3 1/4; F2 1/8; C3 3/8; Bb2 1/8; F3 1/8; Bb3 1/4; Bb2 1/8; F3 3/8; Gb2 1/8; Db3 1/8; Gb3 1/4; Gb2 1/8; Db3 3/8; Ab2 1/8; Eb3 1/8; Ab3 1/4; Ab2 1/8; Eb3 3/8; F2 1/8; C3 1/8; F3 1/4; F2 1/8; C3 3/8")
saveSong(HftM2, "HymnfortheMissing2.txt", append=1)
song1 = readSong("HymnfortheMissing1.txt")
#song2 = readSong("HymnfortheMissing2.txt") #This part of the song is supposed to be played at the same time as the first part, but I don't know how to do that so...
play = []
for n in range(len(song1)):
play = song1[n]
note = play[0]
duration = play[1]
winsound.Beep(int(note), int(duration*2000))
main()
答案 0 :(得分:3)
我建议您使用PyGame进行此类工作,并查看此related question。您必须使用调音台模块。
一般情况下,您必须使用音频流上的一些数学操作来混合PCM数据(例如讨论see this question)。
更新:Myro(我从未使用过)in the docs说有一种方法可以使用beep
函数执行此操作:
发出哔哔声(自我,持续时间,频率,频率2 =无):发出声音。如果 给出两个音调,机器人将它们组合在一起。
举个简单的例子,如果您有第一首歌曲中的音符A,持续时间为1秒,而第二首歌曲中有音符B,持续时间为2秒,则必须两次调用beep
:首先播放两个音符A和B同时持续1秒,然后再播放音符B再持续1秒。
毋庸置疑,这段代码比使用像PyGame这样的音频文件播放声音并混合它们要复杂得多。