簡體   English   中英

如何在JavaFX中播放聲音?

[英]How to play sound in JavaFX?

我正在嘗試用JavaFX制作小型游戲。

我想添加聲音。 怎么樣?

我嘗試使用定義有相對source屬性的media來嘗試MediaPlayer

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

只是一個猜測,但是該文件是“ hornpipe.mp3”而不是“ hormpipe.mp3”(帶有m)嗎?

var player = javafx.scene.media.MediaPlayer {repeatCount:javafx.scene.media.MediaPlayer.REPEAT_FOREVER媒體:Media {來源:“ {__DIR __} clip.wav”}; }; player.play();

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

這對我有用:

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

源文件應位於項目的根目錄中(不是src,不是dist)。

只是一個猜測,但是我認為您的{__FILE__}會擴展為文件名。 嘗試將其替換為{__DIR__}

另請注意, {__DIR__}包含結尾的/,因此請嘗試以下操作:

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

編輯:我做了一些挖掘,顯然,Media對象的來源必須是遠程URL或絕對文件路徑,因為JAR中不允許使用媒體文件(我希望將來的發行版中會有所更改,因為我真的很喜歡JavaFX,並希望能夠用它制作桌面應用程序。 請參閱: JavaFX常見問題解答

好的,使用了這個問題使MP3音頻正常工作后,我學到了以下內容(不是很多)。

1)壓縮格式的音頻取決於平台。 我不斷升級的Mint 17.1-> 18機器使用Media和MediaPlayer可以很好地播放mp3。 不能重新安裝Mint 18(使用dev工具)。

因此,請使用.wav文件。

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

2)使用Media / MediaPlayer需要了解的一件事是,要多次播放(重復或一次全部播放,即按一次按鈕/在游戲中進行任何操作),您必須產生N個MediaPlayer對象,每個對象將播放一次,然后停止。

因此,請使用javafx.scene.media.AudioClip

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

AudioClip也有其問題,其中包括將原始音頻數據一次全部存儲在RAM中而不是進行緩沖。 因此,存在過度使用內存的可能性。

不管您最終采用哪種方法, daevon前面都提到了一個關鍵要注意的事情-路徑問題。 使用NetBeans,您將擁有NetBeansProjects / yourproject / src / yourproject / foo.java。 上面示例中的聲音進入NetBeansProjects / yourproject / noises / roll.wav

暫無
暫無

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

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