如何在Java中播放不同的声音?

如何在Java中播放不同的声音?,java,audio,Java,Audio,我正在尝试用java播放声音 private Clip clip; public Sound(String filename) { try{ AudioInputStream ais; ais = AudioSystem.getAudioInputStream(this.getClass().getResource(filename)); clip = AudioSystem.getClip(); clip.open(ai

我正在尝试用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秒)音效。 对于某些不播放的剪辑(它们也是.wav),我得到了不支持的DaudioFileException。 样品未加工夹:
示例工作剪辑:

据我所知,有些格式不受支持。请检查哪些WAV格式有效,哪些不有效

我所说的格式是指如下内容:


然后,您可以转换为工作的格式。

正如前面的人们所说,不支持某些WAV格式。我只想补充一点细节

我经常遇到以24位或32位编码的WAV,而javax.sound.sampled支持的最大值是16位

要了解特定的.wav文件,如果您有Windows,可以右键单击该文件并检查属性和“摘要”选项卡。我不知道在MAC或Linux系统上的等价物是什么

了解格式后,可以检查本教程中的代码是否支持该格式: 请参阅“编写声音文件”中的讨论,其中介绍了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签名,立体声,编码速度为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:+1 WAV是一种容器格式,可能包含许多内部编码。Java声音将播放其中一些编码,但不会播放其他编码@德里克:如果这是一个小程序,请使用
URL
(专用)而不是
文件
。如果这不是小程序,请使用
Clip
而不是
AudioClip
。好的,我将程序调整为使用Clips,得到错误:UnsupportedAudioFileException。我用了这个答案:来实现这个剪辑。看看这个问题,他也有一个类似的问题:我注意到其中一个答案中有人提到了一个方法
waituntldone()
BTW-这两个链接都将我重定向到amazon.com的“Kindle”页面。怎么回事?