Android AudioRecord クラスに多くの問題があります。AudioRecord 内の read メソッドがどのように機能するかについて、私はいつも混乱していました。誰かが答えてくれることを願っています...
このシナリオを考えてみましょう。
- sampleRateInHz 値が 44100hz の新しい AudioRecord オブジェクトを作成しました。
- 次に startRecording() メソッドを呼び出すと、デバイスはマイクからの入力の録音を開始します。
- ちょうど 500 ミリ秒 (または 22050 サンプル) 後に read メソッドを呼び出し、44100 サンプルを長さ 44100 の新しい配列に読み込もうとします。
AudioRecord オブジェクトは 500 ミリ秒 (または 22050 サンプル) しか記録していないため、最後の 44100 サンプルを読み取ろうとすると、どうなりますか? 私の考えられる考えは次のとおりです。
- read メソッドは、十分なデータが利用可能になるまで 500 ミリ秒スリープし、その後 44100 個の記録されたサンプルをすべて読み取ります。
- read メソッドは、記録されたデータの量に関係なく、AudioRecord バッファ (AudioRecord オブジェクト内) の内容を読み取ります。したがって、この場合、最初の 22050 サンプルにはマイクから記録されたデータが含まれ、後続の 22050 サンプルにはゼロが含まれます。これは、読み取り関数がまだ書き込まれていないバッファーの領域にアクセスしているためです。
私は自分の Android デバイスでこれをテストしようと精力的に試みましたが、テストするのは簡単なことではありません。答えるには私よりも大きな心が必要です...助けていただければ幸いです...