Un sonido luego de otro
Posted by Andrés Argüello Pittjun 19
El año pasado hice un trabajo donde se necesitaba que se reproducieran unas imágenes y al mismo tiempo se escuchara una voz en voz describiendo la imagen.
El tema que eran varia galerÃas que eran cambiadas dinámicamente por lo que se requerÃa que ésta pseudo pelÃcula se generara en tiempo de ejecución.
El tema estaba en precargar todas las imágenes y todas los sonidos para que no haya pausas entre imagen e imagen.
Precargar la imágenes es relativamente facil ya que podes cargarlas usando un loadClip ya que son guardadas automáticamente en el caché.
El tema son los sonidos, como asegurarse que los sonidos son precargados de forma que no haya pausas. Hay un par de formas de hacerlo la que me resultó más práctica a mi fue:
La forma normal serÃa, manual y estática serÃa:
import flash.media.Sound; import flash.media.SoundChannel; var mySoundOne:Sound = new SoundOne(); var mySoundTwo:Sound = new SoundTwo(); var mySoundThree:Sound = new SoundThree(); var mySoundChannel:SoundChannel = mySoundOne.play(); mySoundChannel.addEventListener(Event.SOUND_COMPLETE, sound_1_Complete); var mySoundChannel2:SoundChannel; var mySoundChannel3:SoundChannel; function sound_1_Complete(event:Event):void { Â Â trace("one complete"); Â Â mySoundChannel2 = mySoundTwo.play(); Â Â mySoundChannel2.addEventListener(Event.SOUND_COMPLETE, sound_2_Complete); } function sound_2_Complete(event:Event):void { Â Â trace("two complete"); Â Â mySoundChannel3 = mySoundThree.play(); Â Â mySoundChannel3.addEventListener(Event.SOUND_COMPLETE, sound_3_Complete); } function sound_3_Complete(event:Event):void { Â Â trace("three complete"); }
Hasta acá todo fácil, lo que fue una novedad para mi es que es posible meter objetos dentro de arrays, por lo que cree un array con sonidos (objetos) adentro y fui cargando un sonido después del otro, de forma que era automatizado, dinámico y que podÃa ser cambiado en tiempo de ejecución sin problemas.
var sounds:Array = [new SoundOne(), new SoundTwo(), new SoundThree()]; var channels:Array; channels[0] = Sound(sounds[0]).play(); SoundChannel(channel[0]).addEventListener(Event.SOUND_COMPLETE, playNext); function playNext(e:Event):void { var index:Number = channels.indexOf(e.currentTarget); trace("played sound " + (index + 1)); if(index < sounds.lenth - 1) { index++; channels[index] = Sound(sounds[index]).play(); SoundChannel(channels[index]).addEventListener(Event.SOUND_COMPLETE, playNext); } } sounds.push(new SoundFour()); // sólo habrÃa que asegurarse de llamar a esto antes que el sonido cuatro termine de reproducirse

No hay comentarios