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 で渡す形で正常動作を確認してるんですが、何が悪いのでしょうか。