使用AudioTrack在Android中播放wav文件:嘈杂的声音

使用AudioTrack在Android中播放wav文件:嘈杂的声音,android,audio,Android,Audio,为了在Android上产生声音,我使用了AudioTrack 我已经能够产生正弦波、锯齿波、方波,但如果能有更真实的声音就好了 我发现.wav文件最容易在AudioTrack上播放,因为它们基本上只是一个带头的字节序列 因此,我在res/raw文件夹中获得了我的wav文件,并尝试使用以下代码播放它: public void writeWav(){ byte[] byteData = null; InputStream is = getResources().openRawResource

为了在Android上产生声音,我使用了
AudioTrack

我已经能够产生正弦波、锯齿波、方波,但如果能有更真实的声音就好了

我发现
.wav
文件最容易在
AudioTrack
上播放,因为它们基本上只是一个带头的字节序列

因此,我在
res/raw
文件夹中获得了我的wav文件,并尝试使用以下代码播放它:

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);
}

但我得到的只是噪音。我意识到有很多关于
AudioTrack
和wav文件的问题,但我找不到噪音问题的答案。

使用AudioTrack播放声音时使用此方法。它对我有用

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) {

    }

}