我正试图在java中播放声音...
private Clip clip;
public Sound(String filename)
{
try{
AudioInputStream ais;
ais = AudioSystem.getAudioInputStream(this.getClass().getResource(filename));
clip = AudioSystem.getClip();
clip.open(ais);
}catch(Exception e){e.printStackTrace();}
}
public void playSFX()
{
clip.stop();
clip.setFramePosition(0);
clip.start();
}
我将上述代码与.wav文件一起使用。我可以成功播放某些.wav片段;但我无法播放其他.wav片段。我究竟做错了什么? 另外需要注意的是:我希望播放短暂(<3秒)的音效。 我得到了UnsupportedAudioFileException用于某些不播放的片段(它们也是.wav)。 示例取消工作剪辑:link 样本工作片段:link
答案 0 :(得分:1)
正如之前的人所说,不支持某些WAV格式。我只想补充一点细节。
我经常遇到以24位或32位编码的WAV,当16位是javax.sound.sampled支持的最大值时。
要了解特定的.wav文件,如果您有Windows,则可以右键单击该文件并检查属性和“摘要”选项卡。我不知道MAC或Linux系统上的等价物是什么。
了解格式后,您可以检查本教程中的代码是否支持: http://download.oracle.com/javase/tutorial/sound/converters.html 请参阅“编写声音文件”中的讨论,其中介绍了AudioSystem方法“isFileTypeSupported”。
以下是我的电脑支持的格式列表。我通过Eclipse调试器检查LineInfo对象获得了这个列表。我怀疑这些是标准的,但我不确定:
BigEndian = false, PCM_UNSIGNED, channels = 1, bits = 8
BigEndian = false, PCM_SIGNED, channels = 1, bits = 8
BigEndian = false, PCM_SIGNED, channels = 1, bits = 16
BigEndian = true, PCM_SIGNED, channels = 1, bits = 16
BigEndian = false, PCM_UNSIGNED, channels = 2, bits = 8
BigEndian = false, PCM_SIGNED, channels = 2, bits = 8
BigEndian = false, PCM_SIGNED, channels = 2, bits = 16
BigEndian = true, PCM_SIGNED, channels = 2, bits = 16
我使用的大多数WAV文件是上面列表中倒数第二个:小端,16位,PCM_SIGNED,立体声,编码为44100 fps。
以下代码也可以帮助您确定.wav文件的格式。
InputStream inStream = YourClass.class.getResourceAsStream("YourSound.wav");
AudioInputStream aiStream = AudioSystem.getAudioInputStream(inStream);
AudioFormat audioFmt = aiStream.getFormat();
DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFmt);
System.out.println(info);
答案 1 :(得分:0)
据我所知,有些格式不受支持。请检查那些工作和不工作的WAV的格式。
格式我的意思是:http://en.wikipedia.org/wiki/WAV#WAV_file_compression_codecs_compared
然后你就可以转换为有效的格式。