繁体   English   中英

如何在JavaFX中播放声音?

[英]How to play sound in JavaFX?

我正在尝试用JavaFX制作小型游戏。

我想添加声音。 怎么样?

我尝试使用定义有相对source属性的media来尝试MediaPlayer

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

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

var player = javafx.scene.media.MediaPlayer {repeatCount:javafx.scene.media.MediaPlayer.REPEAT_FOREVER媒体:Media {来源:“ {__DIR __} clip.wav”}; }; player.play();

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

这对我有用:

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

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

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

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

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

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

好的,使用了这个问题使MP3音频正常工作后,我学到了以下内容(不是很多)。

1)压缩格式的音频取决于平台。 我不断升级的Mint 17.1-> 18机器使用Media和MediaPlayer可以很好地播放mp3。 不能重新安装Mint 18(使用dev工具)。

因此,请使用.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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM