2011-06-24 4 views
1

マイクからオーディオストリームをキャプチャすると同時に、このストリームを再生中のオーディオファイルとミックスするプログラムを作成したいと思います。2つのオーディオストリームをミキシングするためにスレッディングプログラミングを使用する必要がありますか?

ライブラリー、APIなどを探していますが、私の懸念事項は実装についてですが、スレッドプログラミングを使用する必要がありますか?私はまだスレッドを使う方法を知らない。

オペレーティングシステムはWindowsで、言語はC++またはpythonです。

おかげ

+1

使用ジャック; arec + sox – sehe

+0

OpenALまたはSDLの使用を検討してください。どちらもあなたが望むことをすることができるはずです。彼らはどちらもスレッドを使用しますが、あなたの層にする必要はありません。 –

答えて

1

は、私はあなたがキャプチャさせると再生がサイドバイサイドスムーズに実行するためには、スレッドのいくつかの種類が必要になると思います。

PythonのマルチスレッドはGILによって制限されることに注意してください。 C++では、Boost.Threadのようなものを使うことができます。

一般に、マルチスレッド化するのは難しいので、それに精通するまでには時間が必要です。あなたの最善の選択肢はおそらく良い本を探すことです。

0

py2.6は、あなただけの緑のスレッド

0

TODO必要はありませんので、あなたがSDL mixerを使用することができ、同様に処理ベースのスレッドが付属しています。それはスレッドを開始するので、実行する必要はありません。 良いチュートリアルとリファレンスページがあります。

0

audacityソースAudioIO.cppを見てください。これはportmixerを使用しています(見てみる価値があります)。

Windowsでオーディオストリームを開始する方法については、portmixerを参照してください。 this oneのようにオンラインで多くの良いチュートリアルもあります。

windows wave APIはオーディオスレッドを開始しますが、ミックスしてオーディオスレッドコールバックがアクセス可能なバッファをいっぱいにするオーディオファイルを読み込み/解析/デコードする別のスレッドを持つことをお勧めします。 Portaudio/SDL/Open ALは、ウィンドウのサウンドホスト(MME/Direct Sound)の上にあるレイヤーに過ぎません。

しかし、あなたが本当に怠惰だと感じている場合や、概念の速い証明が必要な場合は、メインスレッドのオーディオファイルからバッファフィルを行うことができます。

マイクの入力に関しては、ストリームの詳細を指定するときに、どのデバイス入力が必要かを言うことができ、これらはints/floatの配列として与えられ、出力配列に直接送ることができます。あなたの場合は、オーディオファイルをミックス(追加)したいと思うでしょう。

関連する問題