07.06.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

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<br />

procedure TPlayListWnd.VymazClick(Sender: TObject);<br />

begin<br />

PlayList.Items.Delete(PlayList.ItemIndex);<br />

StatusBar.SimpleText:='Poèet <strong>sk</strong>ladieb: ' +<br />

IntToStr(PlayList.Items.Count);<br />

end;<br />

Po vymazaní <strong>sk</strong>ladby sa poèet položiek zníži o jednu, preto je potrebné aktualizova<br />

komponent TStatusBar, ktorý nám poèet pesnièiek zobrazuje.<br />

Teoreticky by sme už mohli zaèa prehráva , no potrebujeme ešte prida tlaèidlá <strong>na</strong><br />

zastavenie a „pauznutie“ <strong>sk</strong>ladby. Prvé z nich <strong>na</strong>zveme Stop a druhé Pauza. Ruti<strong>na</strong> <strong>na</strong><br />

zastavenie prehrávania bude vyzera takto:<br />

procedure TPlayerWnd.StopClick(Sender: TObject);<br />

begin<br />

if Player.PlayerMode=pmPlaying then Player.Stop;<br />

Pauza.E<strong>na</strong>bled:=false;<br />

end;<br />

Všimnite si, že po stlaèení tlaèidla Stop sa zneprístupní tlaèidlo Pauza: stlaèením tlaèidla<br />

Stop totiž zastavíme prehrávanie <strong>sk</strong>ladby, a keïže sa žiad<strong>na</strong> <strong>sk</strong>ladba neprehráva, nemožno<br />

jej prehrávanie ani preruši .<br />

Doèasné zastavenie <strong>sk</strong>ladby si tiež nevyžaduje prive¾a kódu:<br />

procedure TPlayerWnd.PauzaClick(Sender: TObject);<br />

begin<br />

if Player.PlayerMode=pmPaused then<br />

begin<br />

Player.Resume;<br />

Pauza.Caption:=’Pauza’;<br />

end<br />

else<br />

begin<br />

Player.Pause;<br />

Pauza.Caption:='Pokraèova ';<br />

end;<br />

end;<br />

Na zaèiatku rutiny program testuje, èi náhodou <strong>sk</strong>ladba už nie je prerušená. Ak prerušená<br />

je, program bude pokraèova v prehrávaní piesne. Obsah tlaèidla sa <strong>na</strong>staví <strong>na</strong><br />

„Pauza“, takže <strong>sk</strong>ladbu bude možné kedyko¾vek opä preruši . Ak po stlaèení tlaèidla „Pauza“<br />

<strong>sk</strong>ladba prerušená ešte nie je, kód ju preruší pomocou metódy Pause. Obsah tlaèidla<br />

sa následne vyplní textom „Pokraèova “.<br />

Spustenie prehrávania je otázkou iba nieko¾kých príkazov, ale aj <strong>na</strong>priek tomu bude<br />

potrebné vytvori špeciálnu procedúru, ktorá prehrávanie spustí. Prehrávanie totiž bude<br />

možné spusti z viacerých miest programu a bez použitia procedúry by sme nemali inú<br />

možnos ako viackrát <strong>sk</strong>opírova ten istý kód, èo je ve¾mi amatér<strong>sk</strong>e riešenie.<br />

Metóda, ktorá má <strong>na</strong> starosti spustenie prehrávania, vyzerá takto:<br />

procedure TPlayerWnd.PlayMP3(FileName:string);<br />

begin<br />

if (Player.PlayerMode=pmPlaying)<br />

or (Player.PlayerMode=pmPaused) then Player.Stop;<br />

with Player do<br />

begin<br />

Close;<br />

InputName:=FileName;<br />

Open;<br />

InitStream;<br />

Play;<br />

Pauza.E<strong>na</strong>bled:=true;<br />

end;//with<br />

end;<br />

Na zaèiatku procedúry zis ujeme, èi už náhodou prehrávaè nie je spustený èi pozastavený.<br />

Ak náhodou už spustený èi „pauznutý“ je, potom <strong>sk</strong>ladbu zastavíme a uzatvoríme<br />

prostredníctvom metódy Close. Nasleduje <strong>na</strong>stavenie vlastnosti InputName, èím vlastne<br />

dekodéru povieme, ktorý súbor má zaèa prehráva . Metódy Open a InitStream prehrávaè<br />

zinicializujú a metóda Play prehrávanie spustí. Ak sme pred volaním metódy PlayMP3<br />

náhodou prehrávanie zastavili tlaèidlom Stop, potom je tlaèidlo Pauza neprístupné. Len<br />

èo sa však zaène prehráva nová <strong>sk</strong>ladba, musí by toto tlaèidlo opä prístupné a práve to<br />

zabezpeèí posledný riadok procedúry. Spustenie prehrávania bude realizované prostredníctvom<br />

dvojitého kliknutia <strong>na</strong> playlist editor:<br />

procedure TPlayListWnd.PlayListDblClick(Sender: TObject);<br />

begin<br />

if PlayList.Items.Count=0 then exit;<br />

PlayerWnd.PlayMP3(PlayList.Items[PlayList.ItemIndex]);<br />

end;<br />

Táto krátka ruti<strong>na</strong> musí <strong>na</strong>j<strong>sk</strong>ôr zisti , èi sa vôbec v playlist editore <strong>na</strong>chádzajú nejaké<br />

súbory, až potom je totiž možné spusti prehrávanie. Názov <strong>sk</strong>ladby, ktorú budeme prehráva<br />

, zí<strong>sk</strong>ame tak, že pomocou vlastnosti ItemIndex zistíme index položky, ktorá je vyz<strong>na</strong>èená.<br />

Pomocou vlastnosti Items zistíme text tejto položky, èo je vlastne názov súboru MP3.<br />

NABUDÚCE. O mesiac budeme pokraèova v zdoko<strong>na</strong>¾ovaní nášho prehrávaèa<br />

MP3. Okrem iného si ukážeme, ako zo súboru MP3 zí<strong>sk</strong>ame údaje známe ako ID3 tag.<br />

Dovtedy dovidenia.<br />

Ivan Zernovác ml.<br />

Delphi v praxi / 9. èas : ID3 TAG v2 II.<br />

Táto èas bude zavàšením témy ID3 TAG, konkrétne ID3 TAG v2, jeho èítanie, mazanie,<br />

a zapisovania. Pretože èítanie a mazanie sme si dopodrob<strong>na</strong> prebrali v predchádzajúcej<br />

èasti, tentoraz sa budeme venova iba zápisu ID3 TAG v2. Odporúèam<br />

vám pri práci s týmto èlánkom používa aj dve predošlé èasti, ktoré boli zamerané <strong>na</strong><br />

túto tému. Sú v nich ukážky a výpisy zo súborov, ktoré <strong>na</strong>pomáhajú ¾ahšie pochopenie<br />

tejto nie jednoduchej témy. Aj vývoj takej jednoduchej veci, ako je opis súboru<br />

MP3, sa stále derie vpred a je len ve¾mi ažko možné zachyti to, èo je pre prax programátora<br />

<strong>na</strong>jdôležitejšie. Aj <strong>na</strong>priek mojej s<strong>na</strong>he <strong>na</strong>písa tieto èlánky èo <strong>na</strong>jjednoduchšie<br />

a <strong>na</strong>jlepšie sa mi niektoré pasáže zdajú fádne a neúplné. Keby sme sa chceli<br />

takejto téme venova úplne, do posledných detailov, potrebovali by sme minimálne<br />

desa èastí, ktoré by èasom strácali <strong>na</strong> pikantnosti informácií. A za ten èas by urèite<br />

vymysleli nieèo nové, také, èomu sa budeme len prizera s otvorenými ústami. Aj<br />

<strong>na</strong>priek tomu verím, že k tejto téme sa aspoò okrajovo vrátime v ïalších èlánkoch.<br />

Verím v to preto, lebo sme túto tému <strong>na</strong>ozaj iba <strong>na</strong>èali a bola by škoda nepokraèova<br />

v takej zaujímavej oblasti.<br />

ZÁPIS ID3 TAG V2. Je prezentovaný jednou procedúrou. Tá má síce ve¾a vstupných<br />

parametrov, ale je to vždy lepšie, ako keby bol každý parameter zapísaný zvláš ,<br />

èo by trvalo nekoneène dlho. Trinás vstupných parametrov, teda dvanás rôznych<br />

informácií a cesta k súboru MP3 je nosnou èas ou procedúry, ktorú si opíšeme.<br />

procedure setTag2(TENC, WXXX, TCOP, TOPE, TCOM, TCON, TYER, TRCK, COMM,<br />

TALB, TPE1, TIT2, File<strong>na</strong>me: string);<br />

var temp, f: file;<br />

i , read, write, tagleng, m: integer;<br />

ID3h, null: array [1..10] of char;<br />

IDb: array [1..15] of char;<br />

txt: array [1..300] of char;<br />

copy: array [1..2048] of char;<br />

begin<br />

assignfile(temp, file<strong>na</strong>me+ ‘a’);<br />

rewrite(temp, 1);<br />

Jadro procedúry tvorí: otvorenie, respektíve vytvorenie takzvaného doèasného súboru,<br />

ktorý sa od originálu líši pridaním (do názvu súboru) ¾ubovo¾ného z<strong>na</strong>ku, v mojom<br />

prípade ‘a’. Tento súbor nám poslúži <strong>na</strong> zápis celého ID3 TAG v2 a <strong>na</strong>koniec aj jadra<br />

súboru MP3. Doèasný súbor sa <strong>na</strong>koniec premenuje <strong>na</strong> pôvodný názov.<br />

tagleng:= length(TENC)+ length(WXXX)+ length(TCOP)+ length(TOPE)+<br />

length(TCOM)+ length(TCON)+ length(TYER)+ length(TRCK)+ length(COMM)+<br />

length(TALB)+ length(TPE1)+ length(TIT2)+ 147;<br />

ID3h[1]:= ‘I’;<br />

ID3h[2]:= ‘D’;<br />

ID3h[3]:= ‘3’;<br />

ID3h[4]:= #03;<br />

ID3h[5]:= #00;<br />

ID3h[6]:= #00;<br />

ID3h[7]:= chr(tagleng div 2097152);<br />

m:= (tagleng mod 2097152);<br />

ID3h[8]:= chr(m div 16384);<br />

m:= (m mod 16384);<br />

ID3h[9]:= chr(m div 128);<br />

m:= (m mod 128);<br />

ID3h[10]:= chr(m);<br />

blockwrite(temp, ID3h, 10);<br />

V predošlej èasti sme si iba zbežne prebrali hlavièku pre popis ID3 TAG v2. Povedali<br />

sme si, že zaèiatok popisu je daný trojmiestnym identifikátorom, a to ID3. Toto tvrdenie<br />

je síce pravdivé, ale v reálnom ponímaní <strong>sk</strong>reslené. Identifikátor má v <strong>sk</strong>utoènosti<br />

dåžku šiestich z<strong>na</strong>kov:<br />

Identifikator := ‘I’ + ‘D’ + ’3’ + #03 + #00 + #00;<br />

Ïalšie štyri bity sú hlavièkou dané <strong>na</strong> uchovanie informácie o dåžke ID3 TAG v2.<br />

Premenná tagleng je nosite¾om èíselnej hodnoty, ktorá vznikla sèítaním všetkých dåžok<br />

jednotlivých informácií, plus súèet všetkých bitov ID, zapísaných pred a za jednotlivými<br />

informáciami, èomu v tomto prípade zodpovedá hodnota 147. Ako sme si minule povedali<br />

o èítaní dåžky ID3 TAG v2, je daná mocni<strong>na</strong>mi èísla 128. Takto pripravená hlavièka<br />

je zapísaná do doèasného súboru.<br />

// ID3begin #00 #00 #00 dlzka #00 #00 #00<br />

// [1]-[4] - ID -identifikator<br />

idb[5]:= #00;<br />

idb[6]:= #00;<br />

idb[7]:= #00;<br />

// [8] - dlzka textu standardne +1<br />

idb[9]:= #00;<br />

idb[10]:= #00;<br />

idb[11]:= #00;<br />

idb[12]:= #00;<br />

idb[13]:= #00;<br />

idb[14]:= #00;<br />

idb[15]:= #00;<br />

142 PC REVUE 12/2001

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

Saved successfully!

Ooh no, something went wrong!