Flash tiptrik – zvuky v externí knihovně

12.4.2007· Autor: Ondřej Brichta· Přidat komentář

Pokud načítáme zvuky z externích zdrojů, nemusíme se spoléhat pouze na MP3 formát, ale můžeme všechny zvuky vložit do jednoho SWF souboru, který budeme načítat jako knihovnu externích zvuků. Významným způsobem tak zmenšíme velikost hlavní aplikace.

Zvuky potřetí

Máme zde další článek, který se zabývá práci se zvuky, přesněji možnostmi načítání zvuků z externích zdrojů. V minulém článku jsme si ukázali možnost načítání externích zvuků, které byly uloženy v MP3 formátu (http://www.flash.cz/portal/clanek.aspx?id=735). Toto je užitečná varianta, pokud chceme přehrávat delší doprovodné skladby.

Představme si ale situaci, kdy chceme ve flashové prezentaci přehrávat i kratší zvuky, nejrůznější zvukové efekty, krátké úryvky mluveného slova apod. Navíc chceme nechat na uživateli, aby se sám rozhodnul, jestli chce zvuky a nebo si je nepřeje přehrávat. Bylo by celkem zbytečné, aby uživatel musel stahovat s aplikací i zmíněné zvuky efektů, které vlastně ani nepotřebuje. Na druhou stranu bychom potřebovali zajistit, že v případě že uživatel chce zvuky, bude je mít k dispozici všechny a nebude muset během práce s naší aplikací další zvuky stahovat.

Nabízí se dvě varianty řešení. První je vytvoření dvou verzí aplikace, kde jedna běží se zvuky a druhá je vytvořená bez zvukových efektů. Ale proč vytvářet dvě aplikace, když vše může být součástí jedné?

Práce se zvuky z knihovny

Druhým, mnohem lepším řešením je vytvoření SWF souboru, který bude obsahovat všechny zvuky, se kterými chceme pracovat. Využijeme přitom metody „AttachSound", která umožňuje pracovat se zvuky., které máme uloženy v knihovně symbolů.

Metoda „AttachSound" připojí zvuk z knihovny k objektu třídy „Sound" a umožní nám s ním plnohodnotně pracovat. Abychom ale mohli se zvuky v knihovně symbolů pracovat, musíme u každého zvuku nastavit, že bude exportovaný jako součást SWF souboru. V opačném případě by při exportu SWF soubor požadovaný zvuk neobsahoval.

Export zvuku nastavíme tak, že v knihovně symbolů klikneme pravým tlačítkem myši na zvuk a zvolíme položku „Linkage"

linkage

Do políčka „Identifier" doplníme ID zvuku, pod kterým s ním budeme pracovat pomocí ActionScriptu.

linkage


Přehrávání zvuků

Pokud provedeme zmíněné nastavení, můžeme kdekoliv v aplikaci použít tento skript, pro přehrávání zvuku z knihovny:

zvuk = new Sound();
zvuk.attachSound("zvuk1");
zvuk.start(0, 1);

Nejprve vytvoříme objekt „zvuk" třídy „Sound" a poté k němu připojíme pomocí metody „AttachSound" zvuk z knihovny symbolů. V dalších krocích můžeme již plně využívat všech funkcí, které nám třída „Sound" nabízí - např. přehrávání pomocí metody „start".

 

Knihovna v externím SWF souboru

V okamžiku, kdy vyčleníme zvuky do externího SWF souboru, vznikne zde drobný problém s možností jejich přehrávání. Pokud do hlavní aplikace načteme SWF soubor se zvuky a použijeme výše zmíněnou metodu „AttachSound", přehrávání zvuků bude neúspěšné. Řešení tohoto „problému" je ale velice rychlé. Pokud načítáme externí SWF soubor se zvuky do nějakého MovieClipu, použijeme při konstrukci objektu třídy „Sound" tento zápis:

zvuk = new Sound(instance_mc);
zvuk.attachSound("zvuk1");
zvuk.start(0, 1);

Jediná změna je v dodatečném parametru při konstrukci „Sound" objektu. Tímto parametrem je instance MovieClipu, do kterého externí SWF soubor se zvuky načítáme. Pak již metoda „AttachSound" funguje správně. Celý skript načtení SWF souboru a přehrání jedné skladby z knihovny bude vypadat takto:

load_listener = new Object();
load_listener.onLoadStart = function() {
 trace("Načítání zvuků bylo spuštěno");
};
load_listener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number) {
 trace("Do: "+target+" načteno "+Math.round((bytesLoaded/bytesTotal)*100)+" %");
};
load_listener.onLoadComplete = function() {
 trace("Zvuky načteny");
};
load_listener.onLoadInit = function() {
 trace("Zvuky připraveny");
 zvuk = new Sound(snd);
 zvuk.attachSound("zvuk1");
 zvuk.start(0, 1);
};
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(load_listener);
mcLoader.loadClip("zvuky.swf", snd);

V ukázce si všimneme, že přehrávání zvuku je vytvořeno až v události „onLadInit", která detekuje připravenost nečteného SFW souboru. Nesmíme zapomenout, že událost „onLoadComplete" pouze určuje dokončení načítání, ovšem inicializace načteného MC ještě neproběhla.

Dále si všimneme, že i pokud načítáme SWF soubor se zvuky z lokálního disku, neproběhne toto načtení ihned, ale s určitou prodlevou. Proto je vhodné připojit detekci načtení i do offline aplikací.

trace

Ondřej Brichta Vývojář multimediálních aplikací, šéfredaktor Flash.cz, školitel produktů Flash, Flex, Flash Media Server

Web: http://www.obria.cz |

Motto: <°))))><

Seriál: Tipy a triky

Tipy a triky je seriál zaměřený na zajímavá řešení a vylepšení flashových aplikací

Komentáře k článku  

Přihlášení uživatele