如何在JavaFX中播放声音?

如何在JavaFX中播放声音?,java,audio,javafx,javafx-1,Java,Audio,Javafx,Javafx 1,我正在用JavaFX做一个小游戏 我想增加声音。 怎么做 我尝试了MediaPlayer,使用media定义了相对source属性,如: attribute media = Media{ source: "{__FILE__}/sound/hormpipe.mp3" } attribute player = MediaPlayer{ autoPlay:true media:media } 它不起作用。 我明白了 FX媒体对象捕获异常com.sun.Med

我正在用JavaFX做一个小游戏

我想增加声音。 怎么做

我尝试了
MediaPlayer
,使用
media
定义了相对
source
属性,如:

attribute media = Media{
    source: "{__FILE__}/sound/hormpipe.mp3"        
}
attribute player = MediaPlayer{
    autoPlay:true
    media:media
}
它不起作用。 我明白了

FX媒体对象捕获异常com.sun.Media.jmc.mediavailableexception:媒体不可用:文件:。。。Sound.class/Sound/hormipe.mp3


只是一个猜测,但那个文件是“hornpipe.mp3”而不是“hormpipe.mp3”(带m)?

var player=javafx.scene.media.MediaPlayer{ repeatCount:javafx.scene.media.MediaPlayer.REPEAT\u 媒体:媒体{来源:{{uuuuu DIR}clip.wav“ }; }; player.play()


您必须将音频文件包含在build/compiled目录中,以便Netbeans可以将其打包到jar文件中。

只是一个猜测,但我认为您的
{uuuuu file}
将扩展到您的文件名。尝试将其替换为
{{uuuuuuu DIR}
还请注意,
{uuuuuu DIR}
包括尾随/,因此请尝试以下操作:

attribute media = Media{
source: "{__DIR__}sound/hormpipe.mp3"}
编辑:我做了一些挖掘,显然,媒体对象的源必须是远程URL或绝对文件路径,因为媒体文件在JAR中是不允许的(我希望在未来的版本中会有所改变,因为我非常喜欢JavaFX,并且希望能够用它制作桌面应用程序)。请参阅:。

这对我很有用:

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

源文件应该在项目的根目录中(不是src,不是dist)。

好的,用这个问题让MP3音频工作(有点),我学到了以下内容(不多)

1) 压缩格式的音频非常依赖于平台。我不断升级的Mint 17.1->18机器使用媒体和MediaPlayer可以很好地播放mp3。新安装的Mint18不会(使用开发工具)

所以使用.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

Nope文件名中。有人用JavaFX播放声音吗?