Pet*_*zki 6 java audio wav javasound ogg
我有以下代码片段:
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));
Run Code Online (Sandbox Code Playgroud)
我编写了这段代码,用于将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
Run Code Online (Sandbox Code Playgroud)
现在只有在获取解码后的输入流时才抛出此值,这意味着ogg文件已成功解析.
AudioSystem.getTargetEncodings(sourceFormat)
Run Code Online (Sandbox Code Playgroud)
在处理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>
Run Code Online (Sandbox Code Playgroud)
这下载我想我需要进行OGG转换工作的所有罐子.(看起来不是.)
使用tritonus_jorbis-0.3.6.jar替换 vorbisspi1.0.2.jar。
AudioSystem在解码原始AudioInputStream时,会获取所有SPI的FormatConversionProvider并一一检查,直到找到一个可以工作的。所以类路径的顺序很重要。
检查您的类路径以确保使用“org.tritonus.sampled.convert.jorbis.JorbisFormatConversionProvider”。检查类路径中的每个 JAR;在其中搜索以下文件。或者只是将 tritonus_jorbis-0.3.6.jar 放在类路径的最开头。
META-INF\services\javax.sound.sampled.spi.FormatConversionProvider
Run Code Online (Sandbox Code Playgroud)
有关如何在 Maven 中指定类路径顺序,请查看这篇文章:Maven 类路径顺序问题。
| 归档时间: |
|
| 查看次数: |
5114 次 |
| 最近记录: |