繁体   English   中英

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

[英]pygame: using pygame.mixer simultaneously from 2 threads fails

我正在尝试用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() 

只发出两种声音,而不是一种。

抱歉,它不使用您的代码,但也许对您有用。 :)

这让我很烦。 我决定使用os-wide标准音乐播放器来播放它,因为其他方法似乎都不起作用。

os.system("open " + path)

在Mac上工作正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM