AudioTrack Android воспроизводит звуки из необработанной папки
Можно ли воспроизводить файлы WAV с AudioTrack
из папки ресурсов сырой? Он пытался ссылаться на необработанные файлы в моем проекте Android, но у меня было много исключений.
Это то, что у меня сейчас, но когда я нажимаю кнопку, звук не воспроизводится.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button buttonPlayAudioTrack = (Button) findViewById(R.id.buttonPlayAudioTrack);
buttonPlayAudioTrack.setOnClickListener(this);
int minBufferSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM);
}
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId() == R.id.buttonPlayAudioTrack)
playSound();
}
private void playSound() {
audioTrack.play();
int i = 0;
int bufferSize = 512;
byte [] buffer = new byte[bufferSize];
InputStream inputStream = getResources().openRawResource(R.raw.piano12);
try {
while((i = inputStream.read()) != -1)
audioTrack.write(buffer, 0, i);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
1 ответ
Решение
Все хорошо с вашим кодом, вам просто нужно изменить
while((i = inputStream.read()) != -1)
в
while((i = inputStream.read(buffer)) != -1)
... и вы должны поместить вызов audioTrack-play после записи содержимого PCM в буфер;)