マイクデータをリアルタイムで処理・再生できるクロスプラットフォームのアプリケーションを書きたいです。概念実証として、人々が互いに話し、自分の声にフィルターを適用できるチャットルームを想像してみてください。OpenALはこれに適していますか?そうでない場合、誰かが代替手段を提供できますか?さらに、誰かがマイクから読み取り、出力を吐き出す単純な「hello world」プログラムを提供またはリンクできるとしたら、それは素晴らしいことです。
ありがとう!
マイクデータをリアルタイムで処理・再生できるクロスプラットフォームのアプリケーションを書きたいです。概念実証として、人々が互いに話し、自分の声にフィルターを適用できるチャットルームを想像してみてください。OpenALはこれに適していますか?そうでない場合、誰かが代替手段を提供できますか?さらに、誰かがマイクから読み取り、出力を吐き出す単純な「hello world」プログラムを提供またはリンクできるとしたら、それは素晴らしいことです。
ありがとう!
OpenAL は、この目的には適していない可能性があります。SDL (おそらく SDL_Mixer を使用) または PortAudio を使用することをお勧めします。どちらもクロスプラットフォームで、どちらもかなり使いやすいです。
この目的で OpenAL を使用するには、非表示の循環バッファーに蓄積されたサンプルの数をポーリングする必要があります。次に、準備ができたと判断したら、それらをつかみます。次に、フィルターを適用します。次に、フィルター処理されたデータをバッファーにアタッチします。次に、バッファーをソースのキューに入れ、ソースに再生するように指示します (既に再生されていない場合)。私の意見では、OpenAL の強みは 3D 効果を適用することです。リアルタイムのフィルタリングはそれほど得意ではありませんが、出力の遅延をもう少し許容できる場合は機能させることができると思います。フィルター処理には、バッファー オブジェクト モデルよりもコールバック モデルを好みます。
編集: OpenAL: How to create simple "Microphone Echo" programm?に、まさにこれを行うコードをいくつか投稿しました。 コメントは、処理を配置する場所を示します。
OpenAL は、API によると技術的には可能ですが、Apple の iOS 向けの実装にはオーディオ キャプチャ機能が含まれていません。
iOS では、Audio Queues または Audio Units を使用して録音する必要があります。リアルタイム エフェクトを適用するには、Audio Units が最適ですが、Audio Queues よりもはるかに複雑です。
Apple には、それを行う 2 つ (またはそれ以上) のサンプルがあります。aurioTouch と SpeakHere をチェックしてください。aurioTouch はマイク入力を受け取って再生し、SpeakHere は入力を受け取って録音することができ、それを再生するように簡単に変更できます。