最近在使用 AudioRecord 录wave音频, 因为使用的是 AudioFormat.ENCODING_PCM_16BIT, 所以 read数据的时候,使用的short[] 作为Buffer, 结果出来发现全部是噪音,没有人声音。
折腾了一阵子,突然发现问题出在 writeShort 那里, 因为 DataOutputStream 的writeShort 写的时候是使用 big-endian 模式(见上图,也可以自己查看文档),这就导致每一次采样的高低位正好反过来了,这样要是声音正常就怪了。 修正也很简单, reverseBytes一下就好啦。
/**
* copy audio data to a given file
* @param path the path to file where data copy to
*/
private void copyDataToFile(String path) {
File outFile = new File(path);
if (outFile.exists()) {
outFile.delete();
}
DataOutputStream dos = null;
try {
dos = new DataOutputStream( new BufferedOutputStream( new FileOutputStream(outFile)));
} catch (FileNotFoundException e) {
Log.e(MY_LOG_TAG, "Can