600hz で 10 秒のサウンドを再生しようとしていますが、代わりに 600hz を 3 秒以上再生できません。誰かが私が間違っていることを指摘できますか?
int minBuffersize = AudioTrack.getMinBufferSize(samplerate,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT);
int size= (int) ((10f*samplerate)
/minBuffersize +1);
size*=minBuffersize;//round to the nearest minBuffersize multiple so I don't get an error
short[] play= new short[size];
for(int i =0;i<play.length;i++){
float time=(float)i/(float)samplerate;
play[i]=(short) (((float)Short.MAX_VALUE/10f)*Math.sin(
600f
*time
*(2f*Math.PI)));
}
AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC,
samplerate,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT,
play.length,
AudioTrack.MODE_STATIC);
int result=at.write(play,0,play.length);
Log.d("!!!", "result: "+result);
at.play();
デバッグ行が戻る場所
result: 221184
一貫して。
play.length = 442368 であることに注意してください。
さらに実験を重ねた結果、バッファーは常に play.length の半分ですが、バッファーの大きさに関係なく、サウンド自体は 3 ~ 5 秒しか持続しません。