我正在尝试用 pygame 和 numpy 构建一个小声音发生器。以下代码从我的 numpy 数组中正确播放数据,但是当我尝试在模块中使用此代码并从不同线程或不同进程访问它以一次播放两种声音时,之前播放了其中一种声音另一个而不是同时
def _play_array(array, ms, vol):
sound = pygame.sndarray.make_sound(_intern._as_int16(array))
channel = sound.play(-1)
channel.set_volume(vol)
if ms > 50:
pygame.time.delay(ms-50)
channel.fadeout(50)
else:
pygame.time.delay(ms)
sound.stop()
更新:
我已经尝试安装audiere,但发生的只是它出现了一个非常长的错误回溯,但这显然是安装程序遇到的问题:
/Developer/SDKs/MacOSX10.6.sdk/usr/include/stdarg.h:4:25: error: stdarg.h: No such file or directory
(编辑)
现在我发现它在 Mac OS X 上不起作用
更新2:
尝试使用零食/tkSnack:
RuntimeError: Tk not intialized or not registered with Snack
更新 3:
在将声音写入文件后尝试安装 wxPython 来播放声音 -
import wx
只是失败:/usr/local/lib/wxPython-unicode-2.8.12.1/lib/python2.7/site-packages/wx-2.8-mac-unicode/wx/_core_.so: no matching architecture in universal wrapper
.我对这个问题有点恼火......更新 4:
见帖子
最佳答案
要完全绕过您的问题,您可以使用 py audiere 来发出声音。有了它,您可以同时拥有两种不同的音调。
使用您的代码,我认为您不能同时拥有两种音调。
这是我的频率发生器的一个片段:
speakers = audiere.open_device()
tone = speakers.create_square(start_freq *2)
tone.pan = 1
tone.stop()
tone.play()
只是有两个声音而不是一个。
抱歉,它不使用您的代码,但也许这对您有用。 :)
关于python - pygame:从 2 个线程同时使用 pygame.mixer 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8610991/