<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" backgroundGradientAlphas="[1.0, 1.0]" 
    backgroundGradientColors="[#1A1A1A, #1A1A1A]" color="#FFFFFF" fontSize="12"
    creationComplete="eventoIniciar();" 
    xmlns:ns1="com.fangit.sonido.*" width="700" height="530" viewSourceURL="srcview/index.html">
    <mx:Script>
        <![CDATA[
            import mx.events.SliderEvent;
            import mx.managers.PopUpManager;
            import mx.controls.ProgressBar;
            private var clipSonido:Sound;
            private var pbCarga:ProgressBar;
            private var clipSonidoReproducir:SoundChannel;
            
            private function eventoIniciar():void {
                 Security.loadPolicyFile("http://www.danguer.com/crossdomain.xml");
            }
            
            private function reproducirAudio():void {
                if (clipSonido) {
                    //simplemente reproducir desde cero
                    iniciarReproduccionSonido();
                } else {
                    //cargar el sonido asi que mostrar una barra de progreso                                                        
                    var peticionWeb:URLRequest = new URLRequest('http://www.danguer.com/showcase/demos/flex2-Player/CodeMonkey.mp3');
                    
                    pbCarga = ProgressBar(PopUpManager.createPopUp(this, ProgressBar, true));                    
                    //centrar la barra de progreso
                    pbCarga.x = (this.systemManager.stage.width - pbCarga.width)/2.0;
                    pbCarga.y = (this.systemManager.stage.height - pbCarga.height)/2.0;
                    
                    //asignar una etiqueta mas "leible"
                    pbCarga.label = "Cargando MP3 %3%%";
                    
                    clipSonido = new Sound();
                    clipSonido.addEventListener(Event.COMPLETE, eventoAudioDescarga);
                    clipSonido.addEventListener(Event.SOUND_COMPLETE, eventoAudioReproduccionFinalizada);
                    clipSonido.load(peticionWeb);
                    
                    //asignarlo a la carga del sonido para que la barra de progreso se actualice
                    pbCarga.source = clipSonido;                     
                }
            }
            
            private function iniciarReproduccionSonido():void {
                this.btnReproducir.enabled = false;
                this.btnDetener.enabled = true;
                clipSonidoReproducir = clipSonido.play(0);
                
                //asignarlo a los visualizadores
                visualizadorNormal.procesar = true;
                visualizadorFourier.procesar = true;
            }
            
            private function eventoAudioDescarga(evento:Event):void {
                //se ha cargado el audio
                PopUpManager.removePopUp(pbCarga);
                iniciarReproduccionSonido();        
            }
            
            private function eventoAudioReproduccionFinalizada(event:Event):void {
                detenerAudio();
            }
            
            private function detenerAudio():void {
                if (clipSonidoReproducir) {
                    clipSonidoReproducir.stop();
                    clipSonidoReproducir = null;
                }
                
                this.btnDetener.enabled = false;
                this.btnReproducir.enabled = true;
                visualizadorNormal.procesar = false;
                visualizadorFourier.procesar = false;                
            }
            
            private function eventoCambioVolumen(evento:SliderEvent):void {
                if (clipSonidoReproducir) {
                    //hubo un cambio en el slider por lo que ajustar el sonido con un nuevo SoundTransform
                    var st:SoundTransform = new SoundTransform(evento.value, sldPan.value);
                    clipSonidoReproducir.soundTransform = st;
                }
                
            }
            
            private function eventoCambioPan(evento:SliderEvent):void {
                if (clipSonidoReproducir) {
                    //hubo un cambio en el slider por lo que ajustar el sonido con un nuevo SoundTransform
                    var st:SoundTransform = new SoundTransform(sldVolumen.value, evento.value);
                    clipSonidoReproducir.soundTransform = st;
                }
                
            }
            
        ]]>
    </mx:Script>
    <mx:HSlider x="218" y="88" id="sldPan" minimum="-1" maximum="1" value="0"  snapInterval="0.1" change="eventoCambioPan(event);" liveDragging="true"/>
    <mx:Label x="218" y="62" text="Pan"/>
    <mx:Button id="btnReproducir" x="25" y="17" label="Reproducir Audio" click="reproducirAudio();"/>
    <mx:Button id="btnDetener" x="177" y="17" label="Detener Audio" click="detenerAudio();" enabled="false"/>
    <mx:Label x="25" y="62" text="Volumen"/>
    <mx:HSlider x="25" y="88" id="sldVolumen" minimum="0" maximum="1"  snapInterval="0.1" value="1" change="eventoCambioVolumen(event);" liveDragging="true"/>
    <ns1:VisualizacionNormal id="visualizadorNormal" x="25" y="125" width="650" height="180"/>
    <ns1:VisualizacionFourier id="visualizadorFourier" x="25" y="332" width="650" height="180"/>
    
</mx:Application>