Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi ID3 Tag auslesen mit bass.dll (https://www.delphipraxis.net/154046-id3-tag-auslesen-mit-bass-dll.html)

Muellermilchtrinker 25. Aug 2010 18:35

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:

Gausi 25. Aug 2010 19:06

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 www.id3.org.

Alternativ kannst du fertige Units für ID3-Tags nehmen, z.B. meine Mp3FileUtils.

Muellermilchtrinker 26. Aug 2010 16:39

AW: ID3 Tag auslesen mit bass.dll
 
Ich hab es so probiert:
Delphi-Quellcode:
Label2.Caption := BASS_ChannelGetTags(Musicfile, BASS_TAG_MUSIC_NAME);
Ergebnis: Negativ
Ich bekomm nichts als Ergebnis zurück.

Gausi 26. Aug 2010 16:47

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.

Muellermilchtrinker 26. Aug 2010 16:56

AW: ID3 Tag auslesen mit bass.dll
 
Also ich habs jetzt so:

Delphi-Quellcode:
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);
Bekomm aber immer noch nix zurück.

Gausi 26. Aug 2010 17:04

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.

Muellermilchtrinker 26. Aug 2010 17:10

AW: ID3 Tag auslesen mit bass.dll
 
Ich verwende Delphi 2009. Wo hab ich denn die übersehen???

Gausi 26. Aug 2010 17:19

AW: ID3 Tag auslesen mit bass.dll
 
Delphi-Quellcode:
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;
Das müssen alles AnsiChars sein. ;-)

Muellermilchtrinker 26. Aug 2010 17:26

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