12.07.2015 Views

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

P R O G R A M U J E M E‘Psychedelic Rock’, ‘Symphonic Rock’, ‘Slow Rock’, ‘Big Band’,‘Chorus’, ‘Easy Listening’, ‘Acoustic’, ‘Humour’, ‘Speech’, ‘Chanson’,‘Opera’, ‘Chamber Music’, ‘So<strong>na</strong>ta’, ‘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’, ‘DanceHall’,‘Goa’, ‘Drum & Bass’, ‘Club-House’, ‘Hardcore’, ‘Terror’, ‘Indie’,‘BritPop’, ‘Negerpunk’, ‘Pol<strong>sk</strong> Punk’, ‘Beat’, ‘Christian Gangsta Rap’,‘Heavy Metal’, ‘Black Metal’, ‘Crossover’, ‘Contemporary Christian’,‘Christian Rock’, ‘Merengue’, ‘Salsa’, ‘Trash Metal’, ‘Anime’, ‘Jpop’,‘Synthpop’);Jednoduchým spôsobom sme priradili k príslušným žánrom štandardne pridelené èíselnéhodnoty. Viem, že žánre boli postupom èasu doplòované, ale mne sa podarilo zí<strong>sk</strong>aiba túto verziu, ktorá obsahuje 147 žánrov, no uz<strong>na</strong>jte, že aj to je dos . Takéto pole stringje vlastne <strong>na</strong>niè, pokia¾ ho správne nepoužijeme.procedure TForm1.SpeedButton1Click(Sender: TObject);var f: file;buffer: array [1..128] of Char;beginwith opendialog1 do beginexecute;edit1.text:= file<strong>na</strong>me;end;if fileexists(edit1.text) then begi<strong>na</strong>ssignfile(f, edit1.text);reset(f,1);seek(f, filesize(f)-128);BlockRead(f, buffer, SizeOf(Buffer));CloseFile(f);if copy(buffer, 1, 3)= ‘TAG’ then begincheckbox1.checked := true;edit3.text:= copy(Buffer, 4, 30);edit4.text:= copy(Buffer, 34, 30);edit5.text:= copy(buffer, 64, 30);edit6.text:= copy(Buffer, 94, 4);edit7.text:= copy(Buffer, 98, 29);edit2.text:= inttostr(ord(buffer[127]));combobox1.Text:= id3zaner[ord(Buffer[128])];end;end;end;Procedúra pre èítanie ID3 TAG je spustená po stlaèení tlaèidla urèeného <strong>na</strong> otvoreniesúboru typu MP3, z ktorého èítame informáciu o príslušnej <strong>sk</strong>ladbe. Po otvorení opendialog1a vyh¾adaní súboru typu MP3 sa overí existencia nájdeného súboru, následne saotvorí a pripraví <strong>na</strong> èítanie. Po <strong>na</strong>stavení pozície v súbore príkazom seek a <strong>na</strong>èítaní 128bitov do premennej buffer, ktorá je po¾om char, sa práca so súborom ukonèí. Ak prvé trihodnoty po¾a char súhlasia s kontrolou ID3 TAG, vtedy sa zaènú vpisova do jednotlivýcheditovacích okien príslušné hodnoty èítané z premennej buffer. Za povšimnutie stojí èítanieèísla <strong>sk</strong>ladby, kde prevodom ord sa zmení hodnota char <strong>na</strong> hodnotu longint. Funkciaord je použitá aj v prípade èítania žánru pomocou vytvoreného po¾a id3zaner.ZÁPIS ID3 TAG V1. Urèite potrebná operácia je zápis, ktorý je v tomto prípadeo nieèo zložitejší ako èítanie. Sám som <strong>sk</strong>úšal viacero alter<strong>na</strong>tív, ale táto sa mi zdala <strong>na</strong>jefektívnejšiazo všetkých. Mnoho možností riešenia tohto problému urèite nikoho z vásne<strong>na</strong>dchý<strong>na</strong>, ale ma aspoò základný preh¾ad nie je <strong>na</strong> škodu. Výsledkom môjho experimentovaniaje táto procedúra.procedure TForm1.Button1Click(Sender: TObject);var f: file;i: integer;start, title, artist: string;album, year, coment: string;number, genre: char;Newb: array [1..128] of char;beginstart:= ‘TAG’;title:= edit3.text;artist:= edit4.text;album:= edit5.text;year:= edit6.text;coment:= edit7.text;if checkbox1.Checked= true then begi<strong>na</strong>ssignfile(f, edit1.text);reset(f, 1);seek(f, filesize(f)- 128);for i:= 1 to 128 do beginif (i>0) and (i3) and (i33) and (i63) and (i93) and (i97) and (i126) and (i127 then newb[i]:= chr(combobox1.ItemIndex);end;if length(title)< 30 then beginfor i:= 4+ length(title) to 3+ length(title)+ 30- length(title) dobeginnewb[i]:= #00;end;end;if length(artist)< 30 then beginfor i:= 34+ length(artist) to 33+ length(artist)+ 30- length(artist) dobeginnewb[i]:= #00;end;end;if length(album)< 30 then beginfor i:= 64+ length(album) to 63+ length(album)+ 30- length(album) dobeginnewb[i]:= #00;end;end;if length(coment)< 29 then beginfor i:= 98+ length(coment) to 97+ length(coment)+ 29- length(coment) dobeginnewb[i]:= #00;end;end;BlockWrite(f, Newb, SizeOf(Newb));closefile(f);end;end;Procedúra je spustená po kliknutí <strong>na</strong> tlaèidlo OK. V jej vnútri som použil to¾ko premenných,ko¾ko rôznych parametrov potrebujem do súboru zapísa . Tak ako pri èítaní ajtu som si otvoril súbor. Pozíciu som <strong>na</strong>stavil <strong>na</strong> posledných 128 bitov. Najväèšou dilemoupre mòa bol spôsob, ako to usporiada dokoneènej podoby, teda premennej newb(newbuffer). Musel som myslie aj <strong>na</strong> možnos, keï jed<strong>na</strong> z premenných nemá presnetakú dåžku, aká nám vyplýva z tabu¾ky ID3TAG. Napríklad ak máme názov <strong>sk</strong>ladby sdåžkou 15 z<strong>na</strong>kov, vtedy nám ïalších 15ostáva vo¾ných. Tieto z<strong>na</strong>ky sa majú prejaviako char #00. Ja som to vyriešil tak, že pozapísaní hodnôt do premennej newb sa celépole char kontroluje a nepotrebné hodnotysa jednoducho nulujú. Prázdne miesta saformátujú preto, aby nevznikol nedefinovanýparameter v poli char. Tým by sa totižObr. 2vytvorili chybné sluèky obsahujúce náhodnéinformácie. Celý tento problém sa dá obís vtedy, ak celú procedúru zakladáme <strong>na</strong> premennejtypu string, a posúvaním pozícií príkazom seek. Samozrejme, pred takým zápisomby sme museli posledných 128 bitov súboru formátova <strong>na</strong> char #00. Žánre somvyriešil jednoduchou funkciou, ktorá je volaná prostredníctvom komponentu combobox1.Funkcia ItemIndex nám vracia hodnotu typu integer udávajúcu pozíciu, respektíveriadok, v ktorom sa práve <strong>na</strong>chádzame. V tomto prípade ide o pozíciu v combobox1.Do combobox1.item treba zapísa žánre v nezmenenom poradí presne tak, ako sú zapísanév poli string. Táto procedúra nie je úplne doko<strong>na</strong>lá. Napríklad ak stlaèíte tlaèidlo OKa nemáte v edit7 nijaký komentár, program vyhlási chybu. Problém je v nulovej hodnotejednej z premenných (coment := ’’). Tieto dve procedúry sa dajú prerobi <strong>na</strong> program <strong>na</strong>hromadné premenovanie súborov MP3 (<strong>na</strong>príklad pod¾a použitého odde¾ovaèa, názvu<strong>sk</strong>ladby alebo interpreta). Možností je mnoho, len sa do toho pusti . Ak vám chýba motivácia,prikladám aj obrázok hotovej utilitky zobrazujúcej a editujúcej ID3 TAG. (Viem, žeto nie je niè výnimoèné, ale aj málo vie poteši ...)Nabudúce si opíšeme druhú verziu ID3 TAG, teda ID3 TAG v2.Jozef Kozák ml.130 PC REVUE 10/2001

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!