我需要从AudioInputStream中获取值并将其存储在byte []中。调用read(byte [])返回-1。如果我能够将值读取为整数,我可以将其转换为byte []。我该如何解决这两个问题?
答案 0 :(得分:2)
如果打算将声音数据存储在byte[]
中,最好的方法是不要获得AudioInputStream
。相反,只需使用普通InputStream
即可。
AudioInputStream
通常从输入流中剥离第一个字节(因为它们包含格式化数据),然后仅提供该流的帧或样本。另一方面,使用InputStream
执行此操作,您应该能够获得所有字节。然后,一旦整个数据都在一个字节数组中,就可以从字节数组中形成AudioInputStream
(如果需要的话)。
答案 1 :(得分:0)
已更新
使用apache commons IOUtils从wav文件中读取字节。
InputStream is = -> your FileInputStream
ByteArrayOutputStream os = new ByteArrayOutputStream();
IOUtils.copy(is, os);
os.flush();
os.close();
byte[] ba = os.toByteArray();
你不能直接把它读到ByteArrayOutputStream或者你会得到
java.io.IOException: stream length not specified
at com.sun.media.sound.WaveFileWriter.write(Unknown Source)
at javax.sound.sampled.AudioSystem.write(Unknown Source)
答案 2 :(得分:0)
很难理解你想要什么:带有数据的字节数组或带有WAV文件的字节数组。只有声音数据的字节数组是一个非常简单的任务:从AudioInputStream复制到ByteArrayOutputStream。
第二种情况更复杂。在这种情况下,您应该从AudioInputStream读取ByteArrayOutputStream,然后形成WAVE标头。我可以举两个例子。我希望他们会帮助你。
How to record audio to byte array - 这是将音频录制到包含波形文件的字节数组的示例。
How to detect sound - 它显示了如何处理AudioInputStream。