¿Qué código AS3 se usa para reproducir un sonido utilizando AS3?¿Cómo se reproduce un sonido en flash AS3 cuando termina?
Respuesta
var sound:Sound = whateverSoundYouNeedToPlay;
function playSound():void
{
var channel:SoundChannel = sound.play();
channel.addEventListener(Event.SOUND_COMPLETE, onComplete);
}
function onComplete(event:Event):void
{
SoundChannel(event.target).removeEventListener(event.type, onComplete);
playSound();
}
Esto no le proporcionará una reproducción perfecta y sin interrupciones, pero hará que el sonido emita un bucle.
var sound:Sound = new Sound();
var soundChannel:SoundChannel;
sound.addEventListener(Event.COMPLETE, onSoundLoadComplete);
sound.load("yourmp3.mp3");
// we wait until the sound finishes loading and then play it, storing the
// soundchannel so that we can hear when it "completes".
function onSoundLoadComplete(e:Event):void{
sound.removeEventListener(Event.COMPLETE, onSoundLoadComplete);
soundChannel = sound.play();
soundChannel.addEventListener(Event.SOUND_COMPLETE, onSoundChannelSoundComplete);
}
// this is called when the sound channel completes.
function onSoundChannelSoundComplete(e:Event):void{
e.currentTarget.removeEventListener(Event.SOUND_COMPLETE, onSoundChannelSoundComplete);
soundChannel = sound.play();
}
Si desea que el sonido de bucle muchas veces con una reproducción impecable, sin espacios en blanco, puede llamar
sound.play(0, 9999); // 9999 means to loop 9999 times
Pero todavía tendría que definir un detector soundComplete si quieres infinita reproducción después de la 9999.a jugada. El problema con esta forma de hacer las cosas es si tiene que pausar/reiniciar el sonido. Esto creará un canal de sonido cuya duración es 9999 veces más larga que la duración real del archivo de sonido, y la reproducción de llamada (duración) cuando la duración es más larga que la duración del sonido provoca un bloqueo horrible.
+1. El uso del parámetro de bucle es más simple y le ofrece mejores resultados como usted menciona. Si lo configuras en un número lo suficientemente grande, no es necesario que te preocupes por 'SOUND_COMPLETE'. Siendo un 'int', supongo que podría establecerlo en un valor máximo de 0x7fffffff ((2^31) - 1), que, para todos los propósitos prácticos, debería ser más que suficiente. –
"Mejor" es subjetivo en este caso. Mejor fidelidad de sonido, seguro, pero un dolor mucho más grande para trabajar si el sonido debe pausarse/reanudarse por cualquier motivo. – scriptocalypse
Bastante justo. Quise decir mejor en el sentido de reproducción sin espacios. –
Las otras respuestas son geniales; sin embargo, si no desea utilizar el código (por el motivo que sea), puede poner el sonido en un clip de película, establecer la propiedad del sonido en "Transmisión" y luego agregar tantos marcos como le gusta el clip de película para asegurarse de que se reproduce completamente.
Esto, por supuesto, es una forma menos preferida, pero para los animadores estoy seguro de que puede ser preferible en algunas situaciones (por ejemplo, cuando se sincroniza con animaciones de la boca que el animador quiere en bucle).
Para ampliar reproducción sin interrupciones @ de scriptocalypse un poco:
El problema de no tener reproducción sin interrupciones adecuada proviene de mp3 incluyendo información sobre el archivo, ya sea en la cabeza o la cola del archivo (etiquetas ID3, etc.), de ahí la pequeña pausa cuando tratas de recorrerlo. Hay algunas cosas que puede hacer dependiendo de su situación.
- Ignorelo, solo juegue normalmente, con una pequeña pausa al final de cada archivo. También puede tratar de enmascararlo con otro sonido (un beat drop yo), o fade out y fade in.
- Si sus sonidos están incrustados, y no transmiten, cree un archivo fla, arrastre su mp3 allí, y configúrelos para exportar (de la misma manera que agregaría un nombre de enlace para un MovieClip, etc.). Parece que cuando exporta sonidos como este, Flash tiene en cuenta la demora o la elimina cuando crea el objeto Sound. De cualquier forma, puedes hacer un simple
play()
pasando los loops que deseas para una reproducción sin espacios (he encontrado que usar un parámetroloops
es mejor que esperar en el eventoSOUND_COMPLETE
y reproducirlo de nuevo). - Puede probar algunas de las bibliotecas ogg para usar archivos .ogg en lugar de .mp3. Una simple búsqueda en google para "as3 ogg lib" le mostrará lo que necesita. Personalmente, me pareció un poco incómodo de usar, y no podía permitirme la sobrecarga añadida (a diferencia de la decodificación de mp3, que se realiza en el reproductor).
- Si sus archivos mp3 se están transmitiendo, la única forma de obtener una reproducción sin interrupciones es aplicarles capas. Determine el espacio (dependiendo de lo que utilizó para codificarlos, será diferente - mis archivos tienen un espacio de 330ms), y cuando lo alcanza, comience a reproducir la superposición. Es un dolor adecuado si te estás desvaneciendo, pero cuando funciona, funciona bastante bien. Peor de los casos, se termina con la situación (1)
import flash.media.Sound;
import flash.media.SoundChannel;
var mySound:Sound = new Bgm(); //Bgm() is the class of the internal sound which can be done in the library panel.
playSound();
function playSound():void
{
var channel:SoundChannel = mySound.play();
channel.addEventListener(Event.SOUND_COMPLETE, onComplete);
}
function onComplete(event:Event):void
{
SoundChannel(event.target).removeEventListener(event.type, onComplete);
playSound();
}
Esto funciona perfectamente.
No sé perfectamente, necesitas importar 'flash.events.Event'. Además, más importante aún, después del primer ciclo, parece que no puedo detener la música; Quiero detener la música y jugar un juego sobre el sonido. – audiFanatic
supongo que esto lo que busca en el caso de que el archivo de voz/música está en la biblioteca:
var mysound:my_sound = new my_sound();
mysound.play(0,2); // this will repeat the sound 2 times.
Esto parece haber funcionado para mí:
var nowTime:Number = (new Date()).time;
var timeElapsed:Number = nowTime - _lastTime;
_lastTime = nowTime;
_musicTimeElapsed+=timeElapsed;
if(_musicTimeElapsed >= _musicA.length - GAP_LENGTH)
{
_musicTimeElapsed = 0;
_musicA.play(0);
}
- 1. ¿Cómo se reproduce el sonido de la biblioteca en AS3?
- 2. Recibir notificaciones cuando se reproduce un sonido en OpenAL
- 3. ¿Cómo se reproduce el sonido TICK predeterminado?
- 4. Componente flash Flowplayer reproduce sonido pero no video
- 5. ¿Cómo se reproduce un sonido (alerta) en una aplicación java?
- 6. Método preferido para el bucle de sonido flash as3
- 7. ¿Cómo se reproduce el sonido cuando se hace clic en el botón en Android?
- 8. Determine cuándo se reproduce un sonido fuerte en C#
- 9. ¿Cómo se reproduce el sonido tap de iPhone?
- 10. Vsync en Flex/Flash/AS3?
- 11. ¿Cómo se reproduce el sonido lo antes posible?
- 12. ¿Enumerados en AS3/Flash/Flex?
- 13. HTML5 Audio - El sonido sólo se reproduce una vez
- 14. Reproduce el archivo de sonido cuando se hace clic en la imagen
- 15. Juego de dibujo Flash AS3
- 16. flash as3 check event listener
- 17. Inicio lento para AVAudioPlayer la primera vez que se reproduce un sonido
- 18. ¿Cómo se reproduce el sonido del clic del teclado en un teclado personalizado?
- 19. ¿Cómo se reproduce un archivo de sonido en una aplicación Metro de Windows 8 con WinRT?
- 20. cambiar la ruta de audio cuando se reproduce el audio
- 21. ¿Qué es dispatchEvent en Flash AS3?
- 22. Pruebas unitarias Código AS3 para Flash
- 23. iPhone: ¿Cómo se reproduce un sonido de notificación local alto independientemente de la configuración del volumen?
- 24. Flash as3 ¿Cómo elimino duplicados en una matriz?
- 25. ¿Cómo se detecta cuando un archivo de sonido ha terminado?
- 26. Marco de GUI para flash (as3)
- 27. Enviar matriz desde Flash (AS3) a JavaScript
- 28. ¿Cómo se reproduce un AudioClip largo?
- 29. ¿Reproduce el sonido predeterminado de notificaciones locales al mostrar UIAlertView?
- 30. Extraño Flash AS3 xml Comportamiento de socket
Usted probablemente debería aceptar la parte superior votada como correcta. – Zze