gpt4 book ai didi

java - 如何使用 JavaFX MediaPlayer 多次播放同一音频剪辑

转载 作者:行者123 更新时间:2023-12-02 01:22:14 26 4
gpt4 key购买 nike

我想实现一个简单的任务:当单击按钮时,我想播放声音。我有 3 个独立的按钮,单击它们时会调用相同的函数。在此函数中,我播放音频剪辑。棘手的部分是:有时按钮工作得很好,有时根本不起作用,这对我来说非常奇怪,因为它们都调用相同的函数。

我浏览了其他与 javafx-audio 相关的问题,但它们都是关于根本不播放音频的问题,而在我的情况下,它似乎只是有时播放?

FXML 片段:

<ImageView fx:id="bomb1" fitHeight="32.0" fitWidth="32.0" 
onMouseClicked="#useTheBomb"
pickOnBounds="true" preserveRatio="true">
<Image url="@bombs/bomb1.png"/>
<cursor>
<Cursor fx:constant="HAND"/>
</cursor>
</ImageView>
<ImageView fx:id="bomb2" fitHeight="32.0" fitWidth="32.0"
onMouseClicked="#useTheBomb"
pickOnBounds="true" preserveRatio="true">
<Image url="@bombs/bomb2.png"/>
<cursor>
<Cursor fx:constant="HAND"/>
</cursor>
</ImageView>
<ImageView fx:id="bomb4" fitHeight="32.0" fitWidth="32.0"
onMouseClicked="#useTheBomb"
pickOnBounds="true" preserveRatio="true">
<Image url="@bombs/bomb4.png"/>
<cursor>
<Cursor fx:constant="HAND"/>
</cursor>
</ImageView>

此代码放置在我的 FXML Controller 类中

private val explosion = App::class.java.getResource("/bombs/explosion.mp3").toString()
private fun explode() = MediaPlayer(Media(explosion)).play()

按钮调用的函数:

fun useTheBomb() {
explode()

/* rest of the function does not concern audio at all,
* but I include it in case there's maybe some voodoo magic
* underneath that I don't know about
* bombArray: Array<ImageView>
*/
with(bombArray[brikks.bombs++]) {
image = exploded
onMouseClicked = null
cursor = Cursor.DEFAULT
}
}

单击按钮时没有出现错误

我还修改了我的程序,允许多次单击按钮,在 30 次尝试中,随机有 6 次音频无法播放。我看不到任何模式。

最佳答案

好吧,我找到了解决方法

private val explosion = Media(App::class.java.getResource("/bombs/explosion.mp3").toString())

然后在 useTheBomb() 函数内:

MediaPlayer(explosion).play()

尝试了 100 次,每次都成功。不知道为什么。

关于java - 如何使用 JavaFX MediaPlayer 多次播放同一音频剪辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57483669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com