如何在JavaFX中播放声音?
我正在用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
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.wavNope文件名中。有人用JavaFX播放声音吗?