2008-10-27 139 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