AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem wegen/mit ID3Tags

Ein Thema von Nils_13 · begonnen am 25. Jun 2005 · letzter Beitrag vom 26. Jun 2005
Antwort Antwort
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

Problem wegen/mit ID3Tags

  Alt 25. Jun 2005, 17:50
Hi,

ich arbeite an meiner Playlist von dAmp. Ich habe jetzt ID3 Tags noch eingebaut. Wenn ich normal auf hinzufügen klicke und daraufhin auf die Playlist klicke, kommt der Fehler
'Mp3File
...
does not exist!'. Warum ? Ich habe diese Meldung eingebaut falls es Fehler gibt. Hier der Code.(wenn ich alle MP3 Dateien eines Ordners einfüge und auf eine Datei drauf klicke, kommt kein Fehler)
Delphi-Quellcode:
procedure FillID3TagInformation(mp3File:string; Title,Artist,Album,Year,Genre,Comment:TEdit);
var //fMP3: file of Byte;
    ID3 : TID3Rec;
    fmp3: TFileStream;
begin
  fmp3:=TFileStream.Create(mp3File, fmOpenRead);
  try
    fmp3.position:=fmp3.size-128;
    fmp3.Read(ID3,SizeOf(ID3));
  finally
    fmp3.free;
  end;

 { or the non Stream approach - as in ChangeID3Tag procedure
try
  AssignFile(fMP3, mp3File);
  Reset(fMP3);
  try
    Seek(fMP3, FileSize(fMP3) - 128);
    BlockRead(fMP3, ID3, SizeOf(ID3));
  finally
  end;
finally
  CloseFile(fMP3);
end;
}

 if ID3.Tag <> 'TAGthen begin
   Title.Text:='Wrong or no ID3 tag information';
   Artist.Text:='Wrong or no ID3 tag information';
   Album.Text:='Wrong or no ID3 tag information';
   Year.Text:='Wrong or no ID3 tag information';
   Genre.Text:='Wrong or no ID3 tag information';
   Comment.Text:='Wrong or no ID3 tag information';
 end else begin
   Title.Text:=ID3.Title;
   Artist.Text:=ID3.Artist;
   Album.Text:=ID3.Album;
   Year.Text:=ID3.Year;
   if ID3.Genre in [0..MaxID3Genre] then
     Genre.Text:=ID3Genre[ID3.Genre]
   else
     Genre.Text:=IntToStr(ID3.Genre);
   Comment.Text:=ID3.Comment
 end;
end;

procedure ChangeID3Tag(NewID3: TID3Rec; mp3FileName: string);
var
  fMP3: file of Byte;
  OldID3 : TID3Rec;
begin
  try
    AssignFile(fMP3, mp3FileName);
    Reset(fMP3);
    try
      Seek(fMP3, FileSize(fMP3) - 128);
      BlockRead(fMP3, OldID3, SizeOf(OldID3));
      if OldID3.Tag = 'TAGthen
        { Replace old tag }
        Seek(fMP3, FileSize(fMP3) - 128)
      else
        { Append tag to file because it doesn't exist }
        Seek(fMP3, FileSize(fMP3));
      BlockWrite(fMP3, NewID3, SizeOf(NewID3));
    finally
    end;
  finally
    CloseFile(fMP3);
  end;
end;

procedure FillMP3FileList(Folder: string; sl: TStrings);
var Rec : TSearchRec;
begin
 sl.Clear;
 if SysUtils.FindFirst(Folder + '*.mp3', faAnyFile, Rec) = 0 then
  try
    repeat
      sl.Add(Rec.Name);
    until SysUtils.FindNext(Rec) <> 0;
  finally
    SysUtils.FindClose(Rec);
  end;
end;

procedure TForm1.Label13Click(Sender: TObject); //importieren der Dateien aus einem Ordner
var mp3Folder : string;
begin

 mp3Folder := BrowseDialog('Choose a folder with mp3 files', BIF_RETURNONLYFSDIRS);
 if mp3Folder = 'then Exit;

 txtFolder.Caption := mp3Folder;

 //fill the list box with mp3 files
 FillMP3FileList(mp3Folder, playlist.Items);
end;

function TForm1.BrowseDialog(const Title: string; const Flag: integer): string;
var
  lpItemID : PItemIDList;
  BrowseInfo : TBrowseInfo;
  DisplayName : array[0..MAX_PATH] of char;
  TempPath : array[0..MAX_PATH] of char;
begin
  Result:='';
  FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
  with BrowseInfo do begin
    hwndOwner := Application.Handle;
    pszDisplayName := @DisplayName;
    lpszTitle := PChar(Title);
    ulFlags := Flag;
  end;
  lpItemID := SHBrowseForFolder(BrowseInfo);
  if lpItemId <> nil then begin
    SHGetPathFromIDList(lpItemID, TempPath);
    Result := IncludeTrailingBackslash(TempPath);
    GlobalFreePtr(lpItemID);

end;

end;

procedure TForm1.playlistClick(Sender: TObject);
 var mp3File:string;
begin
if playlist.Items.Count=0 then exit;
  mp3File := Concat(txtFolder.Caption, playlist.Items.Strings[playlist.ItemIndex]);
  if not FileExists(mp3File) then begin
   ShowMessage('MP3 file '+#13#10+ mp3File +#13#10+'does not exist!');
   exit;
  end;
 FillID3TagInformation(mp3File, form2.edTitle, form2.edArtist, form2.edAlbum, form2.edYear, form2.edGenre, form2.edComment);
end;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Problem wegen/mit ID3Tags

  Alt 25. Jun 2005, 18:01
Könntest du bitte den Quelltext auf die relevante Stelle kürzen oder zu mindest die Zeile angeben, wo der Fehler kommt?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#3

Re: Problem wegen/mit ID3Tags

  Alt 25. Jun 2005, 18:03
Es ist kein Fehler beim Complieren, es wird die Meldung 'Mp3File...does not exist!'. Die Anwendung wird also weiterhin ausgeführt, allerdings kann ich das ausgewählte Lied nicht abspielen. Warum der Fehler auftritt weiß ich nich, deshalb frag ich ja.
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#4

Re: Problem wegen/mit ID3Tags

  Alt 25. Jun 2005, 18:06
Zitat von Nils_13:
Delphi-Quellcode:
  if not FileExists(mp3File) then begin
  ShowMessage('MP3 file '+#13#10+ mp3File +#13#10+'does not exist!');
  exit;
end;
Hi Nils
versuch mal das rausgepikte Codestück zu analysieren:
Die Fehlermeldung kommt nur, wenn FileExists(mp3File) false zurückgibt.
Wenn du in der OH nach Delphi-Referenz durchsuchenFileExists suchst, siehst du, dass diese nur false zurückgibt, wenn die Datei nicht existiert.
Somit liegt da kein Fehler im Code, sondern es handelt sich einfach nur um eine Datei, die nicht existiert
Schau mal, was genau ausgegeben wird. Es kommt was in die Richtung raus:
ShowMessage bringt:

MP3 file
C:\DerFalschePfad\EinerNichtExistierenden\Mp3-Datei.mp3
does not exist!

dann schaust du, ob es wirklich die Datei gibt, die da angegeben wird.
(Wenn es sich um einen Relativen Pfad handelt, musst du vom Verzeichnis deiner Echse ausgehn)
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Problem wegen/mit ID3Tags

  Alt 25. Jun 2005, 18:07
Das ist mir schon klar. fehler muss jan icht immer heißen, dass Delphi den Quellcode nicht kompiliert. Aber wenn dir der Begriff Fehler nicht zu sagt, denn sag du mir, wie du es nennst.

Aber eigentlcih sagt die Fehlermeldung doch wohl schon alles: Entweder ist der Pfad nicht korrekt oder der Dateiname. Jetzt ist es an dir, die Stelle zu finden, wo das passiert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#6

Re: Problem wegen/mit ID3Tags

  Alt 25. Jun 2005, 18:16
Schön, wieso läuft es dann hier ?
Delphi-Quellcode:
procedure TForm1.Label13Click(Sender: TObject);
var mp3Folder : string;
begin

 mp3Folder := BrowseDialog('Choose a folder with mp3 files', BIF_RETURNONLYFSDIRS);
 if mp3Folder = 'then Exit;

 txtFolder.Caption := mp3Folder;

 //fill the list box with mp3 files
 FillMP3FileList(mp3Folder, playlist.Items);
end;
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#7

Re: Problem wegen/mit ID3Tags

  Alt 25. Jun 2005, 18:25
Zitat von Nils_13:
Schön, wieso läuft es dann hier ?
Das weiß ich nicht. Solange du nicht aufhörst in rätseln zu reden und uns nicht genau erklärst, was du uns sagen willst, kann dir niemand helfen. Bitte erkläre doch genau dein Problem und deine Frage. Das kann doch nicht so schwer sein, oder?

Sorry, wenn ich das jetzt so grob sagen muss, aber irgendwo wird es einfach zu viel.
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#8

Re: Problem wegen/mit ID3Tags

  Alt 25. Jun 2005, 18:26
Zitat von Nils_13:
Schön, wieso läuft es dann hier ?
Weil du da den Ordner mitgibst
schau mal genau auf die Meldung, die dir im Ursprungsproblem kommt:
da steht ws nur
[equote="'Deine' Meldung"]mp3 file
datei.mp3
does not exist!
[/equote]
d.h. er findet die Datei nicht.
Klar, schließlich fehlt auch der Dateipfad
Das 2. Stück code klappt, weil da ne Variable dabei is, die den Dateipfad enthält (mp3Folder)

Etwas Eigenintelligenz wäre beim Programmieren schon von Vorteil....
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: Problem wegen/mit ID3Tags

  Alt 26. Jun 2005, 01:16
Was genau macht die Funktion "Concat" in:
mp3File := Concat(txtFolder.Caption, playlist.Items.Strings[playlist.ItemIndex]); Wenn die kein "IncludeTrailingPathDelimiter" drin hat, dann fehlt dir wohl ein Backslash.
Volker
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:35 Uhr.
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