pygame:从2个线程同时使用pygame.mixer失败

时间:2011-12-22 23:52:44

标签: python pygame audio

我正在尝试用pygame和numpy构建一个小声音发生器。以下代码正确地从我的numpy数组中播放数据,但是当我尝试在模块中使用此代码并从不同的线程或从不同的进程访问它以一次播放两个声音时,播放其中一个声音< em>之前另一个而不是同时

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:

尝试使用snack / 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:

见帖子

2 个答案:

答案 0 :(得分:0)

要完全绕过您的问题,您可以使用py audiere发出声音。有了它,你可以同时拥有两种不同的音调。

使用您的代码我认为您不能同时拥有两种音调。 这是我的频率发生器的片段:

speakers = audiere.open_device()

tone = speakers.create_square(start_freq *2)
tone.pan = 1

tone.stop()
tone.play() 

只有两个声音而不是一个。

很抱歉,它不使用您的代码,但这可能对您有用。 :)

答案 1 :(得分:0)

这对我来说很烦人。我决定使用os范围的标准音乐播放器来播放它,因为其他方法似乎都不起作用。

os.system("open " + path)

在mac上工作正常。