flash actionscript-3 audio soundchannel

flash - Compruebe si SoundChannel está reproduciendo sonido



actionscript-3 audio (3)

¿Cómo verificar confiablemente si un SoundChannel todavía está reproduciendo un sonido?

Por ejemplo,

[Embed(source="song.mp3")] var Song: Class; var s: Song = new Song(); var ch: SoundChannel = s.play(); // how to check if ch is playing?


He hecho una pequeña investigación y no puedo encontrar una forma de consultar cualquier objeto para determinar si se está reproduciendo un sonido. Tendrás que escribir una clase contenedora y administrarla tú mismo, parece.

package { import flash.events.Event; import flash.media.Sound; import flash.media.SoundChannel; public class SoundPlayer { [Embed(source="song.mp3")] private var Song:Class; private var s:Song; private var ch:SoundChannel; private var isSoundPlaying:Boolean; public function SoundPlayer() { s = new Song(); play(); } public function play():void { if(!isPlaying) { ch = s.play(); ch.addEventListener( Event.SOUND_COMPLETE, handleSoundComplete); isSoundPlaying = true; } } public function stop():void { if(isPlaying) { ch.stop(); isSoundPlaying = false; } } private function handleSoundComplete(ev:Event):void { isSoundPlaying = false; } } }



Una de las maneras de comprobar si el sonido sigue sonando, y no utilizar ningún administrador, sería verificar la ubicación de SoundChannel en dos llamadas de escucha enterFrame consecutivas, si no coinciden, entonces el sonido aún se está reproduciendo.

private var oldPosition:Number; function onEnterFrame(e:Event):void { var stillPlaying:Boolean; var newPosition=soundChannel.position; if (newPosition-oldPosition>1) stillPlaying=true; else stillPlaying=false; oldPosition=newPosition; }