Frage

Ich schreibe ein Programm diff, und kopieren Sie Dateien oder Segmenten, basierend auf Änderungen an beiden Enden (Rsync-esque ... aber mehr wie Unison). Die Hauptidee ist meine Musik-Ordner zu halten (alle mp3s) auf dem neuesten Stand über mehrere Standorte.

Ich mag segmentiert Updates senden, wenn nur kleine Teile der Datei geändert haben, im Gegensatz die gesamte Datei zu kopieren. Dafür brauche ich einen Weg diff Segmente der Datei.

Ich habe versucht, zunächst Erzeugungs Hashes für die Blöcke jeder Datei (Every n Bytes ich das Segment Hash würde). Ich habe bemerkt, dass, wenn ich ein Attribut geändert (ID3v2-Tag auf einem MP3) alle die Hash-Blöcke ändern würde. Dies macht Sinn, da ich die Header erraten würde wächst, wie es neue Informationen erworben.

Dies führt mich zu meiner eigentlichen Frage. Ich würde gerne wissen, wie die Länge eines MP3-Header, um zu bestimmen, so dass ich 2 vergleichbar Hashes erzeugen könnte.

1) Die Meta Informationen der Datei (Header)

2) Der MPEG-Stream mit Ton (Dieser Hash sollte unverändert bleiben, wenn alles, was ich tue, ist alte tag info)

Am I fehlt noch etwas?

Danke!

Ty

War es hilfreich?

Lösung 3

gewickelt ich mit TagLibSharp auf. developer.novell.com/wiki/index.php/TagLib_Sharp

Andere Tipps

Wenn Sie die Header-Informationen, um zu bestimmen, werden Sie entweder:

  • a) Notwendigkeit, eine mp3-Bibliothek zu verwenden, die die Analyse für Sie tun können, oder
  • b) finden Sie auf der mp3 Spezifikation und es analysieren, je nach Bedarf.

Wenn Sie nur die Länge ist ID3v2-Tags überprüfen möchten, dann können Sie an Informationen über ihre Struktur herauszufinden, http://www.id3.org/id3v2.4.0-structure .

Wenn Sie die ersten 3 Bytes zu lesen, und sie sind gleich „ID3“, überspringen dann auf das 7. Byte, dann die Header-Größe lesen. Seien Sie vorsichtig, da die Größe als „synchsafe integer“ gespeichert ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top