作業中の関連コードのサンプルを次に示します。
AudioRecord recorder = setupAudio();
recorder.startRecording();
SetupAudio メソッド:
public AudioRecord setupAudio() {
AudioRecord recorder;
minBufferSizeInBytes = AudioRecord.getMinBufferSize(
RECORDER_SAMPLERATE, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT);
Log.e("MoverAudio","BufferSize: " + minBufferSizeInBytes);
recorder = new AudioRecord(MediaRecorder.AudioSource.CAMCORDER,
RECORDER_SAMPLERATE, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, minBufferSizeInBytes);
return recorder;
}
RECORDER_SAMPLERATE = 8000;
初期化にかかる時間を改善する方法があるかどうかを調べようとしています。
現在、3つのデバイスでテストしており、次の結果が得られています。
ギャラクシー S3
- setupAudio : ~200ms
- startRecording() : ~280ms
ギャラクシー S3 ミニ
- setupAudio : ~10ms
- startRecording() : ~290ms
ギャラクシー ネクサス
- setupAudio : ~10ms
- startRecording() : ~235ms
バッファサイズ:
- ネクサス: 704
- s3:1024
- s3 ミニ: 640
ただし、銀河ネクサスのデータしか使えません。私のアプリケーションの目的のために、オーディオ データをできるだけ早く取得できるようにする必要があります。現在の値では、Nexus のみが許容時間内にあります。
S3 mini は、Nexus よりも少しだけ時間がかかるため高速に見えるかもしれませんが、サンプルの最初の ~200 ミリ秒が 0 としてリストされているため、使用できません。
収集したデータを分析してわかったことによると、S3 と S3 mini のオーディオは何らかの形でフィルタリングされているようで、結果として得られる FFT はよりクリーンになり、低周波の音は常にあまり目立たなくなります。S3mini と Galaxy Nexus の両方で録音されたオーディオの例を次に示します。
http://img41.imageshack.us/img41/4177/ox7h.png S3 ミニ
http://img690.imageshack.us/img690/8717/iya6.png ギャラクシー ネクサス