将.wav文件读取到Java中的字节数组

时间:2012-03-19 23:48:14

标签: java sockets audio wav javasound

我正在尝试将.wav文件读入要通过套接字连接发送并在另一端播放的字节数组。一旦读取文件的头部数据,我就会遇到问题,文件的其余部分只是用0填充字节数组。这是示例代码。我尝试了其他几种方法,但都产生了相同的结果。

File audioIn = new File("assets/file.wav");
byte [] byteArray = new byte[filesize];
FileInputStream fileInStream = new FileInputStream(audioIn);
fileInStream.read(byteArray);

这是从各个字节中获取的调试数据。标题信息对应于Java方法之前提取的内容。从我读过的,声音数据应该从字节[44]开始,但是我得到了下面的结果。数组的其余部分填充0。

Byte 0: 82
Byte 1: 73
Byte 2: 70
Byte 3: 70
...
Byte 41: 97
Byte 42: 0
Byte 43: -68
Byte 44: -1
Byte 45: 1
Byte 46: 0
Byte 47: 0
...

还应注意,此处将丢弃标题数据,因为预先发送WAVE信息。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

FileInputStream.read没有用数据填充字节数组;它只读取可以一次读取的内容。你必须在一个循环中调用它来读取所有内容。

或者,您可以使用DataInputStream.readFully方法。如果您使用的是Java 7,则可以使用Files.readAllBytes

答案 1 :(得分:1)

您还可以查看Apache/Commons IO库,其中有一些方便的东西用于处理常见的I / O任务,例如将整个文件读入字节数组,或关闭输入/输出样板文件。< / p>

相关问题