2017-03-10 5 views
0

ここでは簡単な例を示します。私はこのコードを持っています:パイゲームミキサー:マルチプロセッシング時にオーディオデバイスが使用できない、またはサウンドがありません

from pygame import mixer 
def say(): 
    mixer.init() 
    mixer.music.load('/home/orif/Downloads/english.wav') 
    mixer.music.play() 
    while mixer.music.get_busy(): 
     time.sleep(0.2) 

これはいくつかの警告を表示しますが、完全に機能します。警告:

ALSA LIBのpcm_dsnoop.c:606:(snd_pcm_dsnoop_open)スレーブ ALSAのLIBのpcm_dmix.cを開くことができません:1029:ALSA LIB pcm.cをスレーブを開くことができない(snd_pcm_dmix_open):2266 :(snd_pcm_open_noupdate)未知のPCM cards.pcm.rear ALSA libにpcm.c:2266:(snd_pcm_open_noupdate)不明PCM cards.pcm.center_lfe ALSA libにはpcm.c:2266:(snd_pcm_open_noupdate) 不明のPCM cards.pcm.side ALSA libに pcm_dmix.c:1029:(snd_pcm_dmix_open)スレーブを開くことができません

それそれはないだろう、子プロセスで:

def test(): 
    talk_process = Process(target=say) 
    talk_process.start() 
    print 'waiting for the process...' 
    talk_process.join() 
    print 'done' 

それは、その後、同じ警告を出力します。

waiting for the process... 
Process Process-1: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap 
    self.run() 
    File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run 
    self._target(*self._args, **self._kwargs) 
    File "/home/orif/Projects/example.py", line 178, in say 
    mixer.init() 
error: No available audio device 
done 

私は同じですが、スレッドで操作を行う場合は、それがうまく動作します。私は書かれたものを試しましたherehere。前者のリンクでは、このコメントの解決策が私を助けてくれました。

mixer.init() 
talk_process.start() 
しかし、今起こって、どのようにそれを解決するためには何の音が再生されない、と待機ループ while mixer.music.get_busy()は無限

です:私はちょうどサブプロセスを実行する前に、ミキサーを初期化?

答えて

0

申し訳ありませんが、私の悪い、私は質問をする前にすべてをチェックしませんでした。上のコードスニペットは少し不完全です。私は無関係だと思ったものもいくつかありました。 SpeechRecognitionを使用する場所にモジュールをインポートしました。コードでは、このように見えた関数の宣言があった:Pythonは最後の可能な瞬間のすべてを実行するので、私は思っているコードを書くの瞬間

def foo(m = sr.Microphone()): 
    pass 

を、それはあまりにも動作するはずです。そして、私がそのコードを実行したとき、それはしたので、すべてがうまくいくように見えました。私は間違っていた。

関数宣言の瞬間、そのメソッド呼び出しは "引数が与えられていなければ、この呼び出しの結果で置き換えてください"とは扱われませんでしたが、実際に呼び出され、戻り値はオプションの引数として使用されました。私はマルチプロセッシング中にサウンドカードに何が間違っていたのか分かりませんが、その理由は私がそれらの奇妙で曖昧なエラーメッセージを持っている理由です。ここで

が問題を引き起こしていたかを示すために少し例を示します

def foo(): 
    print 'TRIGGERED' 
    return 42 

def bar(a = foo()): 
    print a 

if __name__ == '__main__': 
    pass 

ものの、それが何もしないはずだが、このコードは実際にTRIGGERED印刷します。そのようなオプションの引数に値を代入するのではなく、私は次のようにします:

def foo(a = None): 
    a = 'bar' if a is None else a 
関連する問題