如何在Java中播放不同的声音?
我正在尝试用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
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”页面。怎么回事?