2015-02-01 4 views
1

извините, если это было задано раньше, я проверил, но не смог найти ответ на мою проблему. Я пытаюсь воспроизвести звук с использованием pyaudio с использованием многопроцессорности, поэтому я могу получить вход (в конечном счете, с платы NI, но только клавиатуру на данный момент) одновременно. Я попытался использовать модуль многопроцессорности и получил этот код (функция gensin возвращает два массива numpy, вектор времени и вектор sin). Я новичок в обоих многопроцессорной и pyaudio модуля, так что любая помощь будет очень признателен :)Использование модульной многопроцессорности с pyaudio

def play_sound(frequency,duration,sampRate): 

    #generate the sin wave 
    t, wave = gensin(frequency,duration,sampRate) 

    #open the audio file 
    p = pyaudio.PyAudio() 

    #create a stream to play 
    stream = p.open(format = pyaudio.paFloat32, 
       channels = 1, 
       rate = sampRate, 
       output = True) 


    stream.write(wave.astype(np.float32).tostring()) 
    p.close(stream) 

frequency = 1200 
duration = 0.5  
sampRate = 64000 

p1 = multiprocessing.Process(target=play_sound,name='audioOut',args=(frequency,duration,sampRate)) 

Когда я затем выдать команду

p1.run() 

он играет хорошо, но я не думаю, что я могу получить параллелизм таким образом.

, но когда я пытаюсь

if __name__ == '__main__': 
    p1.start() 
    p1.join() 

Я получаю следующее сообщение об ошибке:

Process play sounds: 
Traceback (most recent call last): 
    File "/Applications/anaconda/python.app/Contents/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap 
    self.run() 
    File "/Applications/anaconda/python.app/Contents/lib/python2.7/multiprocessing/process.py", line 114, in run 
    self._target(*self._args, **self._kwargs) 
    File "<ipython-input-5-d9030c79195e>", line 13, in play_sound 
    output = True) 
    File "/Applications/anaconda/lib/python2.7/site-packages/pyaudio.py", line 747, in open 
    stream = Stream(self, *args, **kwargs) 
    File "/Applications/anaconda/lib/python2.7/site-packages/pyaudio.py", line 442, in __init__ 
    self._stream = pa.open(**arguments) 
IOError: [Errno Internal PortAudio error] -9986 

Я бегу Йосемити на 2013 Macbook Pro, этот код выполняется в IPython, но это не делает работайте в сценарии python, и я получаю тот же номер ошибки PortAudio. Я пытался использовать бильярд вместо многопроцессорности, и это ничего не меняло. Любые советы были бы очень полезны. Благодаря :).

+0

Что, кажется, работает использует бильярд и, сразу после импорта, установка billiard.forking_enable ('False'). Проблема решена :) – user3235916

ответ

1

Вы можете использовать billiard вместо multiprocessing и иметь его отключить Разветвляющихся:

pip install billiard 

и добавьте следующие строки в верхней части кода:

import billiard as multiprocessing 
multiprocessing.forking_enable(False) 
+0

спасибо, см. Мой комментарий к моему оригинальному сообщению :) – user3235916

+0

да, но комментарий не является ответом. [см. раздел справки о ответах] (https://stackoverflow.com/help/someone-answers) –

 Смежные вопросы

  • Нет связанных вопросов^_^