マイクからオーディオを録音し、ほぼリアルタイムで再生できるようにアクセスしたいと考えています。Android AudioRecord クラスを使用してマイク音声を録音し、すばやくアクセスする方法がわかりません。
AudioRecord クラスについては、公式サイトによると、「アプリは AudioRecord オブジェクトを時間内にポーリングする」、「満たされたバッファのサイズによって、未読データがオーバーランするまでの録音の時間の長さが決まります」。後で、ポーリングの頻度が低い場合は、より大きなバッファを使用することをお勧めします。実際にコードで例を示すことはありません。
私が本で見た 1 つの例では、AudioRecord クラスを使用して、ライブ マイク オーディオが新たに入力されたバッファーを継続的に読み取り、アプリがこのデータを SD ファイルに書き込みます。疑似コードは次のようになります-
set up AudioRecord object with buffer size and recording format info
set up a file and an output stream
myAudioRecord.startRecording();
while(isRecording)
{
// myBuffer is being filled with fresh audio
read audio data into myBuffer
send contents of myBuffer to SD file
}
myAudioRecord.stop();
このコードがどのように読み取りと録音速度を同期させるかは不明です。ブール値の「isRecording」は、他の場所で適切にオン/オフされていますか? 読み取りと書き込みにかかる時間に応じて、このコードの読み取り頻度が高すぎたり低すぎたりする可能性があるようです。
サイトのドキュメントには、 AudioRecord クラスには、インターフェイスとして定義された OnRecordPositionUpdateListener という名前のネストされたクラスがあるとも書かれています。この情報は、何らかの方法で、記録の進行状況を通知する期間とイベント ハンドラーの名前を指定すると、指定された頻度でイベント ハンドラーが自動的に呼び出されることを示唆しています。疑似コードでの構造は次のようになると思います-
set target of period update message = myListener
set period to be about every 250 ms
other code
myListener()
{
if(record button was recently tapped)
handle message that another 250 ms of fresh audio is available
ie, read it and send it somewhere
)
約 500 ミリ秒未満の遅延でマイク オーディオをキャプチャして処理できる特定のコードを見つける必要があります。Android は MediaRecorder という別のクラスを提供していますが、これはストリーミングをサポートしていないため、ライブ マイク オーディオを Wi-Fi ネットワーク経由でほぼリアルタイムでストリーミングしたい場合があります。具体的な例はどこにありますか?