24. Ein Id3-Viewer
Wendet man den Hexadezimal-Viewer aus dem letzten Kapitel auf eine mp3-Datei an, so kann man erkennen, dass die letzten 128 Byte am Ende der Datei Information über das Musikstück enthalten, den sogenannten Id3-Tag.
Unser kleiner Id3-Viewer soll diesen Id3-Tag als Record auslesen und anzeigen:
TId3 = record
ID : string[3];
Title : string[30];
Artist : string[30];
Album : string[30];
Year : string[4];
Comment : string[30];
Genre : Byte;
end;
Dazu schreiben wir eine Funktion ReadID3Tag, die eine Mp3-Datei öffnet und den Id3-Tag am Dateiende einliest. Außerdem eine Prozedur anzeigen, die den Datensatz in die Edit-Felder schreibt. Aufgerufen werden beide im OnClick-Ereignis des Buttons, mit dem die Datei über einen OpenDialog ausgewählt wird.
function ReadID3Tag(dateiname:string): Tid3;
var datei : file;
buffer: array[1..128] of char;
begin
try
AssignFile(datei, dateiname);
Reset(datei,1);
Seek(datei,FileSize(datei)-SizeOf(buffer));
BlockRead(datei, buffer, SizeOf(buffer));
With result do
begin
ID := copy(buffer,1,3);
Title := copy(buffer,4,30);
Artist := copy(buffer,34,30);
Album := copy(buffer,64,30);
Year := copy(buffer,94,4);
Comment:= copy(buffer,98,30);
Genre := ord(buffer[128]);
end;
finally
CloseFile(datei);
end;
end;
procedure TForm1.anzeigen(id3:TId3);
begin
with id3 do begin
Edit1.Text := Trim(Title);
Edit2.Text := Trim(Artist);
Edit3.Text := Trim(Album);
Edit4.Text := Trim(Year);
Edit5.Text := Trim(Comment);
Edit6.Text := IntToStr(Genre);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var id3: TId3;
begin
with Opendialog1 do
if Execute then begin
Edit7.Text := Filename;
id3 := ReadId3Tag(Filename);
anzeigen(id3);
end;
end;
Aufgaben :
- Erweitern Sie den Id3-Viewer zu einem Id3-Editor, mit dem der Id3-Record überschrieben, bzw. angehängt werden kann.
Schreiben Sie eine Funktion, mit der die Musikrichtung aus der Genre-Nummer und der folgenden Tabelle bestimmt wird.
ID3Genre: array[0..127] of string = ('Blues', 'Classic Rock', 'Country', 'Dance', 'Disco', 'Funk', 'Grunge', 'Hip-Hop', 'Jazz', 'Metal', 'New Age', 'Oldies', 'Other', 'Pop', 'R&B', 'Rap', 'Reggae', 'Rock', 'Techno', 'Industrial', 'Alternative', 'Ska', 'Death Metal', 'Pranks', 'Soundtrack', 'Euro-Techno', 'Ambient', 'Trip-Hop', 'Vocal', 'Jazz+Funk', 'Fusion', 'Trance', 'Classical', 'Instrumental', 'Acid', 'House', 'Game', 'Sound Clip', 'Gospel', 'Noise', 'AlternRock', 'Bass', 'Soul', 'Punk', 'Space', 'Meditative', 'Instrumental Pop', 'Instrumental Rock', 'Ethnic', 'Gothic', 'Darkwave', 'Techno-Industrial', 'Electronic', 'Pop-Folk', 'Eurodance', 'Dream', 'Southern Rock', 'Comedy', 'Cult', 'Gangsta', 'Top 40', 'Christian Rap', 'Pop/Funk', 'Jungle', 'Native American', 'Cabaret', 'New Wave', 'Psychadelic', 'Rave', 'Showtunes', 'Trailer', 'Lo-Fi', 'Tribal', 'Acid Punk', 'Acid Jazz', 'Polka', 'Retro', 'Musical', 'Rock & Roll', 'Hard Rock', 'Folk', 'Folk-Rock', 'National Folk', 'Swing', 'Fast Fusion', 'Bebob', 'Latin', 'Revival', 'Celtic', 'Bluegrass', 'Avantgarde', 'Gothic Rock', 'Progressive Rock', 'Psychedelic Rock', 'Symphonic Rock', 'Slow Rock', 'Big Band', 'Chorus', 'Easy Listening', 'Acoustic', 'Humour', 'Speech', 'Chanson', 'Opera', 'Chamber Music', 'Sonata', 'Symphony', 'Booty Bass', 'Primus', 'Porn Groove', 'Satire', 'Slow Jam', 'Club', 'Tango', 'Samba', 'Folklore', 'Ballad', 'Power Ballad', 'Rhythmic Soul', 'Freestyle', 'Duet', 'Punk Rock', 'Drum Solo', 'Acapella', 'Euro-House', 'Dance Hall', '', '' );
© 2009 : Bernd Schultheiss
Einführung in das Programmieren mit DELPHI
