我有以下代码片段:
File file = new File(sourceFile);
AudioInputStream in = AudioSystem.getAudioInputStream(file);
AudioInputStream din = null;
AudioFormat baseFormat = in.getFormat();
AudioFormat decodedFormat = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(),
16, baseFormat.getChannels(), baseFormat.getChannels() * 2,
baseFormat.getSampleRate(), false);
din = AudioSystem.getAudioInputStream(decodedFormat, in);
AudioSystem.write(din, AudioFileFormat.Type.WAVE, new File(targetFile));
我编写了这段代码来将 MP3 和 OGG 文件转换为 WAV 文件。据我了解,默认情况下java不支持这些格式,因此我必须将不同的jar添加到我的类路径中,如下所述:
http://www.javazoom.net/mp3spi/documents.html
http://www.javazoom.net/vorbisspi/documents.html
当我转换 MP3 文件时,代码运行良好。但是当我尝试转换 OGG 文件时,出现以下错误:
java.lang.IllegalArgumentException: Unsupported conversion: PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian from VORBISENC 44100.0 Hz, unknown bits per sample, stereo, 1 bytes/frame, 16000.0 frames/second
现在只有在获取解码的输入流本身时才会抛出这个,这意味着 ogg 文件已成功解析。
AudioSystem.getTargetEncodings(sourceFormat)
上面的代码在处理 MP3 或 OGG 文件时不会返回任何值。唯一的区别是 MP3 可以正常工作。
我添加了 ogg 转换所需的上一个链接引用的所有 jar,但最新版本的 jogg-0.0.7.jar 除外,因为我找不到它。
我尝试了不同的解决方案,比如 JAVE,但我也需要它在 MAC 上运行,如果没有一些特殊的实现,JAVE 将无法在 MAC 上运行。
有没有人有任何建议可能导致问题?是否有任何解决方法可以将 OGG 文件转换为 WAV?
编辑:
哇哇,我意识到问题出在哪里……阅读手册上的所有内容后,我了解到使用两种不同类型的 SPI(如在本例中为 MP3 和 OGG)可能会导致问题。我删除了 MP3 spi maven 依赖项,错误消失了。以为结果 wav 基本上是空的。对此有何建议?如果我能让 OGG 到 WAV 转换工作,我会很高兴,我可以用另一种方式转换 MP3。
我的 pom 依赖项如下所示:
<dependency>
<groupId>com.googlecode.soundlibs</groupId>
<artifactId>vorbisspi</artifactId>
<version>1.0.3-1</version>
</dependency>
这个下载我猜我需要让 OGG 转换工作的所有罐子。(好像没有。)