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

标签 python pygame audio

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

相关文章:

python - 在 Python 中返回 "large object"是否比返回 None 花费更多时间?

python - 如何从 SAM 本地中的另一个 lambda 调用 AWS lambda?

python - 如何获取数据框中两个重叠日期之间的范围?

python - 如何让 Sprite 在 Pygame 和 Python 中的所有计算机上均匀移动

ios - iPhone AVAudioPlayer 应用程序在第一次播放时卡住

python - 在 Python 中写入文件的实际位置

python - 复制时为 "pygame.error: No available video device"

javascript - html 音频 - 手动停止音频,引发结束事件

c# - 如何检查两个.wav文件是否包含相同的声音数据?

Python - Pygame 突然变慢