アプリケーションが audioBuffer から継続的にデータを読み取れるようにするために、Android AudioRecord ライブラリをいじっています。アプリケーションを機能させるには、コンストラクターでバッファーがどのように初期化されるかをよりよく理解する必要があると思います。
たとえば、新しい AudioRecord オブジェクトを初期化すると、次のようになります。
recorder = new AudioRecord(AudioSource.MIC, 44100, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, 2205000); //50 seconds worth
アプリケーションでは、ここで初期化したバッファに最後の 50 秒間のデータを保持したいのですが、最後の 10 秒間のデータ (および条件が満たされた場合は 50 秒間) を定期的に取り出したいと考えています。
まず、私の理解では、recorder.read(short readData[...)
関数は内部バッファーの一部を、渡した配列にコピーします (?)。
内部バッファーはある種のリング バッファーであると推測していますが、最後のサンプルが何であったかを知るにはどうすればよいでしょうか? または、これは呼び出し時に内部的に処理されますrecorder.read(short readData[1000],0,1000)
か? これで最後の 1000 サンプル、最初の 1000 サンプルが得られますか? 2 番目のパラメーター (オフセット) は、私が知る限り、readData パラメーターに書き込む場所をオフセットします。
ありがとう!