<meta http-equiv='pics-label' content='(pics-1.1 "http://www.icra.org/ratingsv02.html" comment "ICRAonline EN v2.0" l gen true for "http://interval.cz" r (nz 1 vz 1 lz 1 oz 1 cz 1) "http://www.rsac.org/ratingsv01.html" l gen true for "http://interval.cz" r (n 0 s 0 v 0 l 0))' />
<p id='prepend'>V p°edchozφch Φlßncφch jsme se postupn∞ probrali univerzßlnφm rozhranφm pro manipulaci se zvukem v mobilnφch telefonech Mobile Media API a proprietßrnφm rozhranφm firmy Nokia. V tomto Φlßnku stejn²m zp∙sobem projdeme proprietßrnφ °eÜenφ API dalÜφch v²robc∙, firem Siemens, Samsung a Motorola.</p>
<h3>Siemens</h3>
<p>Jak jsem uvedla <a href='http://interval.cz/clanek.asp?article=3250' title='Bittnerovß, Lucie Rut: J2ME v kostce - jak na zvuk I'>v prvnφm Φlßnku o zvuku</a>, v∞tÜina telefon∙ znaΦky Siemens obsahuje Φßst rozhranφ Mobile Media API (MMAPI) °eÜφcφ prßci se zvukem, jen toto rozhranφ schovßvß do jin²ch balφk∙, a to <code>com.siemens.mp.media</code> a <code>com.siemens.mp.media.control</code>. Krom∞ tohoto rozhranφ obsahujφ pro prßci se zvukem vÜechny telefony znaΦky Siemens jeÜt∞ t°i t°φdy v balφku <code>com.siemens.mp.game</code>. Jsou to t°φdy <code>Sound</code>, <code>Melody</code> a <code>MelodyComposer</code>. Tyto t°φdy jsou nezbytn∞ nutnΘ k p°ehrßnφ zvuku na starÜφch modelech telefon∙ znaΦky Siemens, jako jsou SL45i a M50, ale m∞ly by fungovat na vÜech modelech.</p>
<h4>P°ehrßnφ jednoho t≤nu</h4>
<p>K p°ehrßnφ jednoho t≤nu danΘ frekvence a dΘlky slou₧φ t°φda <code>Sound</code>. Tato t°φda mß jedinou metodu, kterß je statickß:</p>
<div class='sample'>
<span class='comment'>// P°ehrßnφ t≤nu s danou frekvencφ t≤nu v Hz a dΘlkou t≤nu
<br />// v milisekundßch, tohle je konkrΘtn∞ 2 vte°iny trvajφcφ komornφ A</span>
<br />Sound.playTone(440, 2000);
</div>
<h4>P°ehrßnφ melodie</h4>
<p>T°φda <code>MelodyComposer</code> je urΦena ke kompozici skladby. Za tφm ·Φelem definuje jako konstanty v²Üky t≤n∙ od A0 do do A4 (A0 odpovφdß naÜemu t≤nu malΘ A, tedy t≤nu s frekvencφ 220 Hz, kter² le₧φ v houslovΘm klφΦi na druhΘ pomocnΘ lince pod notovou osnovou).</p>
<br /><span class='comment'>// SpuÜt∞nφ p°ehrßvßnφ melodie. Metoda play neblokuje b∞h aplikace,
<br />p°ehrßvßnφ probφhß na pozadφ.</span>
<br />melody.play();
</div>
<p>P°ehrßvßnφ melodie lze zastavit p°φkazem <code>melody.stop()</code>. Pokud zaΦnete p°ehrßvat novou zvukovou ukßzku v dob∞, kdy jeÜt∞ hraje p°edchozφ zvukovß ukßzka, p°ehrßvßnφ starΘ ukßzky se ihned ukonΦφ a bude spuÜt∞na ukßzka novß.</p>
<p>T°φda <code>Melody</code> obsahuje pouze metody <code>play()</code> a <code>stop()</code>, nenabφzφ ₧ßdnou mo₧nost jak zjistit, zda zvukovß ukßzka jeÜt∞ hraje nebo u₧ skonΦila. Chcete-li po dobu b∞hu aplikace hrßt stßle dokola n∞jakou melodii, ukonΦete ji t≤nem <code>TONE_REPEV</code>.</p>
<p>Takto se vym∞nφ melodie v ji₧ existujφcφ instanci t°φdy <code>MelodyComposer</code>:</p>
<p>T°φda <code>MelodyComposer</code> obsahuje omezenφ na maximßlnφ dΘlku definice melodie. Tato maximßlnφ dΘlka se zjistφ metodou <code>maxLength()</code>, dΘlku aktußlnφ ukßzky vracφ metoda <code>length()</code>.</p>
<p>To jsou vÜechna kouzla, kterß se dajφ s t°φdami <code>Sound</code>, <code>Melody</code> a <code>MelodyComposer</code> provozovat. ÄßdnΘ vymo₧enosti, jako posluchaΦe udßlostφ nebo spouÜt∞nφ zvukov²ch ukßzek ve formßtech jako nap°φklad MIDI Φi WAV, zde nenajdete.</p>
<h3>Samsung</h3>
<p>Prßce se zvukem na telefonech znaΦky Samsung je snad jeÜt∞ jednoduÜÜφ. VÜe za°izuje t°φda <code>com.samsung.util.AudioClip</code>. Tato t°φda umo₧≥uje zjistit, zda je p°ehrßvßnφ zvuku implementovßno, a pokud ano, lze ovlßdat p°ehrßvßnφ zvukovΘ ukßzky nßsledujφcφmi metodami:</p>
<div class='list'>
<ul>
<li><em>play(int pocetOpakovani, int hlasitost)</em> - spustφ p°ehrßvßnφ, poΦet opakovßnφ ukßzky m∙₧e b²t Φφslo od 0 do 255 a hlasitost Φφslo od 0 do 5</li>
<li><em>pause()</em> - p°eruÜφ p°ehrßvßnφ</li>
<li><em>resume()</em> - pokraΦuje v p°ehrßvßnφ z mφsta, kde byla ukßzka p°eruÜena</li>
<li><em>stop()</em> - ukonΦφ p°ehrßvßnφ ukßzky a uvolnφ vÜechny zdroje</li>
</ul>
</div>
<p>Samsung neumφ p°ehrßvat vφce zvukov²ch ukßzek zßrove≥. Pokud v okam₧iku spuÜt∞nφ zvukovΘ ukßzky u₧ n∞jakß hraje, je tato hrajφcφ ukßzka nahrazena novou.</p>
<p>Pro specifikaci typu p°ehrßvanΘho zvuku obsahuje t°φda <code>AudioClip</code> ΦφselnΘ konstanty:</p>
<div class='list'>
<ul>
<li><em>TYPE_MMF</em> - hodnota 1</li>
<li><em>TYPE_MP3</em> - hodnota 2</li>
<li><em>TYPE_MIDI</em> - hodnota 3</li>
</ul>
</div>
<p>V API emulßtoru ale t°φda <code>AudioClip</code> tyto konstanty neobsahuje, proto je jist∞jÜφ mφsto nich pou₧φt Φφsla. TakΘ zatφm nemß smysl pou₧φvat jin² typ zvukovΘ ukßzky ne₧ MMF (formßt vyzvßn∞nφ na telefony Samsung), proto₧e zatφm jinΘ typy podporovßny nejsou, v²vojß°i si konstanty nejspφÜ p°ipravili pro p°φpad, ₧e by se jim cht∞lo p°ehrßvßnφ MP3 a MIDI implementovat v Jav∞ n∞kdy v budoucnosti.</p>
<p>P°ehrßnφ zvukovΘ ukßzky vypadß takto:</p>
<div class='sample'>
<span class='comment'>// Kontrola, zda je p°ehrßvßnφ zvuku implementovßno</span>
<br />if(AudioClip.isSupported()) {
<br /> <span class='comment'>// Vytvo°enφ instance t°φdy AudioClip s nastaven²m
<br /> typem ukßzky a cestou k ukßzce</span>
<br /> AudioClip clip = new AudioClip(1, "/ukazka.mmf");
<br /> <span class='comment'>// SpuÜt∞nφ ukßzky jedenkrßt s maximßlnφ hlasitostφ</span>
<br /> clip.play(1, 5);
<br />}
</div>
<h3>Motorola</h3>
<p>N∞kterΘ telefony znaΦky Motorola u₧ obsahujφ implementaci MIDP 2.0 (V300, V400, V500, V600), tak₧e u nich se k p°ehrßvßnφ zvuku pou₧ije MMAPI. N∞kterΘ z t∞ch telefon∙, kterΘ obsahujφ pouze implementaci MIDP 1.0, majφ navφc proprietßrnφ API od Motoroly, kterΘ usnad≥uje v²voj her a zßrove≥ obsahuje t°φdy pro p°ehrßvßnφ zvuku. Jsou to nap°φklad telefony C370, C450, C550. Na strßnkßch <a href='http://www.motocoder.com'>Motocoderu</a> najdete k jednotliv²m telefon∙m podrobnou dokumentaci.</p>
<p>T°φdy urΦenΘ k p°ehrßvßnφ zvuku se nachßzejφ v balφku <code>com.motorola.game</code> a jsou dv∞. T°φda <code>BackgroundMusic</code> reprezentuje hudbu na pozadφ aplikace a t°φda <code>SoundEffect</code> reprezentuje zvukov² efekt ve h°e. S t∞mito t°φdami se dßle pracuje s pou₧itφm metod t°φdy <code>GameScreen</code>:</p>
<div class='list'>
<ul>
<li><em>boolean soundEffectsSupported()</em> - vrßtφ "true", pokud je podporovßno p°ehrßvßnφ zvukov²ch efekt∙</li>
<li><em>boolean backgroundMusicSupported()</em> - vrßtφ "true", pokud je podporovßno p°ehrßvßnφ hudby na pozadφ</li>
<li><em>void playSoundEffect(SoundEffect efekt, int hlasitost, int priorita)</em> - spustφ zvukov² efekt. Hlasitost a priorita mohou b²t od 0 do 100. Pokud by m∞lo zßrove≥ hrßt vφce efekt∙, ne₧ za°φzenφ zvlßdß, p°ehraje se ten, kter² mß nastavenou vyÜÜφ prioritu. ZvukovΘ efekty hrajφ pouze tehdy, kdy₧ je jejich instance t°φdy <code>GameScreen</code> zobrazena na displeji.</li>
<li><em>void stopAllSoundEffects()</em> - zastavφ p°ehrßvßnφ vÜech zvukov²ch efekt∙ (net²kß se hudby na pozadφ)</li>
<li><em>void playBackgroundMusic (BackgroundMusic zvuk, boolean opakovat)</em> - spustφ p°ehrßvßnφ zvuku na pozadφ aplikace. Pokud u₧ n∞jak² zvuk na pozadφ hraje, je tφmto nahrazen, je-li parametr <code>zvuk</code> "null", je pouze prßv∞ p°ehrßvan² zvuk zastaven. Parametr <code>opakovat</code> urΦuje, zda se mß hrßt zvukovß ukßzka stßle dokola (true) nebo nikoli (false).</li>
</ul>
</div>
<h4>Zvuk na pozadφ</h4>
<p>Na pozadφ hry nebo aplikace m∙₧e b²t spuÜt∞n maximßln∞ jeden zvuk. Tento zvuk m∙₧e b²t ulo₧en v JAR souboru aplikace, nebo m∙₧e b²t na serveru a aplikace si jej stßhne s pou₧itφm protokolu HTTP. Implementovan² formßt je pouze MIDI 0 nebo 1.</p>
<p>Zvukov² efekt se spustφ analogicky jako zvuk na pozadφ.</p>
<h3>Zßv∞rem</h3>
<p>Tyto Φlßnky o zvuku nem∞ly ambice pokr²t ·pln∞ vÜechny znaΦky telefon∙, na kter²ch se dß potkat Java, ale mohli jste se v nich seznßmit s t∞mi nejrozÜφ°en∞jÜφmi znaΦkami v ╚echßch a p°ilehlΘm okolφ. Pokud se rozhodnete u₧ivatele n∞jakΘ aplikace obÜ¥astnit zvukov²mi efekty, urΦit∞ nezapome≥te na mo₧nost tyto efekty vypnout. Ud∞lßte tφm radost nejen Ükolßk∙m nudφcφm se na hodin∞ matematiky.</p>
<h3>Odkazy, zdroje</h3>
<div class='list'>
<ul>
<li><a href='http://java.sun.com/products/j2mewtoolkit/'>J2ME Wireless Toolkit</a> - obecn² emulßtor od firmy Sun</li>
<li><a href='http://www.motocoder.com/motorola/pcsHome.jsp'>Motocoder</a> - strßnky pro v²vojß°e pracujφcφ s telefony znaΦky Motorola</li>
<li><a href='http://developer.samsungmobile.com/eng/front_zone/bbs/bbs_main.jsp?p_menu_id=1500'>Samsung</a> - emulßtory a dalÜφ informace pro v²vojß°e pracujφcφ s telefony znaΦky Samsung</li>
<li><a href='https://communication-market.siemens.de/portal/main.aspx?pid=1'>Siemens</a> - portßl pro v²vojß°e pracujφcφ s telefony znaΦky Siemens</li>
<div class='page-right-box reading'><h3 title='NejΦten∞jÜφ Φlßnky za poslednφch 7 dn∙'>NejΦten∞jÜφ</h3><div class='page-right-box-in'><ul><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3549'>Hrßtky s okrajem textu v CSS</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3527'>Manußly aneb Jak jsem se nauΦil ned∞lat si starosti a mφt rßd internet</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3528'>PφÜeme pro web - odliÜte se od konkurence</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3546'>Zamezenφ vφcenßsobnΘho odeslßnφ formulß°e JavaScriptem</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3550'>Nßvrh aplikacφ v jazyce UML - textovß specifikace p°φpad∙ u₧itφ</a></li></ul></div></div><div class='page-right-box cauldron'><h3 title='Nejdiskutovan∞jÜφ Φlßnky za poslednφch 21 dn∙'>Diskuznφ kotel</h3><div class='page-right-box-in'><ul><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3533' title='(55 komentß°∙)'>Editory pro webdesignΘry - velk² programßtor</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3529' title='(40 komentß°∙)'>Zaklφnadla na spam</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3527' title='(22 komentß°∙)'>Manußly aneb Jak jsem se nauΦil ned∞lat si starosti a mφt rßd internet</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3517' title='(21 komentß°∙)'>PφÜeme pro web - podle Φeho se zßkaznφci rozhodujφ</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3549' title='(16 komentß°∙)'>Hrßtky s okrajem textu v CSS</a></li></ul></div></div>