AudioRecordクラスの使用に問題があります。記録したデータをバッファに保存したいのですが、それを実現するための適切な方法がわかりません。私は多くの例を経験しましたが、それらのほとんどは複雑で、多くの異なるアプローチを表しています。簡単な説明を探しています。
プロジェクトのオーディオ設定は次のとおりです。
int audioSource = AudioSource.MIC;
int sampleRateInHz = 8000;
int channelConfig = AudioFormat.CHANNEL_IN_MONO;
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
int bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat);
short[] buffer = new short[bufferSizeInBytes];
AudioRecord audioRecorder = new AudioRecord(audioSource,
sampleRateInHz,
channelConfig,
audioFormat,
bufferSizeInBytes);
記録関数を作成しようとしています:
public void Recording() {
audioRecorder.startRecording();
...
audioRecorder.stop();
audioRecorder.release();
}
.read(short [] audioData、int offsetInShorts、int sizeInShorts)関数を使用することになっていることを知っています。そして、ここから私の問題が始まります。audioDataバッファがどのように機能するかわかりません-関数が記録されたサンプルをaudioDataに入れると思います。データが完全にいっぱいになるとどうなりますか?一番早い位置から書き直し始めますか?もしそうなら、私は収集したすべてのサンプルを別の場所にコピーする必要があると思います。それは別の質問を提起します-.read(...)関数バッファがすでにいっぱいであるかどうかをどのように確認できますか?時間を測定してバッファの内容をコピーする必要がありますか、それともそれに到達する別の方法がありますか?また、記録操作全体のスレッドを作成する必要がありますか?
1つのトピックで非常に多くの質問をしてすみません:)