在过去的几天里,试图让它发挥作用时遇到了一些麻烦。但我想要的是我们有一个通过网络发送原始数据的应用程序。然后我读入这个二进制数据并想把它保存到一个 wav(任何音频)文件中。以后可能会看压缩。
所以有问题的代码:
byte[] allBytes = ...
InputStream b_in = new ByteArrayInputStream(allBytes);
try
{
AudioFormat format = new AudioFormat(8000f, 16, 1, true, true);
AudioInputStream stream = new AudioInputStream(b_in, format, allBytes.length);
//AudioInputStream stream = AudioSystem.getAudioInputStream(b_in);
也尝试过使用上述语句,但我得到了例外:javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from stream
. 所以我认为正在发生的是,因为我的流是原始音频数据并且没有波头,这会引发异常?
File newPath = new File(SystemConfiguration.getLatest().voiceNetworkPathDirectory + currentPhoneCall.fileName);
if (!AudioSystem.isFileTypeSupported(Type.WAVE, stream))
{
Logger.error("Audio System file type not supported");
}
AudioSystem.write(stream, Type.WAVE, newPath);
该文件确实成功写入,但它都是静态的,我是否需要使用类似这样的东西在输出上创建一个波头。当我在记事本中查看输出的 wav 文件时,它似乎确实有一个标题,因为它以“RIFF”开头。
我需要在我的输入流中添加一个假标题吗?我应该只创建自己的输出标头并使用二进制编写器保存它吗?