Java audiotrack,如何跳过波头噪音?
我正在创建一个应用程序,在静态模式下通过audiotrack类播放.wav文件,但我不知道如何跳过wave头,这是我这样做的代码,我看不出有什么问题!有人知道如何跳过标题吗? 谢谢 公共类MainActivity扩展了ActionBarActivity{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 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();}