2010-02-01 46 views
3

我正在編寫一個程序來區分,並根據兩端的變化(Rsync-esque ...但更像Unison)來更改整個文件或段。主要想法是讓我的音樂文件夾(所有mp3)保持在多個位置。如何確定mp3文件頭的長度?

如果只有文件的一小部分發生了變化,我想發送分段更新,而不是複製整個文件。爲此,我需要一種方法來區分文件的各個部分。

我最初試圖爲每個文件的塊生成散列(每n個字節我會散列該段)。我注意到當我改變一個屬性(在mp3上的id3v2標籤)時,所有散列塊都會改變。這是有道理的,因爲我猜想標題正在增長,因爲它獲得了新的信息。

這導致我到我的實際問題。我想知道如何確定mp3頭的長度,所以我可以創建2個可比較的哈希值。

1)文件的元信息(頭)

2)與音頻實際MPEG流(該散列應保持不變,如果我要做的就是ALTER標籤信息)

我錯過了什麼其他?

謝謝!

+1

您是否考慮過使用二進制diff實用程序/庫? http://www.daemonology.net/bsdiff/ – Amy 2010-02-01 22:36:23

+0

我使用TagLibSharp結束。 http://developer.novell.com/wiki/index.php/TagLib_Sharp – 2010-02-22 22:29:10

回答

0

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

1

如果你想確定頭信息,你可以:

  • 一)需要使用的MP3庫,可以爲您做解析,或
  • b )轉到mp3 specification並根據需要解析出來。
1

如果你想檢查的長度是id3v2標籤,那麼你可以在http://www.id3.org/id3v2.4.0-structure找到它的結構信息。

如果讀取前3個字節,且它們等於「ID3」,則跳至第7個字節,然後讀取標頭大小。請小心,因爲尺寸被存儲爲「同步安全整數」。