pygame: использование pygame.mixer одновременно из двух потоков завершается неудачно - PullRequest
0 голосов
/ 23 декабря 2011

Я пытаюсь создать небольшой звуковой генератор с пигментом и нюми.Следующий код корректно воспроизводит данные из моих пустых массивов, но когда я пытаюсь использовать этот код в модуле и получать к нему доступ из разных потоков или из разных процессов для воспроизведения двух звуков одновременно, воспроизводится один из звуков до другой вместо одновременно одновременно

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

(edit) Теперь я обнаружил, что она не работает в 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 голосов
/ 23 декабря 2011

Это стало раздражать меня.Я решил использовать стандартный музыкальный проигрыватель для всей игры, так как ни один из других методов не работает.

os.system("open " + path)

отлично работает на Mac.

0 голосов
/ 23 декабря 2011

Чтобы полностью обойти вашу проблему, вы можете использовать py audiere, чтобы издавать звуки. с его помощью вы можете воспроизводить два разных тона одновременно.

Используя ваш код, я не думаю, что вы можете использовать два тона одновременно. Это фрагмент моего генератора частоты:

speakers = audiere.open_device()

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

tone.stop()
tone.play() 

Просто имейте два звука вместо одного.

Извините, он не использует ваш код, но, возможно, это может быть полезно для вас. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...