Hey Folks,
ich möchte hier mal zu einer Kriesensitzung bzw. einem Brainstorming zum Thema freeDB und deren DiscID aufrufen!
freeDB ist eine feine Sache, keine Frage! Das "auslesen" der DiscID von AudioCDs funktioniert (selbstprogrammiert und/oder mit entsprechenden Komponenten) wunderbar.
Das ist auch nicht mein Problem.
Wie im Topic schon geschrieben, möchte ich die DiscID von komprimierten Audiodateien (mp3, ogg, flac, usw.), welche auf der Festplatte liegen, erstellen.
(Selbstverfreilich liegen alle Audiodateien der CDs [in komprimierter Form] in einem eigenen Ordner vor)
Wie man die DiscID erstellt steht hier:
home.arcor.de/hirnst...view.html#fn_aktuell
Und so habe ich es umgesetzt: (bitte nicht den Programmierstill anmeckern! Das ist schnell gecodet, ohne auf die "Etikette" zu achten)
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: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60:
| procedure TF_Main.B_CDIDClick(Sender: TObject); function Quersumme(i : integer): integer; var p: pchar; begin result := 0; p := Pchar(IntToStr(i)); while (p^ <> #0) do begin result := result + strtoint(p^); Inc(p); end; end; var AudioT: TADBAudioTag; TPlayer: TADBPlayer;
counter: integer;
GetTime: integer;
Tracks: integer; Time: integer; SQS: integer; _Time: real; CDID: string; begin AudioT:= TADBAudioTag.Create(Self); TPlayer:= TADBPlayer.Create(Self, 1);
Time:=0; _Time:= 2;
SQS:=0; for counter:=0 to Listview1.Items.Count-1 do begin TPlayer.ActivePlayer.Open(Listview1.Items.Item[counter].SubItems[2]);
GetTime:= TPlayer.ActivePlayer.Length_Seconds;
_Time:= _Time + GetTime;
Time:= Time + round(GetTime); SQS:= SQS +Quersumme(ceil(_Time)); end;
Tracks:= Listview1.Items.Count; SQS:= (SQS mod 255);
CDID:= IntToHex(SQS, 2)+IntToHex(Time, 4)+IntToHex(Tracks, 2); E_CDID.Text:= CDID;
AudioT.Free; TPlayer.Free; end; |
(zur Information: TADBAudioTag & TADBPlayer sind Klassen welche u.A. im Stande sind die Spiellänge der Audiodateien zurückzugeben [was in diesem Falle genutz wird]; TADBAudioTag gibt einen Fließkommawert [sehr genau, aber anscheinend nicht genau genug; oder zu genau?!?], TADBPlayer einen Integer-Wert [mit Round() gerundet] zurück. In der TListview werden alle im Verzeichnis vorhandenen Audiodateien [inklusive des Dateinamens] angezeigt)
Mein Problem ist nur, dass die DiscID nicht stimmt. Grund dafür ist die Spiellänge der Audiodateien, welche vor allem bei der Berechnung des Offset-Werts SEHR entscheidend ist.
So, jetzt seit IHR an der Reihe!
Moderiert von
matze: Code- durch Delphi-Tags ersetzt