2008-10-27 140 views
0

我正在做一個小遊戲JavaFX的實驗。如何在JavaFX中播放聲音?

我想添加聲音。 如何?

我試圖用MediaPlayermedia相對source屬性等被定義:

attribute media = Media{ 
    source: "{__FILE__}/sound/hormpipe.mp3"   
} 
attribute player = MediaPlayer{ 
    autoPlay:true 
    media:media 
} 

,不能播放。 我得到

FX Media Object caught Exception com.sun.media.jmc.MediaUnavailableException: Media unavailable: file: ... Sound.class/sound/hormpipe.mp3

回答

1

只是一個猜測,但該文件 「hornpipe.mp3」,而不是 「hormpipe.mp3」(用M)?

+0

不需要文件名。 任何人都在JavaFX中播放聲音? – Chobicus 2008-11-05 23:06:20

1

變種玩家= javafx.scene.media.MediaPlayer { repeatCount:javafx.scene.media.MediaPlayer.REPEAT_FOREVER 媒體:媒體源{: 「{__DIR __} clip.wav」 }; }; player.play();

您必須將build/compiled目錄中的音頻文件包含在內,以便Netbeans可以將其打包到jar文件中。

0

只是一個猜測,但我認爲你的{__FILE__}將擴展到您的文件的名稱。嘗試用{__DIR__}替換它。

0

還要注意的是{__DIR__}包括尾隨/,那麼試試這個來代替:

attribute media = Media{ 
source: "{__DIR__}sound/hormpipe.mp3"} 

編輯:我做了一些挖掘,顯然,媒體對象的來源,必須爲遠程URL,或一個絕對的文件路徑,因爲媒體文件在JAR中是不允許的(我希望隨着將來的版本改變,因爲我真的很喜歡JavaFX,並希望能夠製作桌面應用程序)。請參閱:JavaFX FAQs

0

這爲我工作:

MediaPlayer audio = new MediaPlayer(
    new Media(
     new File("file.mp3").toURI().toString())); 

源文件應該是在項目的根目錄下(不SRC,不DIST)。

0

好吧,使用這個問題來獲得MP3音頻工作(有點),我已經學會了以下(不多)。

1)壓縮格式的音頻非常依賴於平臺。我不斷升級的Mint 17.1-> 18機器使用Media和MediaPlayer播放MP3。 Mint 18的全新安裝不會(使用開發工具)。

所以使用.wav文件。

Media sound=new Media(new File("noises/roll.wav").toURI().toString()); 
MediaPlayer mediaPlayer=new MediaPlayer(sound); 
mediaPlayer.play(); 

2)一個你需要知道的與事情媒體/ MediaPlayer的是,爲了發揮多次(反覆或一次即在按下按鈕/無論在遊戲中)你必須產生N個MediaPlayer對象,每個對象都會播放一次然後停止播放。

所以使用javafx.scene.media。音頻剪輯

AudioClip soundMyNoise = new AudioClip(new File("noises/roll.wav").toURI().toString()); 
soundMyNoise.play(); 

音頻剪輯也有它的問題,其中包括在RAM中存儲的原始音頻數據全部一次,而不是緩衝。所以存在過度使用內存的可能性。

無論您最終決定使用哪種方法,需要注意的一件事是早前提到的daevon - 路徑問題。在NetBeans中,您有NetBeansProjects/yourproject/src/yourproject/foo.java。上面示例中的聲音發送到NetBeansProjects/yourproject/noise/roll.wav