JavaFX AudioClip没有';我不能播放某些mp3文件

JavaFX AudioClip没有';我不能播放某些mp3文件,java,javafx,audioclip,Java,Javafx,Audioclip,我在使用JavaFX的音频剪辑播放mp3文件时遇到一些问题 我的代码如下: // define String path to mp3 file myFilePath = "path/to/file.mp3"; // Create an AudioClip Object from path audioToPlay = new AudioClip(Objects.requireNonNull(getClass().getResource(audioToPlay)).toExte

我在使用JavaFX的音频剪辑播放mp3文件时遇到一些问题

我的代码如下:

// define String path to mp3 file
myFilePath = "path/to/file.mp3";

// Create an AudioClip Object from path
audioToPlay = new AudioClip(Objects.requireNonNull(getClass().getResource(audioToPlay)).toExternalForm());

// play the AudioClip
audioToPlay.play();
我正在播放的音频文件都是mp3文件,而且都很短(<5秒)。大约80-90%的文件正在播放,没有任何问题,但其余的文件根本没有播放,或者只播放了很短的时间(不到一秒钟,听起来像是点击)

我不知道为什么10-20%的人不工作;他们使用我的媒体播放器和我的浏览器玩得非常好

问题是因为我使用了音频剪辑吗?我应该用别的东西来播放我的短音频文件吗


编辑:myFilePath定义为字符串,audioToPlay定义为AudioClip对象。

AudioClip
适用于可保存在内存中的短文件。此问题可能与调用play()方法的方式或时间有关。当通过按钮单击调用play方法时,GUI保持打开状态,是否会发生这种情况?有些人没有意识到播放是一个守护线程。如果程序触发声音,然后在声音结束前完成并退出,则播放行为不会阻止程序关闭。此外,FWIW,一旦加载到内存中,就不需要反复重新加载
音频剪辑


我想补充一点:在我看来,有时候Java不能很好地处理会话中的第一个音频调用,常常会出现口吃。正因为如此,我经常在节目开始时播放“无声”的声音,以使事情顺利进行。仅提一下,以防在程序开始运行时出现问题。如果您使用GUI(带有按钮来发出声音),那么您可以测试附加调用是否会重复该问题,从而帮助验证是声音文件还是情况。

是,在按下GUI按钮后会调用play()。您必须原谅我,但我不知道什么是守护进程线程,因为我还没有真正探索线程。你的意思是我需要在一个单独的线程中播放音频吗?AudioClip将启动一个线程,因此没有必要这样做。它启动一个守护进程线程。下面是守护进程线程的解释。请尝试将AudioClip作为实例变量并仅播放,不要从按钮加载。这可能会有帮助。如果没有,我的下一步将是看看是否有办法发布声音文件,以便我们可以查看它。谢谢您的回复。AudioClip是一个实例变量。我正试图使它动态加载不同的mp3文件(这是可以做到的)。正如我提到的,大多数mp3文件都能正确播放。只是其中的一部分似乎只播放几微秒的声音?我不确定如何共享一个有问题的mp3文件。@您描述的TLT Dave表明问题出在mp3文件上。如果JavaFX使用的实现比其他应用程序(如媒体播放器)更严格,我不会感到惊讶。试着使用一些工具来检查问题的MP3文件是否有错误。就个人而言,我从来没有太多的理由来诊断MP3文件,所以我没有任何特别的建议。给出了一些选择。我也同意,不应该每次需要播放时都创建
音频剪辑(最好是缓存)。