Comunidad de diseño web y desarrollo en internet online

fade out para sonido cargado con XML

Citar            
MensajeEscrito el 27 May 2008 10:03 pm
Para el sitio Flash que estoy armando tengo un reproductor de MP3 que se carga via XML y cuyo objeto es proveer la música de fondo durante la navegación. Mientras que esta música debe sonar (puede desactivarse) todo el tiempo, debe detenerse al acceder a una sección determinada del sitio. Con esto no hay problema. El tema es que necesito que el audio desaparezca en fade out, ya que debe ser reemplazado por otro de diferente carácter (que no está en el mismo playlist). El reemplazo se hace sin problemas pero no hay modo de que el audio saliente se vaya desvaneciendo. Probé una cantidad de scripts diferentes que he encontrado en este sitio y en otros también, pero ninguno funciona. Alguien tiene idea de como resolver esto? Gracias de antemano.

Por ultraviolet

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 May 2008 01:48 am
independientemente de que uses el XML para localizar los archivos, qué código usas para reproducir el sonido??

Por Stockman

Claber

145 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 May 2008 01:58 am
En este hilo se preguntó lo mismo. Aquí la respuesta
Para la próxima, por favor, busca antes de postear.

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

firefox
Citar            
MensajeEscrito el 28 May 2008 05:14 am
He probado con ese código pero no me funciona.

Por ultraviolet

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 May 2008 05:21 am
¿Cómo probaste? ¿Lo adaptaste (cambiando los nombres por los tuyos, colocándolo donde corresponde) o sólo copiaste y pegaste? Si es lo segundo lo más seguro es que no te funcione. En todo caso, como dice Stockman. Muéstranos el código que usas para reproducir el sonido a ver qué es lo que está pasando.

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

firefox
Citar            
MensajeEscrito el 28 May 2008 06:32 am
Sí obvio que cambié los nombres adaptándolos a los míos. Tengo un as file con todo el código del audio y es allí donde he colocado el código del fade out. El botón que dispararía el fade no está dentro de ese código en cuanto a que no está en la película principal. A ese botón para por ejemplo mutear el audio hay que anteponerle al nombre del sonido _root.
En el caso del botón, éste debe ir al frame 226 para reproducir la animación de salida de la película en la que estamos y dar la entrada a la película en la cual hay que cambiar el audio. Por este motivo el fade out debe dispararse desde aquí. Otra opción es que el fade out se produzca mientras se carga la película. En ese caso el código no estaría atado al botón sino al frame donde se carga la misma.

Código :

trigger.onRelease = function():Void {
    intervalId = setInterval(fadeVolumeOut, 100);
    gotoAndPlay(226);
}



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() - 5;
    s.setVolume(currVolume);
    if(currVolume <= 0){
         clearInterval(intervalId);
    }
}



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);
   }
}

Por ultraviolet

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 May 2008 06:32 pm
Sé que la pregunta era tonta, lo siento, pero la experiencia me ha dicho que normalmente lo "obvio" resulta ser lo "menos obvio", de ahí que preguntara.
Al parecer lo que tienes es un problema de ámbito. Haz la prueba agregando estas líneas:

Código :

//... al principio del código, declara una variable que apunte al objeto:
var scope:MovieClip = this;
...
//En el código del trigger:
trigger.onRelease = function():Void {
    scope.intervalId = setInterval(scope, "fadeVolumeOut", 100);
    gotoAndPlay(226);
}

Nos cuentas cómo te fue. Si no te va, dinos cuál es la ruta del trigger.

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

firefox
Citar            
MensajeEscrito el 28 May 2008 08:50 pm
Hola The Fricky! gracias por tu respuesta. Acabo de probarlo , pero no me anduvo. Hay una película principal llamada MAIN. Dentro de MAIN está la barra de navegación y el reproductor de mp3. Pulsado cada botón de la barra se carga el swf correspondiente a cada sección a través de MovieClipLoad. Al pulsar el botón "discos" se carga un swf correspondiente al principal de esa sección llamado DISCOSMAIN.swf. Dentro de DISCOSMAIN.swf hay una botonera que permite ver detalles de cada disco del artista en forma individual. Es decir al pulsar el botón "disco1" se carga en DISCOSMAIN el swf correspondiente llamado DISCO1.swf. Dentro de DISCO1 está el botón trigger, ya que desde ahí es posible acceder a "disco2", disco3", disco4, etc. sin volver a DISCOSMAIN. La música debe cambiar en "disco5" que es al cual el trigger apunta. Obviamente el botón trigger también aparece en DISCO2, DISCO3 y DISCO4. No sé si queda claro. Gracias por tu ayuda.

Por ultraviolet

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 May 2008 09:46 pm
En efecto, parece un problema de ámbitos. Deja ver si entendí la estructura:
Main -> contenedor de la sección -> Contenedor de DiscoX -> trigger.
Si es así, y el código se carga en Main, el valor de scope debería ser:

Código :

var scope:MovieClip = _parent._parent._parent;
//y lo demás...

Así, scope apuntará a la película principal (Main), que es donde está la variable intervalId y la función fadeVolOut

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

firefox
Citar            
MensajeEscrito el 28 May 2008 10:37 pm
Coloqué esa línea de código y tampoco andaba, entonces se me ocurrió reemplazar _parent._parent._parent por _root y ahora funciona perfectamente. Muchísimas gracias por ayudarme a resolver esto. :D

Por ultraviolet

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 May 2008 12:24 am
Bueno, se ve entonces que no capté bien la estructura (quizá me faltó o me sobró algún _parent). Yo no soy amigo de _root, por eso no te dije que lo colocarás. En cualquier caso, me alegra que lo hayas resuelto.

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

firefox
Citar            
MensajeEscrito el 08 Jun 2008 05:50 pm
Volviendo a este script. 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. La verdad es que no he sabido resolverla. Muchas gracias por adelantado por cualquier ayuda.

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;
            
}

[/flash]

Por ultraviolet

10 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.