加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 02:26:00 所属栏目: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(Except
我想在 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格式.我只想补充一点细节.

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

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

了解格式后,您可以检查本教程中的代码是否支持:
http://download.oracle.com/javase/tutorial/sound/converters.html
请参阅“编写声音文件”中的讨论,其中介绍了AudioSystem方法“isFileTypeSupported”.

以下是我的PC上支持的格式列表.我通过Eclipse调试器检查LineInfo对象获得了这个列表.我怀疑这些是标准的,但我不确定:

BigEndian = false,PCM_UNSIGNED,channels = 1,bits = 8
BigEndian = false,PCM_SIGNED,bits = 16
BigEndian = true,bits = 16
BigEndian = false,channels = 2,bits = 16

我使用的大多数WAV文件是上面列表中的倒数第二个:小端,16位,立体声,以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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读