0

我正在尝试用 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

4

6 回答 6

1

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

于 2008-10-29T17:04:51.330 回答
1

var player = javafx.scene.media.MediaPlayer { repeatCount: javafx.scene.media.MediaPlayer.REPEAT_FOREVER media: Media { source: "{__DIR__}clip.wav" }; }; 播放器.play();

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

于 2008-12-15T12:44:07.540 回答
0

另请注意,它{__DIR__}包含尾随 /,因此请尝试以下操作:

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

编辑:我做了一些挖掘,显然,媒体对象的源必须是远程 URL 或绝对文件路径,因为 JAR 中不允许媒体文件(我希望将来的版本会改变这一点,因为我真的很喜欢 JavaFX,并希望能够用它制作桌面应用程序)。请参阅:JavaFX 常见问题解答

于 2010-06-19T15:34:50.860 回答
0

这对我有用:

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

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

于 2014-01-02T19:32:20.847 回答
0

只是猜测,但我认为您{__FILE__}将扩展为文件名。尝试将其替换为{__DIR__}.

于 2010-06-02T11:28:08.577 回答
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

于 2016-09-28T03:25:46.493 回答