簡體   English   中英

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

[英]How to play different sounds in 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 剪輯; 但是我無法播放 other.wav 剪輯。 我究竟做錯了什么? 還要注意:我希望播放簡短(< 3 秒)的音效。 對於某些不播放的剪輯(它們也是.wav),我得到了 UnsupportedAudioFileException。 不工作剪輯示例: 鏈接工作剪輯示例: 鏈接

正如前人所說,不支持某些 WAV 格式。 我將添加更多細節。

我經常遇到以 24 位或 32 位編碼的 WAV,而 16 位是 javax.sound.sampled 支持的最大值。

要了解特定的.wav 文件,如果您有 Windows,您可以右鍵單擊該文件並檢查屬性和“摘要”選項卡。 我不知道 MAC 或 Linux 系統上的等價物是什么。

知道格式后,您可以檢查本教程中的代碼是否支持它: http://download.oracle.com/javase/tutorial/sound/converters.ZFC35FDC70D5FC69D269883A822C7 Sound Files5 他們在“EZritingA Sound Files”中介紹了討論AudioSystem 方法,“isFileTypeSupported”。

以下是我的 PC 上支持的格式列表。 我通過 Eclipse 調試器檢查 LineInfo object 得到了這個列表。 我懷疑這些是標准的,但我不確定:

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 文件是上面列表中倒數第二個文件:little endian,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);

據我所知,某些格式不被支持。 請檢查哪些 WAV 格式有效,哪些無效。

格式我的意思是這樣的: http://en.wikipedia.org/wiki/WAV#WAV_file_compression_codecs_compared

然后你可以轉換為有效的格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM