简体   繁体   中英

Playing a wav file in Android using AudioTrack: noisy sound

To produce sound on Android, I am using AudioTrack .

I have been able to produce sine waves, sawtooth waves, square waves but it would be nice to have a more realistic sound.

I found that .wav files were the easiest to play on AudioTrack because they are basically just a sequence of bytes with a header.

So I have got my wav file in the res/raw folder and I tried playing it with this code :

public void writeWav(){
  byte[] byteData = null;
  InputStream is = getResources().openRawResource(R.raw.high);
  byteData = new byte[mBufferSize];
  try {
    is.read(byteData);
    is.close();
  }
  catch (FileNotFoundException e) {}
  catch (IOException e) {}

  mAudioTrack.write(byteData, 0, byteData.length);
}

But all I get is noise. I realize there are lots of questions about AudioTrack and wav files, but I couldn't find an answer to my noise problem.

Use this method to play sound using audioTrack. It works for me

public void playAudioTrack() {

    int sampleFreq = 16000;
    File file = new File("--filePath--");

    int shortSizeInBytes = Short.SIZE / Byte.SIZE;

    int minBufferSize = AudioTrack.getMinBufferSize(sampleFreq, AudioFormat.CHANNEL_OUT_MONO,
            AudioFormat.ENCODING_PCM_16BIT);

    int bufferSizeInBytes = (int)(file.length() / shortSizeInBytes);

    final AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, sampleFreq,
            AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize,
            AudioTrack.MODE_STREAM);
    int i = 0;
    byte[] s = new byte[bufferSizeInBytes];

    try {
        final FileInputStream fin = new FileInputStream("--filePath--");
        final DataInputStream dis = new DataInputStream(fin);
        at.setNotificationMarkerPosition((int)(file.length() / 2));

        at.play();
        while ((i = dis.read(s, 0, bufferSizeInBytes)) > -1) {
            at.write(s, 0, i);

        }

    } catch (FileNotFoundException e) {

    } catch (IOException e) {

    } catch (Exception e) {

    }

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM