AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Mp3FileUtils.pas Zugriffsverletzung beim schreiben von Tags.
Thema durchsuchen
Ansicht
Themen-Optionen

Mp3FileUtils.pas Zugriffsverletzung beim schreiben von Tags.

Ein Thema von MisterSonic · begonnen am 10. Mai 2011 · letzter Beitrag vom 11. Mai 2011
Antwort Antwort
Seite 1 von 2  1 2      
MisterSonic

Registriert seit: 4. Jan 2004
Ort: Sachsen-Anhalt
40 Beiträge
 
Delphi 7 Enterprise
 
#1

Mp3FileUtils.pas Zugriffsverletzung beim schreiben von Tags.

  Alt 10. Mai 2011, 20:56
Halli hallo liebe Leute,

ich habe mir die Mp3FileUtils.pas von Gausi hier aus dem Forum geladen und damit versucht einen ID3Tag in eine Datei zu schreiben, mit folgendem Code ...

Code:
        stream := TFileStream.Create(Datei,fmOpenRead or fmShareDenyWrite);
 // ID3-Tag auslesen
        Id3v2Tag.ReadFromStream(stream);
 // an das Ende des Tags springen
        if Not Id3v2Tag.exists then
         stream.Seek(0, sobeginning)
        else
         stream.Seek(Id3v2Tag.size, soFromBeginning);
 
         Id3v2Tag.Artist := Interpret;
         Id3v2Tag.Title := Titel;
         Id3v2Tag.Genre := Genre;
         Id3v2Tag.Year  := Jahr;
         Id3v2Tag.Comment:= datetostr(datum)+' / '+timetostr(datum);
         Id3v2Tag.WriteToStream(Stream);
 
        stream.free;
Diesen Code habe ich aus der beiligenden Manual und hab ihn für meine Bedürfnisse angepasst ..., leider erfolgt bei der Ausführung ne Fehlermeldung : Zugriffsverletzung .....

Kann mir da jemand weiterhelfen?

Ich danke euch im vorraus für die Hilfe und Tipps.

Liebe Grüße, Patrick.
Niveau ist keine Cremè.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Mp3FileUtils.pas Zugriffsverletzung beim schreiben von Tags.

  Alt 10. Mai 2011, 20:59
Wo wird die Klasse erzeugt Id3v2Tag?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MisterSonic

Registriert seit: 4. Jan 2004
Ort: Sachsen-Anhalt
40 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Mp3FileUtils.pas Zugriffsverletzung beim schreiben von Tags.

  Alt 10. Mai 2011, 21:05
Hallo und vielen Dank für deine Antwort ...

diesen Teil hatte ich in der tat noch vergessen ... danke für den Denkanstoß!!!

Leider komme ich nun zu einem "Stream-Schreibfehler" ...

Code:
       stream := TFileStream.Create(Datei,fmOpenRead or fmShareDenyWrite);
// ID3-Tag auslesen
       Id3v2Tag := TId3v2Tag.Create;
       Id3v2Tag.ReadFromStream(stream);
// an das Ende des Tags springen
       if Not Id3v2Tag.exists then
        stream.Seek(0, sobeginning)
       else
        stream.Seek(Id3v2Tag.size, soFromBeginning);

        Id3v2Tag.Artist := Interpret;
        Id3v2Tag.Title := Titel;
        Id3v2Tag.Genre := Genre;
        Id3v2Tag.Year  := Jahr;
        Id3v2Tag.Comment:= datetostr(datum)+' / '+timetostr(datum);
        Id3v2Tag.WriteToStream(Stream);
        stream.free;
        Id3v2Tag.Free;
Niveau ist keine Cremè.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
878 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Mp3FileUtils.pas Zugriffsverletzung beim schreiben von Tags.

  Alt 10. Mai 2011, 21:13
Wo wird die Klasse erzeugt Id3v2Tag?
In den Demos vermutlich im OnCreate der Form. Wenn der Tag erst ausgelesen wird, dann in den Edits einige Infos geändert werden bevor wieder gespeichert wird, kann man sich in der ButtonSaveClick-Methode das erneute auslesen sparen.

ABER: Der Code ist Murks! Ich hoffe mal nicht, dass das so in den Demos drinsteht! (vermutlich nicht, schließlich wird der Stream nur zum lesen geöffnet. )

Id3v2Tag.WriteToStream(Stream); sollte eigentlich NIE direkt verwendet werden. Denn dadurch wird nur der Tag in den Stream geschrieben. Einfach so. Dabei wird weder der bereits vorhandene Tag sauber entfernt, noch wird getestet, ob das neue Tag-Objekt da überhaupt reinpasst. Dadurch werden dann ggf. Audiodaten überschrieben, oder die Datei wird generell ungültig!

Zum Schreiben IMMER WriteToFile(dateiname) benutzen.

Die Methode ist trotzdem public, weil man sie z.B. nutzen kann, wenn man eine neue Mp3-Datei erstellen will, z.B. bei Webradio-Aufnahme und dort am Anfang einen TId3v2-Tag erstellen möchte.

Edit: Also Den Stream rausschmeißen und stattdessen mit dem FileName arbeiten.
The angels have the phone box.
  Mit Zitat antworten Zitat
MisterSonic

Registriert seit: 4. Jan 2004
Ort: Sachsen-Anhalt
40 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Mp3FileUtils.pas Zugriffsverletzung beim schreiben von Tags.

  Alt 10. Mai 2011, 21:20
Danke Gausi,

Ich habe das jetzt mal angepasst und nehme nun Id3v2Tag.WriteToFile(Datei); zum schreiben des Tags, das klappt auch soweit, allerdings ... wird der Wert aus Id3v2Tag.comment nicht mit gespeichert....??
Niveau ist keine Cremè.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
878 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Mp3FileUtils.pas Zugriffsverletzung beim schreiben von Tags.

  Alt 10. Mai 2011, 21:38
Der sollte eigentlich auch übernommen werden. Problem könnte höchstens sein, dass in dem Tag mehrere Comment-Frames enthalten sind (das ist erlaubt), und beim Schreiben des "Standard-Kommentars", der bei der Comment-Property benutzt wird, ein anderer Frame verwendet wird als beim lesen. Das wäre dann ein blöder Bug, der mir bisher nicht aufgefallen ist.

Schick mir die Datei, bei der das nicht funktioniert, ggf. mal per Mail. Dann schau ich mir die mal an.
The angels have the phone box.
  Mit Zitat antworten Zitat
MisterSonic

Registriert seit: 4. Jan 2004
Ort: Sachsen-Anhalt
40 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Mp3FileUtils.pas Zugriffsverletzung beim schreiben von Tags.

  Alt 10. Mai 2011, 21:43
Bin schon dabei ... die Mail geht an die Impressum Adresse deiner Homepage, dauert aber nen kleinen Moment .... ist natürlich gleich ein 15MB track sollte es der fall sein das da mehrere solcher Comments drin sind, kann man die nicht pauschal entfernen lassen bevor man neue reinschreibt, wenn ja -> wie?
Niveau ist keine Cremè.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
878 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Mp3FileUtils.pas Zugriffsverletzung beim schreiben von Tags.

  Alt 10. Mai 2011, 22:12
Danke für die Mail, auch wenn diese Art von Musik wahrscheinlich nicht lange auf meiner Platte überleben wird.

Der Tag in der Datei ist etwas merkwürdig. Tatsächlich tauchen dort zwei Kommentar-Frames auf, die aber beide "09.05.2011 / 09:55:51" lauten. Der eine ist ANSI-kodiert, der andere UTF16. Wenn ich den Kommentar über meine Demo-Anwendungen ändere, dann klappt das, soll heißen der erste Frame wird geändert und auch wieder gelesen. Warum die Info "Jahr" (2011) allerdings 5 mal darin auftaucht, ist mir absolut schleierhaft.

Hats du denn auch das Lesen auf ReadFromFile umgestellt? Oder anders gefragt: Werden andere Daten (Interpret, ...) übernommen?

Zum löschen aller Kommentare sollte dieser Code funktionieren:
Delphi-Quellcode:
while Id3v2tag.Comment <> 'do
  Id3v2tag.Comment := '';
Bei der Zuweisung des Leerstrings wird der Comment-Frame gelöscht. Wenn ein weiterer im Tag enthalten ist, wird dieser als "Comment" gefunden.
The angels have the phone box.
  Mit Zitat antworten Zitat
MisterSonic

Registriert seit: 4. Jan 2004
Ort: Sachsen-Anhalt
40 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: Mp3FileUtils.pas Zugriffsverletzung beim schreiben von Tags.

  Alt 10. Mai 2011, 22:20
Danke für deine Mühe, inzwischen habe ich festgestellt, das es tatsächlich in die Datei geschrieben wird, aber ... wähle ich die Datei im Explorer aus, gehe auf Eigenschaften, dann auf Details steht unter "Beschreibungen -> Kommentare" nichts drin???
Niveau ist keine Cremè.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
878 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Mp3FileUtils.pas Zugriffsverletzung beim schreiben von Tags.

  Alt 10. Mai 2011, 22:33
Ok, das wäre dann ein weiterer Punkt, den ich an der Microsoft'schen Behandlung von ID3Tags hasse. Nicht nur, dass der 9 Jahre alte ID3v2.4-Tag auch in Windows 7 immer noch nicht erkannt wird, und beim Schreiben einfach ein ID3v2.3-Tag davor geknallt wird (oder der WMP einfach ne Exception schmeißt). Ne, jetzt beschränkt sich die Kommentar-Anzeige auch auf deutsche Kommentare.

Zur Erklärung: Kommentarfelder enthalten nicht nur den Kommentar an sich, sondern auch die Sprache des Kommentars (und ggf. auch eine Beschreibung des Kommentars). In der Datei, die du mir geschickt hast, ist die Sprache "eng", also englisch, wie in den meisten anderen Files vermutlich auch. Ändert man die mit einem Hex-Editor auf "deu", dann wird der Kommentar im Explorer angezeigt. Ändert man dann den Kommentar mit "ID3v2tag.Comments = ...", dann wird auch die Änderung im Explorer angezeigt, da die Sprache von Mp3FileUtils nicht verändert wird und demnach auf "deu" gelassen wird, damit das liebe Windows das auch versteht. Was dieser Unfug soll, weiß ich allerdings nicht so ganz. Es ist zwar schön, dass auf einem deutschen Windows ein deutscher Kommentar bevorzugt wird, aber dass es dann keinen Fallback auf andere Sprachen gibt, finde ich sehr merkwürdig.
The angels have the phone box.

Geändert von Gausi (10. Mai 2011 um 22:36 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:16 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