|
|
MP3 zene tulajdonságainak lekérdezése programból
|
|
Példaprogram letöltése
9096 bájt
|
A nagy népszerűségnek örvendő MP3 fájlok különböző információkat tartalmaznak az előadóról, az albumról, és még sok minden másról is. Ebben a cikkben egy olyan komponenst mutatunk be, amely a fájl kiválasztása után azonnal beolvassa az abban tárolt adatokat, melyeket akár módosíthatunk is. Nagyon jól használható például egy saját MP3 katalógus program készítésekor.
A mellékelt példaprogram megnyitása előtt a MP3Tag.pas-ban lévő komponenst telepítenie kell a Delphi alá.
Az MP3 fájlokban ezek a kiegészítő adatok a fájl végén találhatók, méghozzá az utolsó 128 bájtban. Mivel nem minden MP3 fájl esetében van ilyen adatblokk a fájl végén, ezért ezt úgy tudhatjuk meg, hogy a 128 bájtos adatblokk első 3 bájtja a "TAG" azonosítót tartalmazza. Ezután következnek a következő adatok: Title, Artist, Comment, és Album adatok, egyenként 30 bájtot lefoglalva, majd a Year 4 bájton, és a Genre 1 bájton. A Genre a zeneszám stílusának kódját tartalmazza. Ha a kód 148-nál nagyobb, akkor a stílus ismeretlen.
Az adatok beolvasását a Refresh eljárás végzi, melyet akár a komponenshez rendelt menüből is meghívhatunk. Definiáltunk egy TMP3TagRecord típust, amely a következőképpen néz ki:
TID3TagRecord = packed record
Tag: array[0..2] of Char;
TagTitle: array[0..29] of Char;
TagArtist: array[0..29] of Char;
TagComment: array[0..29] of Char;
TagAlbum: array[0..29] of Char;
TagYear: array[0..3] of Char;
TagGenre: Byte;
end;
Ha összeadjuk az egyes mezők hosszát, akkor 128-at kapunk, tehát egy ilyen típusú változóba egyből beolvashatjuk az adatokat, ezért a Refresh eljárásban is létrehoztunk egy ilyet TagRec névvel.
procedure TMP3Tag.Refresh;
var
fs: TFileStream;
TagRec: TID3TagRecord;
begin
Töröljük a property-k aktuális értékét. A TagUnknown konstans a "<Unknonw>" sztringet tartalmazza. Ha az MP3 fájl nem tartalmaz adatokat, akkor a property-kből ez az érték olvasható csak ki.
FTagTitle:=TagUnknown;
FTagArtist:=TagUnknown;
FTagAlbum:=TagUnknown;
FTagYear:=TagUnknown;
FTagStyle:=TagUnknown;
FTagComment:=TagUnknown;
Ha a fájl nem létezik, akkor már ki is lépünk az eljárásból. Az adatblokk beolvasását a TFileStream osztály használatával végezzük el. Rápozícionálunk az adatblokk elejére, ami a fájl végétől visszafelé számolt 128. bájtnak felel meg, majd beolvassuk ezt a blokkot a TagRec változóba.
if not FileExists(FFileName) then Exit;
fs:=TFileStream.Create(FFileName, fmOpenRead);
try
fs.Position:=fs.size-128;
fs.Read(TagRec, SizeOf(TagRec));
finally
fs.free;
end;
Ha ténylegesen egy adatblokkot olvastunk be, akkor a TagRec változó Tag mezőjébe a "TAG" sztring került. Ebben az esetben a property-knek átadjuk a megfelelő értékeket.
if TagRec.Tag='TAG' then begin
FTagTitle:=Trim(TagRec.TagTitle);
FTagArtist:=Trim(TagRec.TagArtist);
FTagAlbum:=Trim(TagRec.TagAlbum);
FTagYear:=Trim(TagRec.TagYear);
FTagGenre:=TagRec.TagGenre;
FTagComment:=Trim(TagRec.TagComment);
SetTagGenre(FTagGenre);
end;
end;
A másik megoldandó feladat a megváltoztatott, vagy új adatok kiírása a fájlba. Ezt végzi el a Save eljárás. Ebben megnyitjuk a fájlt, és beolvassuk az adatblokk első 3 karakterét. Ha a kapott sztring nem "TAG", akkor a fájl végére, egyébként pedig az adatblokk elejére pozícionálunk, majd a TagRec változót feltöltjük a property-k értékeivel és a BlockWrite eljárással kiírjuk a fájlba.
procedure TMP3Tag.Save;
var fh: file of Byte;
TagRec: TID3TagRecord;
begin
try
AssignFile(fh, FFileName); Reset(fh);
try
Seek(fh, FileSize(fh) - 128);
BlockRead(fh, TagRec, SizeOf(TagRec));
if TagRec.Tag = 'TAG' then Seek(fh, FileSize(fh) - 128) else Seek(fh, FileSize(fh));
TagRec.Tag:='TAG';
StrPCopy(TagRec.TagTitle, FTagTitle);
StrPCopy(TagRec.TagArtist, FTagArtist);
StrPCopy(TagRec.TagComment, FTagComment);
StrPCopy(TagRec.TagAlbum, FTagAlbum);
StrPCopy(TagRec.TagYear, FTagYear);
TagRec.TagGenre:=FTagGenre;
BlockWrite(fh, TagRec, SizeOf(TagRec));
finally
end;
finally
CloseFile(fh);
end;
end;
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 333. oldal
Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!
|