AudioRecord
昨晩のエントリで 2 倍するの微妙じゃね? なエントリを投入してますが、ダウトな事が判明。
int bufferSize = 2 * AudioRecord.getMinBufferSize(this.getFrequency(), this.getChannelConfiguration(), this.getAudioEncoding()); AudioRecord recordInstance = new AudioRecord( MediaRecorder.AudioSource.MIC, this.getFrequency(), this.getChannelConfiguration(), this.getAudioEncoding(), bufferSize); short[] tempBuffer = new short[bufferSize];
上記ですが、AudioRecord のコンストラクタに渡す bufferSize は AudioRecord.getMinBufferSize メソドが戻す値よりも大きい値の方が良い模様。おそらくはオブジェクト自身が持ってるバッファ長になるはず。試しに 4 倍してみたら動作のもっさり感が無くなり、buffer overflow なメセジの出力頻度も減りました。
倍せずにそのままの値を渡す形で挙動の確認してみたんですが、動作はもさっとしてるわ overflow は出まくるわでおおごとに。ちなみにローカルな読み込み用のバッファ長は AudioRecord.getMinBufferSize メソドの戻り値と同じで問題無い模様。
こんなカンジで良いのかどうか。
int bufferSize = AudioRecord.getMinBufferSize(this.getFrequency(), this.getChannelConfiguration(), this.getAudioEncoding()); AudioRecord recordInstance = new AudioRecord( MediaRecorder.AudioSource.MIC, this.getFrequency(), this.getChannelConfiguration(), this.getAudioEncoding(), 4 * bufferSize); short[] tempBuffer = new short[bufferSize];
がしかし
N1 では正常動作してくれてません。。変換エンジン側については wav なデータを 8192 で渡す形で正常動作を確認してるんですが、何が悪いのでしょうか。