estoy armando mi primer sitio flash y tengo un problema que me tiene a maltraer. Para musicalizar el sitio tengo un reproductor de mp3 que se carga via XML y está ubicado en swf principal (todas las páginas son swfs independientes que se cargan en este principal). En una página del sitio hay wallpapers y mp3 que el usuario puede descargar. Previo a la descrga de los mp3 el usuario puede escuchar una muestra de los mismos. En este caso se deshabilita el sonido del mp3 player cargado via XML y doy al botón correspondiente un comando loadSound al clip de audio correspondiente a la muestra de mp3 a descargar. Hasta aquí no hay problema. El tema es que no encuentro la manera de volver a cargar el audio del mp3 player principal una vez que la muestra se ha reproducido. He intentado varias cosas entre ellas cargar la función unPauseIt en scope del mismo modo que doy la orden de pauseIt, pero no funciona. Otro problema que se presenta es el de restablecer el audio principal si el usuario sale de la página de descargas antes de que el clip de audio seleccionado haya terminado. De este modo al salir el clip se corta pero obviamente no se restablece el audio principal. Supongo que habría que definir en cada botón de navegación ubicado en swf principal una condición relacionada con chequear si el sonido del mp3 player se está reproduciendo o no. La verdad es que no he sabido resolverla. Muchas gracias por adelantado por cualquier ayuda.
Este es el código que se encuentra en un archivo de action scrip independiente y que se adjunta en el swf principal para manejar el mp3 player:
Código:
var s:Sound = new Sound(); s.onSoundComplete = playSong; s.setVolume(100); var sa:Array = new Array(); var cps:Number = -1; var pos:Number; var intervalId:Number = 0; function fadeVolumeOut():Void { var currVolume:Number = s.getVolume() - 4; s.setVolume(currVolume); if(currVolume <= 0){ clearInterval(intervalId); s.stop(); } } var xml:XML = new XML(); xml.ignoreWhite = true; xml.onLoad = function() { var nodes:Array = this.firstChild.childNodes; for(var i=0;i<nodes.length;i++) { sa.push(new Song(nodes[i].attributes.url, nodes[i].attributes.track, nodes[i].attributes.album)); } playSong(); } xml.load("songs.xml"); function playSong():Void { s = new Sound(); s.onSoundComplete = playSong; s.setVolume(100); mute.gotoAndStop("on"); if(cps == sa.length - 1) { cps = 0; s.loadSound(sa[cps].earl, true); } else { s.loadSound(sa[++cps].earl, true); } trackInfo.text = sa[cps].track + " - " + sa[cps].album; playPause.gotoAndStop("pause"); textPos = 0; } function pauseIt():Void { pos = s.position; s.stop(); } function unPauseIt():Void { s.start(pos/1000); } playPause.onRollOver = function() { if(this._currentframe == 1) this.gotoAndStop("pauseOver"); else this.gotoAndStop("playOver"); } playPause.onRollOut = playPause.onReleaseOutside = function() { if(this._currentframe == 10) this.gotoAndStop("pause"); else this.gotoAndStop("play"); } playPause.onRelease = function() { if(this._currentframe == 10) { this.gotoAndStop("playOver"); this._parent.pauseIt(); } else { this.gotoAndStop("pauseOver"); this._parent.unPauseIt(); } } next.onRollOver = function() { this.gotoAndStop("nextOver"); } next.onRollOut = next.onReleaseOutside = function() { this.gotoAndStop("next"); } next.onRelease = function() { this._parent.playSong(); } mute.onRollOver = function() { if(this._currentframe == 1) this.gotoAndStop("onOver"); else this.gotoAndStop("offOver"); } mute.onRollOut = mute.onReleaseOutside = function() { if(this._currentframe == 10) this.gotoAndStop("on"); else this.gotoAndStop("off"); } mute.onRelease = function() { if(this._currentframe == 10) { this.gotoAndStop("offOver"); s.setVolume(0); } else { this.gotoAndStop("onOver"); s.setVolume(100); } }
Este es el código que he puesto a cada botón que dispara la muestra de mp3 dentro de la página descargas y la función a ejecutarse al completar el sonido del clip
Código:
var sound:Sound = new Sound(); var scope:MovieClip = _root; clip1.onRelease = function():Void { scope.s = ("pauseIt"); sound.loadSound("clip1.mp3", true); _root.mute._visible = false; _root.next._visible = false; _root.playPause._visible = false; _root.trackInfo._visible = false; } s.onSoundComplete = function():Void { scope.s = ("unPauseIt"); _root.mute._visible = true; _root.next._visible = true; _root.playPause._visible = true; _root.trackInfo._visible = true; }