ActionScript - Audio y animación sincronizados

 
Vista:

Audio y animación sincronizados

Publicado por Mastropiero (1 intervención) el 05/08/2005 09:02:16
Buenas, tengo un problema con una película flash.

Tengo una animación hecha, y por otro lado tengo una pista de audio con los efectos de la animación (golpes, pasos, explosiones, etc.) El lío viene al sincronizarlo.

Lo que he hecho mediante el attachsound es controlar el sonido, he creado un botón de pausa y otro de play (sound.start, sound.play y demás).
El problema viene cuando le doy al botón de pausa, se para la música y la animación, almaceno en milisegundos el wav (sound.position) y al darle al play vuelvo a lanzar la música y la animación. Entonces comienza a desincronizarse.

Yo obtengo la posición de mi audio en milisegundos, pero por otro lado la orden sound.start hay que indicarla en segundos, con lo cual voy perdiendo sincronía cada vez que lo pauso.

¿A alguien se le ocurre alguna idea para que vaya sincronizado?

Muchas gracias.

P.D. He probado también con loadsound y es aún peor. Lo primero que hice fue meter la música en la línea de tiempo pero tampoco funciona, porque al ser sólo un corte de audio al pausarlo y volver a ponerlo en marcha al haber pasado el fotograma clave no vuelve a sonar el audio.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Sincronización de animación y pista de audio en Flash

Publicado por Alejandro (369 intervenciones) el 21/06/2023 21:58:29
Para lograr una sincronización adecuada entre la animación y la pista de audio en Flash, puedes considerar las siguientes opciones:

1. Utilizar la clase SoundChannel: En lugar de utilizar el método `attachSound` y controlar la reproducción del sonido directamente, puedes utilizar la clase SoundChannel para tener un mayor control sobre la reproducción y sincronización del audio. Aquí tienes un ejemplo de cómo hacerlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var sound:Sound = new Sound();
var channel:SoundChannel;
var isPlaying:Boolean = false;
var soundPosition:Number = 0;
 
// Cargar el audio
sound.load(new URLRequest("ruta_del_audio.mp3"));
 
// Función para iniciar la reproducción
function playSound():void {
    channel = sound.play(soundPosition);
    isPlaying = true;
}
 
// Función para pausar la reproducción
function pauseSound():void {
    if (isPlaying) {
        soundPosition = channel.position;
        channel.stop();
        isPlaying = false;
    }
}

En este ejemplo, se utiliza la clase Sound para cargar y reproducir el audio, y la clase SoundChannel para controlar la reproducción y pausa del sonido. Al llamar a la función `playSound`, se inicia la reproducción desde la posición almacenada en `soundPosition`. Al llamar a la función `pauseSound`, se detiene la reproducción y se almacena la posición actual en `soundPosition`.

2. Sincronizar la animación y el audio mediante eventos: En lugar de controlar la sincronización basándote únicamente en el tiempo de reproducción del audio, puedes utilizar eventos para sincronizar la animación con los efectos de sonido en momentos específicos. Por ejemplo, puedes disparar eventos en determinados fotogramas clave de la animación y reproducir los efectos de sonido correspondientes en esos eventos.

1
2
3
4
5
6
7
8
9
10
11
// Fotograma clave en la línea de tiempo de la animación
stop();
dispatchEvent(new Event("sonidoExplosion"));
 
// En el código de la escena o en el marco de código asociado a la animación
addEventListener("sonidoExplosion", reproducirExplosion);
 
function reproducirExplosion(event:Event):void {
    // Reproducir el efecto de sonido de la explosión
    // Puedes utilizar attachSound o la clase Sound para reproducir el audio correspondiente al efecto de sonido en este punto
}

En este ejemplo, se utiliza el evento "sonidoExplosion" para disparar la reproducción del efecto de sonido de la explosión en el momento adecuado de la animación.

Recuerda ajustar el código según tus necesidades específicas y adaptarlo a tu implementación particular.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar