Java - 将音频的字节数组转换为整数数组
问题描述:
我需要将音频数据作为“16位整数数组”(来自我有限的文档)传递到第三方系统。Java - 将音频的字节数组转换为整数数组
这是我到目前为止所尝试过的(系统从生成的bytes.dat文件中读取它)。
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("c:\\all.wav"));
int numBytes = inputStream.available();
byte[] buffer = new byte[numBytes];
inputStream.read(buffer, 0, numBytes);
BufferedWriter fileOut = new BufferedWriter(new FileWriter(new File("c:\\temp\\bytes.dat")));
ByteBuffer bb = ByteBuffer.wrap(buffer);
while (bb.remaining() > 1) {
short current = bb.getShort();
fileOut.write(String.valueOf(current));
fileOut.newLine();
}
这似乎并不奏效 - 第三方系统无法识别它,我也无法将该文件导入Audacity作为原始音频。
有没有什么明显的我做错了,还是有更好的方法来做到这一点?
额外信息:波形文件是16bit,44100Hz,单声道。
答
编辑2: 我很少使用AudioInputStream,但您写出原始数据的方式似乎相当复杂。一个文件只是一串随后的字节,所以你可以用一个FileOutputStream.write()调用来写你的音频字节数组。系统可能使用大端格式,而WAV文件则以小端格式存储(?)。然后,您的音频可能会播放,但非常默默无闻。
编辑3
删除了代码示例。
是否有一个原因,你正在使用换行符将音频字节作为字符串写入文件? 我认为系统预计音频数据是二进制格式,而不是字符串格式。
+0
感谢您的帮助。我已经接受了你的答案,因为你暗示大/小端:) – William 2009-06-25 15:15:02
答
我刚才设法解决了这个问题。我不得不在创建ByteBuffer后添加这一行。
bb.order(ByteOrder.LITTLE_ENDIAN);
你能告诉我更多关于这个第三方系统吗? – akarnokd 2009-06-25 15:03:38