我正在尝试使用JavaFX制作一款小游戏。
我想添加声音。 怎么样?
我尝试MediaPlayer
media
定义了相对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
答案 0 :(得分:1)
只是一个猜测,但是那个文件是“hornpipe.mp3”而不是“hormpipe.mp3”(带有m)?
答案 1 :(得分:1)
var player = javafx.scene.media.MediaPlayer { repeatCount:javafx.scene.media.MediaPlayer.REPEAT_FOREVER 媒体:媒体{来源:“{_ __DIR __} clip.wav” }; }; player.play();
您必须在构建/编译目录中包含音频文件,以便Netbeans可以将其打包到jar文件中。
答案 2 :(得分:0)
只是一个猜测,但我认为您的{__FILE__}
会扩展为您的文件名称。尝试将其替换为{__DIR__}
。
答案 3 :(得分:0)
另请注意,{__DIR__}
包含尾随/,因此请尝试此操作:
attribute media = Media{
source: "{__DIR__}sound/hormpipe.mp3"}
编辑:我做了一些挖掘,显然,Media对象的来源必须是远程URL或绝对文件路径,因为JAR中不允许使用媒体文件(我希望将来会有所改变)发布,因为我真的很喜欢JavaFX,并希望能够用它制作桌面应用程序)。请参阅:JavaFX FAQs。
答案 4 :(得分:0)
这对我有用:
MediaPlayer audio = new MediaPlayer(
new Media(
new File("file.mp3").toURI().toString()));
源文件应该在项目的根目录中(不是src,而不是dist)。
答案 5 :(得分: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)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
中