FileInputStream을 사용하여 한 번에 1024 바이트를 읽고 1024 바이트를 재생하는 AudioTrack에 바이트 버퍼를 전달하고 싶습니다. 전체 트랙을 계속 재생할 수 있도록 while 루프를 넣었습니다. 한 번에 전체 PCM을 읽을 수 있다고 제안 할 수도 있지만 그렇게하고 싶지는 않습니다. 이 스 니펫 코드는 첫 번째 1024 바이트 만 재생하고 이후에 루프를 종료합니다.안드로이드 : AudioTrack이 PCM 트랙을 완전히 재생하지 못함 Readin FileInputStream을 사용하여 한 번에 1024 바이트
당신은 실제로 읽기에 의해 생성 된 바이트 회계 더 정확해야 fis = new FileInputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Notate/" + MainActivity.filepath);
l = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Notate/" + MainActivity.filepath);
byte[] buffer = new byte[1024];
try {
fis = new FileInputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Notate/" + MainActivity.filepath);
while (fis.read(buffer)!=-1) {
int intSize = android.media.AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT);
AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT, intSize, AudioTrack.MODE_STREAM);
TextView t1 = (TextView) contentView.findViewById(R.id.textView1);
t1.setText(Integer.toString(intSize));
if (at != null) {
at.play();
at.write(buffer, 0, buffer.length);
at.stop();
at.release();
}
}
fis.close();
} catch (Exception e) {
}
코드를 들여 쓰기가 가능하도록 들여주십시오. 당신의 코드에는 두 개의'try' 블록이 있지만, 오직 하나의'catch '만 보입니다. 다른 하나는 어디 있니? 또한 예외가 발생하면 적어도 예외를 로그하여 상황을 알 수 있습니다. – Michael
그리고'while' 루프가 반복 될 때마다 새로운 AudioTrack을 생성하려고합니다. 루프 이전에 하나의'AudioTrack'을 생성해야합니다. – Michael
그리고 문제가 해결되었습니다! 고마워요 마이클! – shivram