【发布时间】: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,这可能只需要几行代码就可以解决,但是我很享受这样编写它的挑战。
【问题讨论】: