AudioInputStream到一个数组

时间:2014-02-28 13:12:39

标签: java javasound

我需要从AudioInputStream中获取值并将其存储在byte []中。调用read(byte [])返回-1。如果我能够将值读取为整数,我可以将其转换为byte []。我该如何解决这两个问题?

3 个答案:

答案 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。