当前位置: 首页 > 知识库问答 >
问题:

JavaFX MediaPlayer高度不准确的搜索

何修能
2023-03-14

我使用的是320 kbps,大约1小时长的MP3文件。我正在做的项目是在MP3文件中寻找一组音乐,这样它就可以洗牌歌曲。我会给程序加上时间戳,它会搜索歌曲。如果JavaFX的seek方法不是非常不准确的话,它就可以工作了。

使用MediaPlayer后。搜索(持续时间)媒体播放器。getCurrentTime()返回我们期望的持续时间。然而,如果我们听mp3文件(或者不寻找,或者在外部mp3播放器中),我们会意识到报告的时间和实际情况是非常不同的,有时甚至是几秒钟。

例如MediaPlayer。搜索(持续时间.millis(2000))结果搜索到0秒。2秒的故障率是不可接受的。

使用WAV,它似乎可以工作。虽然它不支持MP3。

到目前为止,我认为有两个变通办法是可能的:

  • 编写没有错误的MP3解码器和播放器

还有人比你更了解吗?

如果有人需要源代码,其中没有更多内容:

public static void main(String[] args) {
        MediaPlayer player = null;
        JFXPanel fxPanel = new JFXPanel(); //To initialize JavaFX
        try {
            String url = new File("E:\\Music\\test.mp3").toURI().toURL().toExternalForm();
            player = new MediaPlayer(new Media(url));
            System.out.println("File loaded!");
        } catch (MalformedURLException e) {
            //e.printStackTrace();
            System.out.println("Error with filename!");
            System.exit(0);
        }

        player.play();

        System.out.println("Playing!");

        while (true)
        {
            Scanner reader = new Scanner(System.in);
            String string = reader.nextLine();
            if (string.equals("Exit")) System.exit(0);
            else if (string.equals("Seek"))
            {
                player.seek(Duration.millis(2000)); //this seeks to the beggining of the file
                player.pause();
                try {
                    Thread.sleep(100); //player.getCurrentTime() doesn't update immediately
                } catch (InterruptedException e) { }
                System.out.println("Time: " + player.getCurrentTime().toMillis() + " / " + player.getTotalDuration().toMillis());
                player.play();
            }
        }
    }

共有2个答案

陈毅
2023-03-14

将对seek方法的调用置于UI线程之外,否则UI将挂起。

new Thread(() ->player.seek(Duration.millis(2000))).start();
濮阳原
2023-03-14

我建议使用javazoom库。这是一个开源java库,已经编写了这些东西,没有错误(至少我没有发现任何错误)。

来源http://www.javazoom.net/index.shtml

 类似资料:
  • 我试图在caffe中训练一个二元分类模型,它告诉输入图像是狗还是背景。我有8223个阳性样本,33472个阴性样本。我的验证集包含1200个样本,每个类600个。事实上,我的优点是摘自MS-COCO数据集的片段。所有的图像都被调整大小,所以比格维度不超过92,较小的维度不小于44。在使用create_imagenet.sh(resize=false)创建LMDB文件之后,我开始使用求解器进行训练,

  • 我正在用Java开发一个简单的2D游戏。 我正在使用JFrame类,但是我不认为宽度和高度是我指定的,或者图形不正确。 下面是我的一些代码片段: JFrame显示黑色背景。然而,根据我给fillRect函数的参数,框架底部仍然应该有一条10px高的白色长条。事实并非如此。白色的银条只有在从框架高度降低30像素后才真正开始显示。 谢谢你的帮助。

  • 问题内容: 对于任何CSS专家来说,我都有一个棘手的问题。我的绿色div的高度灵活,可以容纳剩余的高度。现在我想在该div中放置一个div,该div应该是绿色div的一半。但似乎Chrome是否将其视为整个页面的一半而不是flex项目。 HTML CSS 问题答案: 您可以绝对定位。 关于您的声明: 但似乎Chrome是否将其视为整个页面的一半而不是flex项目。 您给了。然后给它的孩子()一个。

  • 我目前正在Mac OS计算机上的网页上录制音频,并通过云语音api运行它以生成一份抄本。然而,结果并不是那么准确,结果中有大量缺失的单词。 是否有任何步骤可以帮助我产生更准确的结果? 以下是我将音频转换为文本的步骤: 使用Soundflower将音频输出从声卡传输到麦克风输入 从网站播放音频 使用quickTime player录制保存为的音频。m4a文件 使用命令行工具ffmpeg转换。m4a文

  • 问题内容: 可以固定桌子上一行的高度(tr)吗? 当我缩小浏览器窗口时,会出现问题,一些行开始播放,而我无法确定行的高度。 我尝试了几种方法: 我正在使用IE7 样式 HTML代码。 问题答案: 当涉及固定高度和不换行文本时,表格很难(至少在IE中如此)。我认为您会发现唯一的解决方案是将文本放入元素中,如下所示: 这样,的高度就是包含单元格的高度,并且文本无法增长,无论窗口大小如何,单元格/行都必

  • 本文向大家介绍IOS改变UISearchBar中搜索框的高度,包括了IOS改变UISearchBar中搜索框的高度的使用技巧和注意事项,需要的朋友参考一下 一、系统的searchBar 1、UISearchBar的中子控件及其布局 UIView(直接子控件) frame 等于 searchBar的bounds,view的子控件及其布局 UISearchBarBackground(间接子控件) fr