3

どちらか一方の変更に基づいて、ファイル全体またはセグメントを比較してコピーするプログラムを作成しています(Rsync風ですが、Unisonに似ています)。主なアイデアは、複数の場所で音楽フォルダー (すべての mp3) を最新の状態に保つことです。

ファイル全体をコピーするのではなく、ファイルのごく一部のみが変更された場合に、セグメント化された更新を送信したいと考えています。このためには、ファイルのセグメントを比較する方法が必要です。

最初に、すべてのファイルのブロックのハッシュを生成しようとしました (n バイトごとにセグメントをハッシュします)。1 つの属性 (mp3 の id3v2 タグ) を変更すると、ハッシュされたすべてのブロックが変更されることに気付きました。新しい情報を取得するにつれてヘッダーが成長していると推測されるため、これは理にかなっています。

これは私の実際の質問につながります。mp3 のヘッダーの長さを決定する方法を知りたいので、2 つの同等のハッシュを作成できます。

1) ファイルのメタ情報 (ヘッダー)

2) 音声付きの実際の mpeg ストリーム (タグ情報を変更するだけであれば、このハッシュは変更されないはずです)

他に何か不足していますか?

ありがとう!

タイ

4

3 に答える 3

1

の長さを確認したいのがid3v2タグだけの場合は、その構造に関する情報をhttp://www.id3.org/id3v2.4.0-structureで確認できます。

最初の3バイトを読み取り、それらが「ID3」に等しい場合は、7番目のバイトにスキップして、ヘッダーサイズを読み取ります。ただし、サイズは「同期セーフ整数」として格納されるため、注意が必要です。

于 2010-02-02T04:50:03.823 に答える
1

ヘッダー情報を確認する場合は、次のいずれかを実行します。

  • a)解析を実行できるmp3ライブラリを使用する必要がある、または
  • b)mp3仕様に移動し、必要に応じて解析します。
于 2010-02-01T22:40:44.083 に答える
0

私はTagLibSharpを使って巻き上げました。developer.novell.com/wiki/index.php/TagLib_Sharp

于 2012-04-15T00:18:11.897 に答える