用 Java 读出 Mp3 歌曲的时间/长度/持续时间
Posted
技术标签:
【中文标题】用 Java 读出 Mp3 歌曲的时间/长度/持续时间【英文标题】:Read out Time/Length/Duration of an Mp3 song in Java 【发布时间】:2010-06-29 13:19:15 【问题描述】:我想知道如何读出一首 mp3 歌曲的时长。如果我是对的,它不是 ID3 标签,所以我想我必须以某种方式计算它? 对于其余的 ID3 标签,我正在使用这个库: http://javamusictag.sourceforge.net/index.html
干杯
【问题讨论】:
哦,是的,如果这很重要的话,我正在使用 JLayer 播放 mp3 How do I get a mp3 file's total time in Java?的可能重复 尝试使用jave-1.0.1.jar
库:How do I get a mp3 file's total time in Java?
【参考方案1】:
我会将代码更改为...
File file = new File("filename.mp3");
AudioFileFormat baseFileFormat = new MpegAudioFileReader().getAudioFileFormat(file);
Map properties = baseFileFormat.properties();
Long duration = (Long) properties.get("duration");
使用MP3SPI 来使用new MpegAudioFileReader()
而不是Audiosystem
,因为我得到了一个带有mp3 文件的UnsupportedAudioFileException occured : file is not a supported file type
【讨论】:
此方法不适用于此曲目:dropbox.com/s/735fdkp9roskapw/39007.mp3?dl=0 - 曲目为 3:52,但此代码为 22:17。 目前 .properties() 返回的 hashmap 甚至没有一个名为“duration”的键,至少我找不到。 @php_coder_3809625 - 对。这是我刚刚尝试过的 MP3 的属性映射的键。没有“持续时间”,也没有任何可以合理计算的东西:mp3.copyright, date, mp3.framesize.bytes, mp3.vbr, mp3.framerate.fps, mp3.id3tag.track, title, mp3.channels, mp3.id3tag.genre, mp3.bitrate.nominal.bps, mp3.padding, mp3.version.mpeg, mp3.crc, mp3.original, mp3.frequency.hz, album, author, mp3.id3tag.v2, mp3.vbr.scale, mp3.version.encoding, mp3.version.layer, mp3.id3tag.v2.version, mp3.header.pos, comment
【参考方案2】:
您可以尝试使用基于 JLayer 的MP3SPI。然后,以下代码将允许您获取歌曲持续时间:
File file = new File("filename.mp3");
AudioFileFormat baseFileFormat = AudioSystem.getAudioFileFormat(file);
Map properties = baseFileFormat.properties();
Long duration = (Long) properties.get("duration");
您还可以使用 MP3SPI 获取 ID3 标签,这可能会为您节省额外的依赖。
【讨论】:
此方法不适用于此曲目:dropbox.com/s/735fdkp9roskapw/39007.mp3?dl=0 - 曲目为 3:52,但此代码为 22:17。【参考方案3】:使用一些 MP3 库。 MP3 格式并不容易,有一些简单的方法可以读出歌曲的长度。
【讨论】:
以上是关于用 Java 读出 Mp3 歌曲的时间/长度/持续时间的主要内容,如果未能解决你的问题,请参考以下文章