如何在Java中播放不同的声音?
我想在java中播放声音......如何在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
据我所知,某些格式不支持。请检查那些工作和不工作的WAV格式。
通过格式我的意思是这样的位置:http://en.wikipedia.org/wiki/WAV#WAV_file_compression_codecs_compared
然后,你可以转换成其作品格式。
正如以前的人所说,一些WAV格式不支持。我只会添加更多的细节。
当16位是javax.sound.sampled支持的最大值时,我经常遇到以24位或32位编码的WAV。
要了解特定的.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);
也许你可以提供示例链接到文件的工作和不工作? – ashes999 2011-05-30 00:47:56
@ ashes999:+1 WAV是一种容器格式,可能有多种内部编码。 Java Sound将播放其中一些编码,但不包含其他编码。 @Derek:如果这是一个applet,请使用'URL'(专有)而不是'File'。如果这不是一个小程序,使用'Clip'而不是'AudioClip'。 – 2011-05-30 01:04:13
好的,我调整了我的程序来使用剪辑,而我得到错误:UnsupportedAudioFileException。我用这个答案:[链接](http://stackoverflow.com/questions/2246809/how-to-play-sounds-in-java-games)来实现剪辑。 – Derek 2011-05-30 01:58:44