![]() |
ID3-Tag oder besser Dateiname anzeigen lassen ?
Hallo
Ich lass ja in meinem Player nach dem die Festplatte nach mp3's durchsucht wurde diese mit vollem Pfad in einer Listbox anzeigen. Ich finde aber das dies keine optimale Lösung ist weil der gesamte Pfad recht lang sein kann. Ich hab nun versucht es so zu ändern.. erst hab ich die ganzen mp3's die auf der Festplatte gefunden wurden in einer Stringlist speichern lassen. Danach hab ich die Stringlist nach dem ID3-Tag 'Artist' + 'Title' der einzelnen mp3's durchsucht und diesen dann in der anzuzeigenden ListBox gespeichert. Das ganze funktioniert soweit auch ganz gut. Nur nun stellt sich die Frage was mach ich wenn kein ID3-Tag Eintrag vorhanden is. Ist es nicht vielleicht doch besser nur den Dateinamen ohne Pfad und ohne Dateierweiterung anzeigen zu lassen ? Wenn ja stellt sich gleich die nächste Frage wie löse ich dieses Problem und mach zb: aus "E:\mp3\meinsong.mp3" dann mur "meinsong" |
Re: ID3-Tag oder besser Dateiname anzeigen lassen ?
das ganze geht mit ExtractFileName und ChangeFileExt
|
Re: ID3-Tag oder besser Dateiname anzeigen lassen ?
Zeig halt immer was sinnvolles an.
Wenn ID3-Tag vorhanden, dann "Artist - Titel". Ist Artist nicht vorhanden, dann nur "Titel", ohne " - " davor. Ist der Titel auch nicht vorhanden, dann "Dateiname". Ist Dateiname auch nur "Track01.mp3", dann hat der Anwender Pech gehabt. |
Re: ID3-Tag oder besser Dateiname anzeigen lassen ?
Delphi-Quellcode:
und wie bekomm ich mit ChangeFileExt noch die Dateiendung weg ?
//Dateinamen hab ich schon mit
lbMP3s.Items.Add(ExtractFileName(slTmp.Strings[i])); |
Re: ID3-Tag oder besser Dateiname anzeigen lassen ?
in dem du als neue Endung einen Leerstring angibst (also nichts)
|
Re: ID3-Tag oder besser Dateiname anzeigen lassen ?
Delphi-Quellcode:
sDateiname := ExtractFileName(slTmp.Strings[i]);
lbMP3s.Items.Add(ChangeFileExt(sDateiname,'')); DANKE !! für eure Hilfe |
Re: ID3-Tag oder besser Dateiname anzeigen lassen ?
HALT STOP :mrgreen:
Eine Frage hab ich noch :-D Was ist wenn im ID3-Tag nur ein Strich oder ein Komma oder sonstige Zeichen sind ? hätte da jemamd eine Lösung denn wäre ja blöd wenn im Playerfenster nur ein Komma oder sonstiges zu sehen wäre :mrgreen: |
Re: ID3-Tag oder besser Dateiname anzeigen lassen ?
Ich hätte doch eine Idee ich überprüfe einfach wieviel Zeichen im ID3-Tag bei Artist und Titel drin stehn wenn es auch nur in einem zu wenig sind dann Pech gehabt wird halt nur der Dateiname angezeigt :mrgreen:
Delphi-Quellcode:
oder hat jemand eine bessere Idee ?
if (Length(sArtist) > 5) or (Length(sTitle) > 5) then // was meint ihr sind 5 Zeichen zu wenig ?
begin lbMP3s.Items.Add(sArtist +' - '+ sTitle); end |
Re: ID3-Tag oder besser Dateiname anzeigen lassen ?
Ein paar Interpreten mit 4 oder weniger Buchstaben:
2Pac, A, Abba, ACDC, Aha, B3, Bap, JBO, REM, Seal, Sido, Tatu, U2, UB40. Ich denke, das sind ein paar zuviel, die da nicht richtig angezeigt werden, bei den Titeln möchte ich gar nicht erst anfangen. Also: Wenn in trim(ID3Tag.Artist) was drin steht, dann nimm den. Wenn da Müll drin steht, dann soll der User seine Sammlung aufräumen.... :roll: Und auch wenn die OR-Verknüpfung dafür sorgt, dass nur sehr wenige Titel falsch angezeigt werden, weil fast immer der Titel oder der Interpret länger als 5 Zeichen ist, so dürfte es den User doch verwirren, wenn er ein Album von Abba in die Playlist packt, und überall kommt der ID3Tag, nur bei "SOS" steht der Dateiname... |
Re: ID3-Tag oder besser Dateiname anzeigen lassen ?
OK du hast mich überzeugt ich werde einfach das nehmen was in ID3Tag steht und fertig. Falls nichts drin steht dann halt der Dateiname. Ich versuche es schon die ganze Zeit hinzubekommen klappt nur nicht so recht :gruebel:
Delphi-Quellcode:
var
i: Integer; sDateiname,sArtist,sTitle:String; for I := 0 to slMP3.Count - 1 do begin //ID3v1Tag auslesen if ID3v1Tag.ReadFromFile(slMP3.Strings[i]) then begin with ID3v1Tag do begin slTmp1.Add(Artist); slTmp1.Add(Album); slTmp1.Add(Year); slTmp1.Add(Title); end; end;//if //ID3v2Tag auslesen if ID3v2Tag.ReadFromFile(slMP3.Strings[i]) then begin with ID3v2Tag do begin slTmp2.Add(Artist); slTmp2.Add(Album); slTmp2.Add(Year); slTmp2.Add(Title); end; end;//if //ab hier soll geprüft werden ob in slTmp1 oder slTmp2 was drin steht //und wenn in einer StringList (aber nur eine) was enthalten ist soll //dieser Eintrag in lbMP3Ausgabe eingetragen werden //mein versuch erst slTmp überprüfen ob in String 0 und String 3 was enthalten ist if (slTmp1.Strings[0] <> '') and (slTmp1.Strings[3] <> '') then begin sArtist := slTmp1.Strings[0]; sTitle := slTmp1.Strings[3]; lbMP3Ausgabe.Items.Add(sArtist +' - '+ sTitle); end else begin //wenn nichts vorhanden ist weiter und slTmp2 überprüfen if (slTmp2.Strings[0] <> '') and (slTmp2.Strings[3] <> '') then begin sArtist := slTmp2.Strings[0]; sTitle := slTmp2.Strings[3]; lbMP3Ausgabe.Items.Add(sArtist +' - '+ sTitle); end else begin // wenn in slTmmp2 auch nichts enthalten ist dann nur Dateinamen eintragen sDateiname := ExtractFileName(slMP3.Strings[i]); lbMP3Ausgabe.Items.Add(ChangeFileExt(sDateiname,'')); end;//if slTmp2 end;//if slTmp1 end;//for Ich weiß sieht recht komisch aus :mrgreen: funktioniert aber soweit zumindest werden die Mp3s mit ID3Tag Inhalt und auch die ohne Inhalt in lbMP3Ausgabe eingetragen. Nur wenn zb: eine MP3 ein ID3Tag hatte dürfte ja nicht mehr von dieser MP3 der Dateiname übernommen werden und genau das wird noch gemacht. Keine Ahnung woran es liegt vielleicht könnt ihr ja helfen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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