¿Cómo puedo meter una imagen de un cargador al intentar escuchar un fragmento de canción?

Estoy intentando hacer una página donde se puedan escuchar trozos de canciones apretando sus botones correspondientes.
Cuando se hace clic en uno, se carga su fichero mp3 correspondiente mediante:
Música. LoadSound("cancion.mp3", false);
dentro del handler on(press), habiendo creado "musica" como un objeto Sound() antes:
musica = new Sound();
Luego, apretando en un botón play, se reproduce la canción descargada con:
musica.start(0,0);
Bien, pues hasta aquí todo va bien. Pero he intentado meterle un cargador para que la gente sepa cómo va la carga y cuándo se ha cargado totalmente, pero no me funciona.
La barra de carga es una instancia llamada "insBarraCarga", y el manejador de eventos de los botones de carga para cada canción lo he hecho así:
on (press) {
musica = new Sound();
// pongo la barra de carga a 0. Esto va bien.
var porcentaje = 0;
insBarraCarga._xscale = porcentaje;
musica.loadSound("cancion.mp3",false);
while (musica.getBytesLoaded() < musica.getBytesTotal()) {
porcentaje = (100 * musica.getBytesLoaded()) / musica.getBytesTotal();
insBarraCarga._xscale = porcentaje;
}
}
He hecho pruebas con "trace" y texto dinámico para controlar los valores de bytes totales y cargados, y cuando hago la prueba localmente, los valores funcionan, es decir, el núimero de bytes totales me da bien.
Pero cuando lo pruebo desde mi host, el valor de bytes totales no me aparece en mi texto dinámico, y el de bytes cargados me da 0, aunque ya se haya cargado la canción que sea.
Bueno, para aclarar más las cosas, decirte que se me ha olvidado mencionar que la barra de carga se queda reducida a 0 en su escala horizontal, y que al parecer no entra en el bucle "while", porque si no, la barra cambiaría de escala.
Lo del trace y texto dinámico son otras líneas de código que no he incluido para no marear más.
¿Podrías echarme una mano y explicarme a qué se debe esto?

1 respuesta

Respuesta
1
Date cuenta que el Flash el refresco de los objetos se hace al finalizar cada frame y tu estas metiendo a través de un while el preload. Ese tipo de metodología sería válida en Visual Basic, por ejemplo, pero no en flash.
La solución a tu problema pasa por hacer un un clip de código.
En tu peli principal declara una variable y llamala, por ejemplo cargacancion
var cargacancion="";
Ahora vamos a crear el clip de código que hara el preload de tu canción
Codigo Frame 1
--------------
stop()
Código Frame 2
--------------
musica = new Sound();
// pongo la barra de carga a 0
var porcentaje = 0;
musica.loadSound(_root.cargacancion,false);
Código Frame 3
--------------
porcentaje = (100 * musica.getBytesLoaded()) / musica.getBytesTotal();
_root.insBarraCarga._xscale = porcentaje
Codigo Frame 4
--------------
if (musica.getBytesLoaded() < musica.getBytesTotal()) {
gotoAndPlay(3)
}
Código Frame 5
--------------
Aquí la música estaría cargada ya. Puedes hacer un gotoAndPlay donde quieras que salte tu animación.
Este clip lo colocas en tu película y le pones un nombre de instancia por ejemplo loadsong. Ahora queda por asignar las acciones al botón
on(press) {
_root.cargacacion="micancion.mp3";
_root.loadsong.gotoAndPlay(2);
}
Estudia bien el código. Lo he hecho a ciegas a si que revisa bien todo y quedate con lo importante. Utilizar clips de código.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas