Hi,
wenn ich mit folgendem Code versuche den Tag eines MP3-Stückes zu setzen,
dann habe ich Sonderzeichen mit im String (#07 oder #12).
Was ist denn daran Falsch?
Code:
procedure setID3Tag (FileName: string ; ID_Tag: TID3Tag) ;
var
FS: TFileStream ;
begin
FS := TFileStream.Create (FileName, fmOpenReadWrite or fmShareDenyWrite) ;
try
with ID_Tag, FS do
begin
Seek (-128, soFromEnd) ;
WriteBuffer (ID, 3) ;
WriteBuffer (Titel, 30) ;
WriteBuffer (Artist, 30) ;
WriteBuffer (Album, 30) ;
WriteBuffer (Year, 4) ;
WriteBuffer (Comment, 30) ;
WriteBuffer (Genre,1) ;
end ;
finally
FS.Free ;
end ;
end ;
Der Aufruf erfolgt so:
{aus Form2 werden einzelne Edit-Felder zugewiesen, vorher ein Record (siehe
ganz unten) als Variable immer komplett auf #0 gesetzt)
with Form2, Dummy_ID3 do
begin
FillChar (ID, 3, #0) ;
ID := Edit_ID.Text ;
FillChar (Titel, 30, #0) ;
Titel := Edit_Titel.Text ;
FillChar (Artist, 30, #0) ;
Artist := Edit_Artist.Text ;
FillChar (Album, 30, #0) ;
Album := Edit_Album.Text ;
FillChar (Year, 4, #0) ;
Year := Edit_Jahr.Text ;
FillChar (Comment, 30, #0) ;
Comment := Edit_Kommentar.Text ;
Genre := ComboBox_Genre.ItemIndex ;
end ;
if Form2.Tag = 0 then
setID3Tag (ListBox1.Items[MenuItem_Eintrag_enfernen.Tag], Dummy_ID3)
Hier der Record:
type
TID3Tag = record
ID: string[3] ;
Titel: string[30] ;
Artist: string[30] ;
Album: string[30] ;
Year: string[4] ;
Comment: string[30] ;
Genre: Byte ;
end ;
So, wenn also nix drin steht in einem Edit-Feld, ist es ja egal, denn der
jeweilige Teil vom Record ist ja mit #0 gefüllt - je nach Grösse. Aber woher
kommen denn dann die Sonderzeichen (siehe Procedure weiter oben)?
Die Deklaration ist einfach das Gegenteil der Ausleseprocedure. Diese findet
man ja in dieser oder anderer Form genug im WWW.
Hat jemand eine Idee?
Außerdem eins noch, ID wird IMMER nur mit 2 Werten zugeteilt, der nächste
Teil von FS.Write - der Teil hier:
WriteBuffer (Titel, 30) ;
Überschreibt immer das letzte Byte vom vorigen ID in der Datei mit einem
Sonderzeichen (#07).
So wird aus ID='123' eben ein '12|' |=Platzhalter für #07.
Warum?
Einen Download findet man unter
www.nogad.de/nogad/index.php?TRM=work&work=PLAYER
Source und Binary.
Wer eine Antwort hat, für Delphi 5, den bitte ich um Hilfe
Gruß Mathias
.. ——————————————————————————————————————
.. Home: nogad.de
.. Mail: [email protected]
.. Werbung:Pension-Fiege.de
.. ——————————————————————————————————————
.. Hier gibts was zum SPAREN
.. www.sparen-will-ich.de
.. Vieles auch für Computer dabei
.. ——————————————————————————————————————
wenn ich mit folgendem Code versuche den Tag eines MP3-Stückes zu setzen,
dann habe ich Sonderzeichen mit im String (#07 oder #12).
Was ist denn daran Falsch?
Code:
procedure setID3Tag (FileName: string ; ID_Tag: TID3Tag) ;
var
FS: TFileStream ;
begin
FS := TFileStream.Create (FileName, fmOpenReadWrite or fmShareDenyWrite) ;
try
with ID_Tag, FS do
begin
Seek (-128, soFromEnd) ;
WriteBuffer (ID, 3) ;
WriteBuffer (Titel, 30) ;
WriteBuffer (Artist, 30) ;
WriteBuffer (Album, 30) ;
WriteBuffer (Year, 4) ;
WriteBuffer (Comment, 30) ;
WriteBuffer (Genre,1) ;
end ;
finally
FS.Free ;
end ;
end ;
Der Aufruf erfolgt so:
{aus Form2 werden einzelne Edit-Felder zugewiesen, vorher ein Record (siehe
ganz unten) als Variable immer komplett auf #0 gesetzt)
with Form2, Dummy_ID3 do
begin
FillChar (ID, 3, #0) ;
ID := Edit_ID.Text ;
FillChar (Titel, 30, #0) ;
Titel := Edit_Titel.Text ;
FillChar (Artist, 30, #0) ;
Artist := Edit_Artist.Text ;
FillChar (Album, 30, #0) ;
Album := Edit_Album.Text ;
FillChar (Year, 4, #0) ;
Year := Edit_Jahr.Text ;
FillChar (Comment, 30, #0) ;
Comment := Edit_Kommentar.Text ;
Genre := ComboBox_Genre.ItemIndex ;
end ;
if Form2.Tag = 0 then
setID3Tag (ListBox1.Items[MenuItem_Eintrag_enfernen.Tag], Dummy_ID3)
Hier der Record:
type
TID3Tag = record
ID: string[3] ;
Titel: string[30] ;
Artist: string[30] ;
Album: string[30] ;
Year: string[4] ;
Comment: string[30] ;
Genre: Byte ;
end ;
So, wenn also nix drin steht in einem Edit-Feld, ist es ja egal, denn der
jeweilige Teil vom Record ist ja mit #0 gefüllt - je nach Grösse. Aber woher
kommen denn dann die Sonderzeichen (siehe Procedure weiter oben)?
Die Deklaration ist einfach das Gegenteil der Ausleseprocedure. Diese findet
man ja in dieser oder anderer Form genug im WWW.
Hat jemand eine Idee?
Außerdem eins noch, ID wird IMMER nur mit 2 Werten zugeteilt, der nächste
Teil von FS.Write - der Teil hier:
WriteBuffer (Titel, 30) ;
Überschreibt immer das letzte Byte vom vorigen ID in der Datei mit einem
Sonderzeichen (#07).
So wird aus ID='123' eben ein '12|' |=Platzhalter für #07.
Warum?
Einen Download findet man unter
www.nogad.de/nogad/index.php?TRM=work&work=PLAYER
Source und Binary.
Wer eine Antwort hat, für Delphi 5, den bitte ich um Hilfe
Gruß Mathias
.. ——————————————————————————————————————
.. Home: nogad.de
.. Mail: [email protected]
.. Werbung:Pension-Fiege.de
.. ——————————————————————————————————————
.. Hier gibts was zum SPAREN
.. www.sparen-will-ich.de
.. Vieles auch für Computer dabei
.. ——————————————————————————————————————
Comment