【发布时间】: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。