Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AudioTrack Android playing sounds from raw folder

Is it possible to play wav files with AudioTrack from the resources folder raw? It tried many ways to reference the raw files in my Android project, but I got a lot of exceptions.

This is what I have now, but when I press the button, no sound plays.

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();
    }
}
like image 246
pawlinsky Avatar asked Sep 04 '12 12:09

pawlinsky


2 Answers

Everything is fine with your code, You just need to change

while((i = inputStream.read()) != -1) 

to

while((i = inputStream.read(buffer)) != -1)
like image 130
M-WaJeEh Avatar answered Sep 21 '22 09:09

M-WaJeEh


... and you should place the audioTrack-play-call after writing PCM content into buffer ;)

like image 21
Sergio Avatar answered Sep 22 '22 09:09

Sergio