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
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
900 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.
Being smart will count for nothing if you don't make the world better. You have to use your smarts to count for something, to serve life, not death.
  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
900 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.
Being smart will count for nothing if you don't make the world better. You have to use your smarts to count for something, to serve life, not death.
  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
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 22:12 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 by Thomas Breitkreuz