1

Android AudioRecord クラスに多くの問題があります。AudioRecord 内の read メソッドがどのように機能するかについて、私はいつも混乱していました。誰かが答えてくれることを願っています...

このシナリオを考えてみましょう。

  1. sampleRateInHz 値が 44100hz の新しい AudioRecord オブジェクトを作成しました。
  2. 次に startRecording() メソッドを呼び出すと、デバイスはマイクからの入力の録音を開始します。
  3. ちょうど 500 ミリ秒 (または 22050 サンプル) 後に read メソッドを呼び出し、44100 サンプルを長さ 44100 の新しい配列に読み込もうとします。

AudioRecord オブジェクトは 500 ミリ秒 (または 22050 サンプル) しか記録していないため、最後の 44100 サンプルを読み取ろうとすると、どうなりますか? 私の考えられる考えは次のとおりです。

  • read メソッドは、十分なデータが利用可能になるまで 500 ミリ秒スリープし、その後 44100 個の記録されたサンプルをすべて読み取ります。
  • read メソッドは、記録されたデータの量に関係なく、AudioRecord バッファ (AudioRecord オブジェクト内) の内容を読み取ります。したがって、この場合、最初の 22050 サンプルにはマイクから記録されたデータが含まれ、後続の 22050 サンプルにはゼロが含まれます。これは、読み取り関数がまだ書き込まれていないバッファーの領域にアクセスしているためです。

私は自分の Android デバイスでこれをテストしようと精力的に試みましたが、テストするのは簡単なことではありません。答えるには私よりも大きな心が必要です...助けていただければ幸いです...

4

1 に答える 1

0

Androidのドキュメントには実際には書かれていないので、これも不明確であることがわかりました. ただし、SOにはいくつかの回答があり、2つのオプションのうち最初のオプションが真であることを人々が確認しています-十分なデータが利用可能になるまでメソッドはブロックされます。 かなり詳細な説明については、この質問に対する 2 番目の回答を参照してください

于 2013-05-20T10:34:39.550 に答える