关于4个字节存储时间数据的问题。
最近买了个三星的MP3,它的同步歌词必须用配套软件才能使用。
可配套软件在Win2003下不能用。
于是打算自己写一个往MP3文件里加歌词的小程序。
经分析发现三星MP3是从MP3文件的ID3v2标签中读的数据
它自定义了静态歌词标签“USLT”,并设计了自己的歌词存储格式。
其它的数据结构已经基本弄清楚了。就差一个时间不知道它是如何存储的。
用WinHex打开加了歌词的MP3文件,可以看出每句歌词是以一个08 00(ASCII中的Backspace)开头
然后跟上四个字节的时间标签,再加上歌词内容。如下:
08 00 TT TT TT TT XX XX XX XX XX (下一句歌词)08 00 TT TT TT TT XX XX XX XX....
TT的四个字节存储时间标签
现在就不知道TT是如何存储时间标签的。
我找了几个特殊的时间点存进文件,用WinHex查看其值对应如下:
AC F7 90 10
00:00.00
AC FF 90 10
00:00.08
AC 80 91 10
00:00.09
AC F7 91 10
00:01.28
AC FF 91 10
00:01.36
AC 80 92 10
00:01.37
AC FF 92 10
00:02.64
时间标签格式为 分:秒.(毫秒x10)
我分析发现前三个字节的最高位都是1,表示正值。
AA BB CC DD
用如下公式计算出来的整数 减去 AA=AC BB=F7 CC=90 时的值,正好等于 (分*60 + 秒)*100 + (毫秒*10)
(AA&0x7F)*0x20 + (CC&0x7F)*0x10 + (BB&0x7F)
但是DD是如何进位的没搞明白。
哪位大虾接触过这方面的东西,或是有这方面经验的帮忙分析一下~~万分感激~!