Végtelen hangloop Flash 8-ban: Sound osztály, attachSound és a kattanó MP3
Közzétéve:
Pár hónapja körbejárta az internetet egy rövid, végtelenített animáció egy póréhagymát pörgető lánnyal és egy finn népdalrészlettel. Engem nem is maga a dal fogott meg, hanem a technika. Egy 26 másodperces hurok szól órákon át, és nem hallani, hol ér véget és hol kezdődik újra. Megnéztem, hogyan lehet ezt Flash 8-ban rendesen megcsinálni, és több buktatót is találtam.
Hang a könyvtárból, nem az idővonalról
Az első ötlet az, hogy az ember az idővonal első képkockájára teszi a hangot, és a tulajdonságoknál beállítja az ismétlést. Ez rövid animációnál működik, de amint jelenetet váltasz vagy gotoAndPlay-jel ugrálsz, a hang elcsúszik, megduplázódik vagy elhallgat. Jobb, ha ActionScriptből vezéreljük:
- Importáld a hangot a könyvtárba (File → Import → Import to Library).
- A könyvtárban jobb klikk → Linkage, pipáld be az Export for ActionScript opciót, és adj neki azonosítót, például
hurok.
// az első képkockán (ActionScript 2.0)
var zene:Sound = new Sound(this);
zene.attachSound("hurok");
zene.setVolume(80);
zene.start(0, 999);
A start első paramétere az eltolás másodpercben, a második az ismétlések száma. A 999 egy 26 másodperces huroknál több mint hét óra, de ha valóban végtelen kell:
zene.onSoundComplete = function() {
this.start(0, 999);
};
Némítás és hangerő
var nemitva:Boolean = false;
nemitoGomb.onRelease = function() {
nemitva = !nemitva;
zene.setVolume(nemitva ? 0 : 80);
};
Az, hogy a hangerő 0, és nem stop(), szándékos: így a hurok közben tovább szól, és újra bekapcsolva ott folytatódik, ahol a kép tart. A zene nem kezdődik elölről.
Miért kattan a loop?
Ez volt a legtöbb fejtörést okozó rész. Ha a hurkot MP3-ként importálod, minden kör elején apró szünet vagy kattanás hallatszik. Az ok nem a Flashben van, hanem az MP3 formátumban. A kódoló a fájl elejére és végére néhány ezredmásodpercnyi csendet tesz (a keretméret és a kódoló késleltetése miatt), és ez a csend a hurokban már hallható.
A megoldás: a hurkot WAV (vagy AIFF) formátumban importáld, és a tömörítést a Flash végezze el exportáláskor. A könyvtárban a hang tulajdonságainál beállítható az MP3 tömörítés és a bitráta. Az így exportált hang hurkolva is zökkenőmentes. Ha csak MP3-ad van, egy hangszerkesztőben vágd le a csendet pontosan nullátmenetnél, és mentsd WAV-ba.
A betöltés
Egy 26 másodperces WAV 64 kbps-on tömörítve nagyjából 200 KB. Mivel a könyvtárban lévő, ActionScriptnek exportált elemek az első képkocka előtt töltődnek le, egy lassú kapcsolaton a felhasználó sokáig csak fehér képernyőt lát. A Linkage ablakban vedd ki az Export in first frame pipát, tedd a hangot egy későbbi képkockára egy nem látható klipben, és az első képkockákon legyen egy egyszerű betöltésjelző, amely a getBytesLoaded() és getBytesTotal() értékeit mutatja.