Искам да прочета 1024 байта наведнъж с помощта на FileInputStream и да предам байтовия буфер на AudioTrack, който ще възпроизведе 1024 байта. Поставих това да е цикъл, така че цялата песен да се възпроизвежда непрекъснато. Може да предложите да прочетете целия 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