Java 从wav文件播放原始PCM字节
我有一个用16位PCM编码的wav文件,我想把它转换成一个PCM短数组,用audiotrack类播放原始数组。这就是我所做的:Java 从wav文件播放原始PCM字节,java,android,audio,wav,pcm,Java,Android,Audio,Wav,Pcm,我有一个用16位PCM编码的wav文件,我想把它转换成一个PCM短数组,用audiotrack类播放原始数组。这就是我所做的: String fileName = "test.wav"; File f = new File(baseDir + File.separator + fileName); InputStream is = null; try { is = new FileInputStream
String fileName = "test.wav";
File f = new File(baseDir + File.separator + fileName);
InputStream is = null;
try {
is = new FileInputStream (f);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
BufferedInputStream bis = new BufferedInputStream (is, 8000);
DataInputStream dis = new DataInputStream (bis); // Create a DataInputStream to read the audio data from the saved file
short[] music = new short[(int) f.length()];
int i = 0; // Read the file into the "music" array
try {
while (dis.available() > 0)
{
music[i] = dis.readShort(); // This assignment does not reverse the order
i++;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i("123",""+Arrays.toString(music));
try {
dis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
at=new AudioTrack(AudioManager.STREAM_MUSIC, 8000, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT, 8000 /* 1 second buffer */,
AudioTrack.MODE_STREAM);
at.write(music, 0, (int)f.length());
at.play();
阵列可以播放,但问题是,当我将其与播放原始wav文件进行比较时,我发现它们输出的声音不同。有人能帮我解决这个问题吗?提前谢谢你 您必须查找文件中的实际音频数据才能获得音频样本,请参见或
8khz时16位单声道的1秒为8000*2*1字节=16000字节您必须查找文件中的实际音频数据以获取音频样本,请参见或 8khz时16位单声道的1秒为8000*2*1字节=16000字节