2010-05-16 168 views
1

我正处于Java编写小型音乐/节奏游戏的初期阶段(通过Slick框架,后者使用OpenAL,但这可能与此无关)。游戏需要以WAV格式读取(和回放)几个声音文件,但其中一些文件正在抛出[javax.sound.sampled.UnsupportedAudioFileException]异常。针对UnsupportedAudioFileException的解决方法?

at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1102) 
at org.newdawn.slick.openal.WaveData.create(WaveData.java:123) 
at org.newdawn.slick.openal.SoundStore.getWAV(SoundStore.java:713) 
at org.newdawn.slick.openal.SoundStore.getWAV(SoundStore.java:683) 
at org.newdawn.slick.Sound.<init>(Sound.java:33) 

这些文件可以在Winamp或Foobar2000的回放就好了,所以这意味着Java的只是不承认文件格式的一些变种。我现在有什么选择?

注:有问题的文件是用户提供的,所以我不能只是将它们转换事前(使用类似的勇气)。任何转换步骤都必须在运行时完成。需要

回答

5

一个被认可的东西约WAV文件,就在于它是一种容器格式 - 它可以容纳多种不同格式的数据,包括​​到MP3

在这种情况下,我会猜测,正在使用该库被钩住Java Sound API和API的实现不支持包含在WAV文件中的数据的格式,导致UnsupportedAudioFileException例外。

的文件可以播放在Winamp或Foobar2000的回来就好 ,所以这意味着 的Java就是不承认文件格式的一些变种 。

为什么Winamp的和其他程序可以播放WAV文件的原因是因为它可能是使用Windows Audio Compression Manager或者(如果我理解正确的话)DirectShow,这是用来管理的audio codecs不同的类型。

Winamp的本身并不需要知道如何将WAV文件中的音频数据进行解码;它要求ACM或DirectShow返回它可以处理的原始音频数据。 (或者也可能是将数据直接发送到音频输出端。)

这个时候我的选择是什么?

一种替代似乎存在的形式Java Media Framework,似乎有support many multimedia formats

它说它在使用“JMF 2.1.1 Windows Performance Pack”时会挂接到Windows ACM中,因此它可能能够播放无法由Java Sound API播放的WAV文件。

+1

谢谢你的回答。似乎没有其他人加入到这个,所以我接受这一个:)。虽然有一点更新:Java Media Framework显然已经过时/被遗弃,并且多年未更新,所以它可能不是一个好主意。发现了值得进一步研究的两种选择:FMJ(http://fmj-sf.net/)和Xuggler(http://www.xuggle.com/xuggler/)。 – tschan 2010-06-02 07:03:46

相关问题