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 в буфер;)

Другие вопросы по тегам