4

メインプログラムの実行を継続しながら、pyAudioを使用してオーディオデバイスをリッスンし、バックグラウンドで「何か」を実行しています。

最初は2番目のスクリプトから始めましたが、サポートのために1つのスクリプトに統合したいと思います。関数を移動し、Processを使用してリスナーを起動すると、リスナーがハングし、実行されません。

コードの簡略化されたスニペットは次のとおりです。

        def listener(self, q):
            CHANNELS = 2
            RATE = 44100
            INPUT_BLOCK_TIME = 0.05
            FORMAT = pyaudio.paInt16
            RATE = 44100
            INPUT_FRAMES_PER_BLOCK = int(RATE*INPUT_BLOCK_TIME)

            p = pyaudio.PyAudio()
            stream = p.open(format = FORMAT,
                        channels = CHANNELS,
                        rate = RATE,
                        input = True,
                        frames_per_buffer = INPUT_FRAMES_PER_BLOCK)
            q.put(os.getpid())
            import time
            time.sleep(300)


        def startListener(self):
            q = Queue()
            p = Process(target=self.listener, args=[q])
            p.daemon=True
            p.start()
            print q.get()

次のストリーム設定を削除すると、期待どおりにプロセスIDが返されます。

           stream = p.open(format = FORMAT,
                        channels = CHANNELS,
                        rate = RATE,
                        input = True,
                        frames_per_buffer = INPUT_FRAMES_PER_BLOCK)

私が見逃しているマルチプロセッシングとスレッド化について何かありますか?これは悪い考えですか?リスナーコードを別のスクリプトに保持することに固執する必要がありますか?

前もって感謝します!

4

1 に答える 1

1

__init__方法pyaudio.open()は次のとおりです。

__init__(self, PA_manager, rate, channels, format, input=False, output=False, input_device_index=None, output_device_index=None, frames_per_buffer=1024, start=True, input_host_api_specific_stream_info=None, output_host_api_specific_stream_info=None) 

彼らのウェブサイトのドキュメントによると。必須パラメーターのように見える PA_manager を設定していないようです。

于 2011-08-24T17:58:43.203 に答える