3

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

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

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

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

1)文件的元信息(头)

2)带有音频的实际mpeg流(如果我所做的只是改变标签信息,这个哈希应该保持不变)

我还缺少什么吗?

谢谢!

4

3 回答 3

1

如果要确定标头信息,您可以:

  • a) 需要使用可以为您解析的 mp3 库,或者
  • b) 转到mp3 规范并根据需要对其进行解析。
于 2010-02-01T22:40:44.083 回答
1

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

如果您读取前 3 个字节,并且它们等于“ID3”,则跳到第 7 个字节,然后读取标头大小。不过要小心,因为大小存储为“同步安全整数”。

于 2010-02-02T04:50:03.823 回答
0

我最终使用了 TagLibSharp。developer.novell.com/wiki/index.php/TagLib_Sharp

于 2012-04-15T00:18:11.897 回答