将字节数组转换为 Wav 文件 [重复]
Posted
技术标签:
【中文标题】将字节数组转换为 Wav 文件 [重复]【英文标题】:Converting Byte Array to Wav file [duplicate] 【发布时间】:2010-11-09 12:28:47 【问题描述】:在对这个主题进行广泛研究后,我已经走到了一堵砖墙。
我要做的就是将一组 .wav 文件一个接一个地添加到一个字节数组中,然后将它们全部输出到一个完整的新创建的 .wav 文件中。我将所有 .wav 数据提取到一个字节数组中,跳过 .wav 标头并直接获取数据,然后将其写入新创建的 .wav 文件时出现如下错误: 错误1:javax.sound.sampled.UnsupportedAudioFileException:无法从输入流中获取音频输入流 Error2:无法从输入流中获取音频输入流
代码是:
try
String path = "*********";
String path2 = path + "newFile.wav";
File filePath = new File(path);
File NewfilePath = new File(path2);
String [] folderContent = filePath.list();
int FileSize = 0;
for(int i = 0; i < folderContent.length; i++)
RandomAccessFile raf = new RandomAccessFile(path + folderContent[i], "r");
FileSize = FileSize + (int)raf.length();
byte[] FileBytes = new byte[FileSize];
for(int i = 0; i < folderContent.length; i++)
RandomAccessFile raf = new RandomAccessFile(path + folderContent[i], "r");
raf.skipBytes(44);
raf.read(FileBytes);
raf.close();
boolean success = NewfilePath.createNewFile();
InputStream byteArray = new ByteArrayInputStream(FileBytes);
AudioInputStream ais = Audiosystem.getAudioInputStream(byteArray);
AudioSystem.write(ais, Type.WAVE, NewfilePath);
【问题讨论】:
声音文件必须是一种格式(例如 22500 KHz、单声道、8 位)。它们还需要是相同的编码(例如 a-law 或 pcm)。 AudioSystem 类提供了在某些类型的流/格式之间进行转换的方法。调查一下。 即使它们都是相同的格式,简单地连接它们也行不通,因为 wav 文件有一个标题......并且连接它们会使标题意外地出现在文件中间。跨度> 他确实说他跳过了标题。 WAV 文件具有特定的格式,该格式在网络上的多个地方都有。一般来说,“破解”并不难,尽管格式有几种变化,有些比其他更棘手。 SMOP。 【参考方案1】:您的字节数组不包含任何标题信息,这可能意味着 AutoSystem.write 不认为它真的是 WAV 数据。
你能为你的组合数据创建合适的标题吗?
更新:This 问题可能会为您提供答案。
【讨论】:
谢谢理查德,这可能是我能找到的最接近答案的事情。在拆分文件时,我一直对 wav 标头的创建和放置感到困惑。 链接的问题根本不处理字节数组?你还没有回答这个问题,只是告诉他为什么它不起作用(他已经知道了)。为什么这很难找到答案???以上是关于将字节数组转换为 Wav 文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章