Я хочу читать 1024 байта за раз с помощью FileInputStream и передавать буфер байтов в AudioTrack, который будет воспроизводить 1024 байта. Я поставил это цикл while, чтобы весь трек проигрывался непрерывно. Вы могли бы предложить прочитать весь PCM сразу, но я не хочу этого делать. Этот фрагмент кода воспроизводит только первые 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
. Где другой? Кроме того, когда возникает исключение, вы можете захотеть, по крайней мере, зарегистрировать исключение, чтобы знать, что происходит. - person Michael   schedule 07.01.2015AudioTrack
для каждой итерации циклаwhile
. Вы должны создать одинAudioTrack
перед циклом. - person Michael   schedule 07.01.2015