![]() |
ID3 Tag auslesen mit bass.dll
Hallo DP,
wie kann ich aus einer mp3 Datei ID3 Tags auslesen??? Es soll die bass.dll verwendet werden. Ich brauch nur den Titel und den Interpret. Danke schonmal. :thumb: |
AW: ID3 Tag auslesen mit bass.dll
Soweit ich weiß, liefert die bass.dll über BASS_ChannelGetTags nur Pointer auf die ID3v1 bzw. ID3v2-Tags zurück. Das sind dann einfach die Rohdaten, die du dann selber parsen musst. Wie die Daten strukturiert sind, findest du (wie in der bass-Hilfe angegeben) auf
![]() Alternativ kannst du fertige Units für ID3-Tags nehmen, z.B. meine ![]() |
AW: ID3 Tag auslesen mit bass.dll
Ich hab es so probiert:
Delphi-Quellcode:
Ergebnis: Negativ
Label2.Caption := BASS_ChannelGetTags(Musicfile, BASS_TAG_MUSIC_NAME);
Ich bekomm nichts als Ergebnis zurück. |
AW: ID3 Tag auslesen mit bass.dll
Weil der Code, den du da ausführst, für MOD-Dateien gedacht ist. Steht ja auch so in der Bass-Hilfe. In mp3-Dateien gibt es keine MOD-Tags, sondern BASS_TAG_ID3 und BASS_TAG_ID3V2-Tags, manchmal auch noch die BASS_TAG_LYRICS3-Tags. Und wenn du BASS_ChannelGetTags mit einem dieser Parameter aufrufst, bekommst du einen Pointer auf die Daten dieser Tag-Formate, die du dann selber parsen musst.
Im Fall von ID3v2 ist das nicht ganz trivial, da es mehrere Unterarten davon gibt. Daher der Hinweis auf fertige andere Lösungen. Die bass.dll ist prima zum abspielen, aber zum auslesen der Meta-Tags aus Dateien taugt sie relativ wenig. |
AW: ID3 Tag auslesen mit bass.dll
Also ich habs jetzt so:
Delphi-Quellcode:
Bekomm aber immer noch nix zurück.
type
// some standard definition PID3V1Rec = ^TID3V1Rec; TID3V1Rec = packed record Tag: array[0..2] of Char; Title: array[0..29] of Char; Artist: array[0..29] of Char; Album: array[0..29] of Char; Year: array[0..3] of Char; Comment: array[0..29] of Char; Genre: Byte; end; var ID3V1Tag: TID3V1Rec; [...] function BASS_GetID3TagsID3V1Rec(StreamHandle: Cardinal): TID3V1Rec; var TempID3V1: TID3V1Rec; p: PAnsiChar; begin ZeroMemory(@Result, SizeOf(TID3V1Rec)); if StreamHandle <> 0 then begin p := BASS_ChannelGetTags(StreamHandle, BASS_TAG_ID3); if p <> nil then begin TempID3V1 := PID3V1Rec(p)^; if SameText(TempID3V1.Tag, 'TAG') then Result := TempID3V1; end; end; end; [...] // in der Procedure: ID3V1Tag := BASS_GetID3TagsID3V1Rec(Musicfile); Label2.Caption := string(ID3V1Tag.Title) + #13 + string(ID3V1Tag.Artist); |
AW: ID3 Tag auslesen mit bass.dll
Das kann daran liegen, dass die mp3-Datei nur den ID3v2-Tag enthält, und nicht den komplett veralteten und stark eingeschränkten v1-Tag.
Oder du verwendest Delphi 2009 und hast beim Kopieren des Codes das Char/AnsiChar-Problem bei der Typ-Definition übersehen. |
AW: ID3 Tag auslesen mit bass.dll
Ich verwende Delphi 2009. Wo hab ich denn die übersehen???
|
AW: ID3 Tag auslesen mit bass.dll
Delphi-Quellcode:
Das müssen alles AnsiChars sein. ;-)
TID3V1Rec = packed record
Tag: array[0..2] of Char; Title: array[0..29] of Char; Artist: array[0..29] of Char; Album: array[0..29] of Char; Year: array[0..3] of Char; Comment: array[0..29] of Char; Genre: Byte; end; |
AW: ID3 Tag auslesen mit bass.dll
Ups, hab ich übersehen. :oops:
Jetzt funktioniert alles. Danke. :thumb: Delphi 2009 muss einen auch immer aufregend, mit den Änderungen von Char und AnsiChar. :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz