【问题标题】:Java code that determines the headers in an mp3 file确定 mp3 文件中的标头的 Java 代码
【发布时间】:2011-07-03 22:48:02
【问题描述】:

我一直在编写一个程序,可以确定有关 mp3 文件的所有数据。 根据此网页上的信息 (http://www.multiweb.cz/twoinches/mp3inside.htm),我的程序将整个 mp3 文件读入一个字节数组,然后在开始时检查 Tag v2,在开始时检查 Tag v1文件的结尾。

我的问题是您可以从标题中获取的数据。 据我了解,我需要搜索 1111_1111 的字节,下一个是 111x_xxxx。这个标准有相当多的匹配不是标题,只是随机巧合,所以我制作了一个 MP3Header 类,它具有上述网页上提到的所有字段(ID、图层、比特率等)并被覆盖如果 ID、层和频率匹配,则 equals 方法返回 true(我使用找到的第一个标头作为基础,并将其后的每个标头与该标头进行比较)。

这种方法似乎对 CBR mp3 文件非常有效,但是一些 VBR 文件让我很难过。我发现的第一个标头不正确,从那时起,整个比较就搞砸了(我没有检查比特率是否相等,所以这不是原因)。我能想到的唯一有效解释是,开头的标记可能包含扩展 ASCII 表中的字符,并且由于 Java 没有无符号整数,因此 1111_1111 (255) 字节在转换时可能被解释为 -1诠释。 我的问题是,如何确保我找到的字节确实是正确的标头?或者我应该存储符合条件的所有内容,并检查哪个是最常见的,然后继续使用?

谢谢, 伊斯特万

P.S:我知道如果我使用 JMF,这可能只需要几行代码就可以解决,但是我很享受这样编写它的挑战。

【问题讨论】:

    标签: java mp3


    【解决方案1】:

    我了解已经有一些库可以执行此任务(请参阅https://id3.org/Implementations)。也许您可以下载源代码并看看他们是如何做到的?

    【讨论】:

    • 我要回答我自己的问题:原来我没有引起足够的注意,文件开头的 Tag v2 也有一个标题,它与音乐数据具有相同的标识符标头,这让我的算法感到困惑。解决方案是在搜索时简单地忽略文件的前几个字节。(或者更确切地说,先解析标签,然后在完成的地方开始标题搜索)。
    • +1 我无法让 javamusictag.sourceforge.net 正确解析 MP3 标签。但是 entagged.sourceforge.net(从该页面链接)会按我的预期生成信息。作为奖励,Jar 略小,它还提供了轨道长度和其他多汁的细节,如 VBR、比特率、通道数和采样率。 :-)
    猜你喜欢
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多