Java audiotrack,如何跳过波头噪音?

Java audiotrack,如何跳过波头噪音?,java,android,Java,Android,我正在创建一个应用程序,在静态模式下通过audiotrack类播放.wav文件,但我不知道如何跳过wave头,这是我这样做的代码,我看不出有什么问题!有人知道如何跳过标题吗? 谢谢 公共类MainActivity扩展了ActionBarActivity{ AudioTrack player; int minBufferSize = 200000; int waveHeader = 44; byte[] buffer = new byte[minBufferSize -waveHeader]; I

我正在创建一个应用程序,在静态模式下通过audiotrack类播放.wav文件,但我不知道如何跳过wave头,这是我这样做的代码,我看不出有什么问题!有人知道如何跳过标题吗? 谢谢

公共类MainActivity扩展了ActionBarActivity{

AudioTrack player;
int minBufferSize = 200000;
int waveHeader = 44;
byte[] buffer = new byte[minBufferSize -waveHeader];
InputStream is;
public TextView text;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_main);

    player = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_OUT_MONO,
            AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STATIC);
    is = getResources().openRawResource(R.raw.crash);
    try {is.read(buffer, waveHeader, minBufferSize);} catch (IOException e)      {e.printStackTrace();}
    try {is.close();} catch (IOException e) {e.printStackTrace();}
    player.write(buffer, 0, minBufferSize);

    Button button1 = (Button) findViewById(R.id.button1);
    button1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            playDrums();
        }});
}

public void playDrums(){
    player.play();
}
}

如中所示:

读取的第一个字节存储在元素
b[off]
中,下一个字节存储在
b[off+1]
中,依此类推。读取的字节数最多等于
len
。设k为实际读取的字节数;这些字节将通过
b[off+k-1]
存储在元素
b[off+k-1]
中,使元素
b[off+k]
通过
b[off+len-1]
不受影响

换句话说,参数
off
不会从输入流中跳过这些字节,而是以偏移量将它们存储在提供的数组中

要从输入中跳过字节,可以使用:

或在另一个缓冲区中读取波形头:

byte[] header = new byte[waveHeader];
try {is.read(header);} catch (IOException e) {e.printStackTrace();}
try {is.read(buffer, 0, minBufferSize);} catch (IOException e) {e.printStackTrace();}
毕竟,为了正确解释数据,您可能需要wave头(例如,每个采样的数据是1或2字节,采样率,通道数,…)

byte[] header = new byte[waveHeader];
try {is.read(header);} catch (IOException e) {e.printStackTrace();}
try {is.read(buffer, 0, minBufferSize);} catch (IOException e) {e.printStackTrace();}