【问题标题】:Finding Duration of an MP3 file in Java在 Java 中查找 MP3 文件的持续时间
【发布时间】:2011-08-11 04:29:56
【问题描述】:

好的,所以我尝试使用 ID3 标签来获取持续时间,并且我还尝试使用 JMF media player.getDuration()。

player.getDuration().getSeconds()

文件是 VBR。 JMF 中是否有任何轻量级库或其他东西可以用来解决这个问题。

谢谢。

【问题讨论】:

  • 你不能从流中获取 AudioFormat 对象,然后结合采样率和文件大小来计算持续时间吗?

标签: java mp3


【解决方案1】:

我使用这个lib 和这个代码:

File f = new File("path/mp3");
    MediaLocator ml = null;
    Player p = null;
    try {
        ml = new MediaLocator(f.toURL());

        p = Manager.createPlayer(ml);
        p.start();
        while (true) {
            Thread.sleep(1000);
            System.out.println("Media Time :: "+p.getMediaTime().getSeconds());
            System.out.println("Duration :: "+p.getDuration().getSeconds());
            if(p.getMediaTime().getSeconds() == p.getDuration().getSeconds())
                break;
        }
        p.stop();
        p.deallocate();
        p.close();
    } catch (NoPlayerException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

祝你好运。

【讨论】:

  • 当我点击库的链接时,它给出了库的描述,但是当我点击下载时,所描述的库实际上在下载页面上不可用。这个库有可用的 maven 工件吗?
【解决方案2】:

我使用 JAudioTagger 来实现这一点。下面的代码将为您提供 MP3 曲目的持续时间。

int duration = 0;

try {
  AudioFile audioFile = AudioFileIO.read(new File("file.mp3"));
  duration = audioFile.getAudioHeader().getTrackLength();

} catch (Exception e) {
  e.printStackTrace();

}

您也可以将 audioFile.getAudioHeader() 转换为 MP3AudioHeader 并使用方法 getPreciseTrackLength() 来获得更精确的持续时间。但是,这(我相信)仅适用于 MP3 文件,不适用于其他格式(例如 WAV 文件)。

【讨论】:

  • P.S! AudioHeader(由 audioFile.getAudioHeader() 返回)还将为您提供 MP3 文件的比特率以及许多其他属性。
  • 谢谢老兄。 - 如果你们使用 gradle 就使用这个实现组:'org',名称:'jaudiotagger',版本:'2.0.3'
猜你喜欢
  • 2013-05-12
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多