我一直在编写一个程序,可以确定有关mp3文件的任何数据。 根据这个网页上的信息(http://www.multiweb.cz/twoinches/mp3inside.htm),我的程序将整个mp3文件读入一个字节数组,然后在开始时检查Tag v2,在文件的结尾。
我的问题在于您可以从标头中获取的数据。 据我所知,我需要搜索1111_1111的字节,下一个是111x_xxxx。这个标准有很多匹配,不是标题,只是随机巧合,所以我制作了一个MP3Header类,它包含上面网页上提到的所有字段(ID,图层,比特率等等)和覆盖如果ID,图层和频率匹配,则返回true的equals方法(我使用我找到的第一个标头作为基础,并将其后的每个标头与该标头进行比较)。
这种方法似乎对CBR mp3文件非常有效,但是有些VBR让我很难受。我找到的第一个标题是不正确的,从那时起,整个比较被搞砸了(我没有检查比特率是否相等,所以这不是原因)。我能想到的唯一有效解释是,开头的Tag可能包含扩展ASCII表中的字符,并且由于Java没有unsigned int,因此转换时1111_1111(255)字节可能被解释为-1到int。 我的问题是,我怎样才能确保我找到的字节确实是一个合适的标题?或者我应该存储符合条件的所有内容,并检查哪一个最常用,并继续使用?
谢谢, 的István
P.S:我知道如果我使用JMF,可能只用几行代码就可以解决这个问题,但是我很喜欢写这样的挑战。