如何确定mp3文件头的长度?

时间:2010-02-01 22:24:08

标签: c# mp3 id3

我正在编写一个差异程序,并根据两端的变化复制整个文件或段(Rsync-esque ......但更像是Unison)。主要想法是让我的音乐文件夹(所有mp3)在多个位置保持最新。

如果文件的一小部分已经更改,我想发送分段更新,而不是复制整个文件。为此,我需要一种方法来区分文件的片段。

我最初尝试为每个文件的块生成哈希值(每n个字节我都会对段进行哈希)。我注意到当我改变一个属性(mp3上的id3v2标签)时,所有的散列块都会改变。这是有道理的,因为我猜测标题在获取新信息时正在增长。

这引出了我的实际问题。我想知道如何确定mp3标题的长度,所以我可以创建2个可比较的哈希值。

1)文件的元信息(标题)

2)带有音频的实际mpeg流(如果我所做的只是更改标记信息,则此哈希值应保持不变)

我错过了什么吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

如果您想确定标题信息,您可以:

  • a)需要使用可以为您解析的mp3库,或
  • b)转到mp3 specification并根据需要解析。

答案 1 :(得分:1)

如果你只想查看id3v2标签的长​​度,那么你可以在http://www.id3.org/id3v2.4.0-structure找到有关其结构的信息。

如果读取前3个字节,它们等于“ID3”,则跳到第7个字节,然后读取标题大小。但要小心,因为大小存储为“synchsafe整数”。

答案 2 :(得分:0)

我使用TagLibSharp结束了。 developer.novell.com/wiki/index.php/TagLib_Sharp