在没有pygam的PYTHON中同时播放两个声音

2024-10-01 15:29:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个嵌入计算机模块的项目,EXM32初学者工具包,我想用8个音符模拟钢琴。操作系统是linux,我用Python编程。我的问题是Python的2.4版本没有pygame库来同时播放两个声音。现在我在python中使用“操作系统('aplay/做.wav')”从linux控制台播放声音。在

简单化的问题是:我可以使用另一个库来执行以下操作:

    snd1 =  pygame.mixer.Sound('./Do.wav')
    snd2 =  pygame.mixer.Sound('./Re.wav')

    snd1.play()
    snd2.play()

同时玩“做”和“是”吗?我可以使用“auidoop”和“wave”库。在

我尝试使用线程,但问题是程序要等到控制台命令完成。我可以用另一个图书馆吗?或者用“wave”或“audioop”的方法??(我相信这最后一个库只用于处理声音文件) 完整代码是:

^{pr2}$

Tags: 模块项目声音playlinux计算机wavepygame
2条回答

您的基本问题是希望生成一个进程,然后等待其返回值。你不能用os.system()来做这件事(好吧,你可以产生几十个线程)。在

您可以使用subprocess模块来实现这一点,顺便说一下,从2.4开始就可以使用它了。有关示例,请参见here。在

由于默认python实现中的全局解释器锁(“GIL”),一次只能运行一个线程。所以这对你没什么帮助。在

另外,os.system等待命令完成,并生成一个额外的shell来运行该命令。您应该改为使用^{},它将在程序启动后立即返回,默认情况下不会生成额外的shell。以下代码应尽可能紧密地启动两个播放器:

import subprocess

do = subprocess.Popen(['aplay', './notas_musicales/Do.wav'])
re = subprocess.Popen(['aplay', './notas_musicales/Re.wav'])

相关问题 更多 >

    热门问题