12

2 つのマイクからオーディオ データを取得し、そのサウンドをメモリからのサウンドとミックスし、ヘッドフォンでサウンドを再生する Android アプリを作成したいと考えています。これはリアルタイムで行う必要があります。Java Eclipse を使用したリアルタイムのオーディオ入力、ミキシング、および出力について、いくつかのチュートリアルまたはリファレンスを参照していただけますか?

これまでのところ、サウンドを録音して保存し、再生することはできますが、この方法でサウンド ハードウェアとリアルタイムに接続するためのチュートリアルは見つかりません。

注: 1 つのマイクはスプリッターを介して Android の 3.5 mm ヘッドフォン ジャックに接続され、もう 1 つのマイクは USB ポートを介して接続されます。

ありがとう!

4

1 に答える 1

5

ここには 2 つの問題があります。

1) USB 経由のオーディオ入力。
オーディオ入力は Android 3.2+ と libusb を使用して行うことができますが、簡単ではありません (libusb から USB 記述子を取得し、それらを自分で解析し、適切な制御転送をデバイスに送信する必要があります)。一部の電話機では、USB 経由で 5 ~ 10 ミリ秒程度の入力遅延が発生することがあります。

2) リアルタイムでオーディオ出力。これは Android の長年の問題であり、(ネイティブ オーディオ出力を使用して) リアルタイムにアプローチしたい場合、現時点では Galaxy Nexus にほとんど制限されています。ただし、USB を使いこなせば、遅延も少なく出力できる場合があります。

苦労して USB を動作させれば、ステレオ入力の USB オーディオ デバイスを手に入れることができると思います。各入力チャンネルに 1 つのモノラル マイクを接続していれば、USB 経由で出力すると非常に近くなります。あなたの宣言した目標。「USB Audio Tester」または「usbEffects」アプリを試して、現在何が可能かを確認してください。

ミキシングや出力などのコーディングに関しては、おそらく 1 つのスレッドが個別の入力ソースを読み取り、小さなチャンク (一度に 100 ~ 1000 サンプル) でキューに書き込む必要があります。次に、別のスレッドでキューを読み取って混合し、出力を別のキューに配置し、最後に (USB 経由で出力を行わない場合はネイティブ コードで) スレッドを作成して、混合キューを読み取り、出力を実行します。

次のリンクhttp://code.google.com/p/loopmixer/には、オーディオ自体を処理するためのフレーバーがあります。

于 2012-12-13T10:34:52.573 に答える