Autor Beitrag
Beutel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

WIN XP

BeitragVerfasst: Di 27.12.05 12:38 
Ich vergleiche 2 Mp3 ob sie gleich groß sind nun gibt es nur ein Problem wenn im Media Player der IDE-tag geändert wird sind die beiden Datein ja auch nicht mehr gleich groß da will ich mir jetzt von ungefähr 25% bis 75% alles vergleichen! und die beiden Datein sind schon gleich Groß das habe ich vorher schon abgefragt


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
function FilesAreEqual(const File1, File2: TFileName): Boolean;
const
  BlockSize = 65536;
var
  fs1, fs2: TFileStream;
  L1, L2: Integer;
  B1, B2: array[1..BlockSize] of Byte;
begin
  Result := False;
  fs1 := TFileStream.Create(File1, fmOpenRead or fmShareDenyWrite);
  try
    fs2 := TFileStream.Create(File2, fmOpenRead or fmShareDenyWrite);
    try
      Result := fs1.Size = fs2.Size;
      while Result and (fs1.Position < fs1.Size) do
      begin
        L1 := fs1.Read(B1[1], BlockSize);
        L2 := fs2.Read(B2[1], BlockSize);

        Result := L1 = L2;
        if Result then
          Result := CompareMem(@B1[1], @B2[1], L1);
      end;
    finally
      fs2.Free;
    end;
  finally
    fs1.Free;
  end;
end;


hoffe auf schnelle Antwort

THX und M.f.G.
Beutel


Moderiert von user profile iconGausi: Topic aus VCL (Visual Component Library) verschoben am Di 27.12.2005 um 12:57
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 27.12.05 13:15 
Wenn du schon die Sache mit dem ID3-Tag bei der Überprüfung auf Gleichheit rausfiltern willst, dann solltest du über den ID3Tag etwas mehr wissen.

Erstens. Wenn man den ID3Tag ändert, bleibt die Dateigröße in der Regel gleich. Der ID3v1Tag (am Ende der Datei) ist sowieso immer genau 128 Zeichen lang, da kann sich nichts ändern.
Zweitens. Der ID3v2-Tag steht am Anfang einer Datei und hat eine variable Größe. Die meisten Tag-Programme bauen aber beim Schreiben dieses Tags einen Buffer ein, der bei späteren Änderungen benutzt werden kann, um weitere Informationen aufzunehmen, ohne die gesamte Datei neu schreiben zu müssen. Trotzdem ist die Größe dieses Tags fast immer anders. Einige Tagger wählen nämlich die Buffergröße so, dass die Clustergröße des Datenträgers mit berücksichtigt wird - es wird soviel Platz reserviert, wie in den angebrochenen Cluster noch reinpasst.

Man muss also diese Tags auslesen, um den Audiodatenteil des Mp3Files zu erhalten. Dass es noch weitere Tags im mp3file geben kann, ist wieder eine andere Sache. Einfach die mittleren 50% auf Gleichheit zu überprüfen, macht also fast keinen Sinn.

Es gab hier mal ein Opensource-(oder wars nur Freeware?)Projekt, das mp3s aufgrund ihrer ersten paar Takte erkannt hat. Damit hat man dann auch die möglicherweise unterschiedlichen Bitraten mit rausgefiltert. Guck mal, ob du das über die Suche findest.

_________________
We are, we were and will not be.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 28

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 27.12.05 13:15 
vergleiche doch alles außer den tag, bei id3v1 ist der am ende und ich glaube 128byte groß

edit: achso, du willst die tags vergleichen ?

Ansonsten beschäftige dich mit der Bass.dll damit kannst du Sounds vergleichen ;)

@gausei: der id3v2 tag steht nicht unbedingt im dateianfang :!: