Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem beim id3-Tag auslesen (https://www.delphipraxis.net/21270-problem-beim-id3-tag-auslesen.html)

Schneider-Huetter 30. Apr 2004 08:03


Problem beim id3-Tag auslesen
 
Hallo zusammen,
ich habe ein für mich völlig unverständliches Problem beim Auslesen des id3-Tags:
Die Tags werden mittels TFileStream in ein "Array of Char" eingelesen und dann in 2 getrennte Strings (für Interpret und Titel) kopiert, das funktioniert so weit auch ganz gut solange ich nur entweder den Titel oder den Interpret z.B. in ein Edit-Feld schreibe. Wenn ich jedoch die beiden Strings zusammenfügen möchte (z.B.: Interpret + ' - ' + Titel) wird nur der Interpret angezeigt(bzw der String, der vorne steht). Wenn ich zuert den Titel in ein Edit-Feld schreibe, dann den Interpret in ein anderes Edit-Feld schreibe und sie dann zusammenfüge funktionirt es
:wiejetzt: ????

Im Voraus schon mal vielen Dank

Muetze1 30. Apr 2004 08:16

Re: Problem beim id3-Tag auslesen
 
Moin!

Tja, das Problem klingt gut und interessant, aber ein wenig Code wäre schonmal nicht schlecht, weil so kann ich nur folgendes sagen: Tjoa, schick, scheint irgendwo der Wurm drin zu sein...

MfG
Muetze1

fiasko 30. Apr 2004 08:23

Re: Problem beim id3-Tag auslesen
 
Hängt den Strings vielleicht ein #0 drann, welches Delphi beim konkatinieren nicht mitbekommt?!

Ghostwalker 30. Apr 2004 08:41

Re: Problem beim id3-Tag auslesen
 
hmmm...

ok..hier mal meine Routine zum Lesen von ID3 (nur V1 !!)

Code:
procedure TID3V1.Readtag;
var
  st : TFilestream;
  buf: array[0..127] of char;
  tmppos,curpos : integer;


  function ArrayToStr(count:integer):string;
  var
    i,ende : integer;
  begin
    result := '';
    ende := curpos+(count-1);
    for I := curpos to ende do
      result := result+buf[i];
    curpos := ende+1;
  end;

begin
  readed := false;
  changed := false;
  try
    st := TFilestream.create(ffilename,fmOpenRead);
    st.Seek(-128,soFromEnd);
    st.ReadBuffer(buf[0],128);
    st.free;
    if (BUF[0]='T') and (BUF[1]='A') and (BUF[2]='G') then
    begin
      readed := true;
      curpos := 3;
      fTitle := ArrayToStr(30);
      fartist := arraytostr(30);
      falbum := arraytostr(30);
      fyear := arraytostr(4);
      tmppos := curpos+28;
      if (ord(buf[tmppos]) =$00) and (ord(buf[tmppos+1]) <> $00) then
      begin
        fversion := 1;
        fcomment := arraytostr(28);
        falbumtrack := ord(buf[curpos+1]);
        inc(curpos,2);
      end
      else
      begin
        fversion := 0;
        fcomment := trim(arraytostr(30));
      end;
      fgenre := ord(buf[127]);
    end;
  except
    on e:exception do
      raise e;
  end;
end;

Hoffe es hilft weiter:)

Muetze1 30. Apr 2004 09:19

Re: Problem beim id3-Tag auslesen
 
Moin!

Ok, die Strings die du dir zusammenholst aus dem Record sind alle am Ende mit einer #0 aufgefüllt und diese wird die Probleme machen. Daher musst du vorher die Strings mal kürzen, bzw. die #0 hinten entfernen.

MfG
Muetze1

Robert Marquardt 30. Apr 2004 09:46

Re: Problem beim id3-Tag auslesen
 
Besorg dir doch die JediVCL. Da sind ID3 Komponenten mit dabei.

Muetze1 30. Apr 2004 10:33

Re: Problem beim id3-Tag auslesen
 
Moin!

Zitat:

Zitat von Robert Marquardt
Besorg dir doch die JediVCL. Da sind ID3 Komponenten mit dabei.

Oder meine ID3 Tag Lib, die ist aber noch nicht auf der neuen Page online. Wenn interesse besteht lade ich die gleich heute abend mal hoch. Die Lib kann dann ID3v1.x Tags sowie ID3v2.2.x.x und höher. Zusätzlich auch support für unbekannte Tags und Bilder Tags.

MfG
Muetze1

Robert Marquardt 30. Apr 2004 14:58

Re: Problem beim id3-Tag auslesen
 
Muetze1, kannst du mal deine Komponente mit der Jedi-Komponente vergleichen?
Eine von beiden ist bestimmt besser und der andere lernt was.

Muetze1 30. Apr 2004 17:06

Re: Problem beim id3-Tag auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin!

Ok, habe mir mal die JEDI VCL runtergeladen und den Source angeschaut. Meine Lib entstand aus der Not und ist daher einfacher, aber einen kleinen Vergleich wage ich mal.

ID3 Tag Lib
- keine Komprimierung / Verschlüsselte Tags
- keine ID3v2.2.x.x, erst ab v2.3.x.x und höher (4 Buchstabige Tag IDs)
- kein Unicode UTF-8/UTF-16 Support
+ alle Tags, auch unbekannte, können über Streams geschrieben und gelesen werden
+ kleinerer Code
+ eine Lib für beide Tag Typen

JEDI ID3
- keine Komprimierung / verschlüsselte Tags
- unbekannte Tags können nicht gelesen / geschrieben werden, bleiben nil
- 2 Klassen / Units für die unterschiedlichen Tag Typen
+ auch ID3v2.2.x.x Tags
+ Unicode anscheinend supported

Dann ist noch die Frage ob die JEDI ID3 Lib unbekannte Tags automatisch entfernt, wenn diese auch nicht gelesen werden konnten. Das konnte ich beim überschauen des Codes nicht herauslesen.

Ich wollte die JEDI VCL nicht installieren und ich habe auch nicht mit der JEDI ID3 Klasse gearbeitet. Das müsste man vielleicht nochmal im Detail klären. Auch kann es noch weitere Unterschiede geben, aber ich habe den Code nur überflogen.

It's your choice...

MfG
Muetze1

Schneider-Huetter 3. Mai 2004 08:03

Re: Problem beim id3-Tag auslesen
 
Vielen Dank für eure Antworten, werde eure Vorschläge mal testen, das mit der #0 hört sich ziemlich vernünftig an. Die Komponenten will ich eigentlich nur als Notlösung einsetzen, man will ja auch was lernen beim Programmieren ;)

MfG Schneider-Huetter


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz