| 
                         // 保存 512 个声音波形的快照 
            private var bytes:ByteArray = new ByteArray(); 
            // SoundBar 的个数 
            private var barNum:uint = 64; 
            // 保存所有 SoundBar 的引用 
            private var soundBars:Array = new Array(); 
             
            //定时器 
            private var timer : Timer; 
             
            //Application的initialize初试化事件 
            private function init(event:Event):void 
            { 
                var loader:URLLoader = new URLLoader();  
                loader.load(new URLRequest(xmlPath));  
                loader.addEventListener(Event.COMPLETE,Xml_Complete); 
                 
                timer = new Timer(100); 
                timer.addEventListener(TimerEvent.TIMER,timerTick); 
                 
                var barWidth:Number = boxSoundBar.width*1.00/barNum; 
                // 初始化Canvas为音频条,放入舞台并加入数组 
                for (var i:uint = 0; i < barNum; i++)  { 
                   var soundBar:Canvas = new Canvas(); 
                   soundBar.width = barWidth; 
                   soundBar.height = boxSoundBar.height; 
                   soundBar.x = i * barWidth; 
                      soundBar.y =  0; 
var g:Graphics = soundBar.graphics; 
                   g.lineStyle(1,0x6688AA,1); 
                   g.beginGradientFill(GradientType.RADIAL,[0x33cc00,0x456628],[1,1],[0,255],null,SpreadMethod.REFLECT,InterpolationMethod.RGB,0); 
                   g.drawRect(0,0,soundBar.width,soundBar.height); 
                   g.endFill(); 
                   boxSoundBar.addChild(soundBar); 
                   soundBars.push(soundBar); 
                } 
// 隐藏一些内建的鼠标右键菜单项 
                this.contextMenu.hideBuiltInItems();  
                var contextMenuItem : ContextMenuItem = new ContextMenuItem("Powered By: Jonllen"); 
                contextMenuItem.enabled = false; 
                contextMenu.customItems.push(contextMenuItem); 
                this.contextMenu.customItems.push(contextMenuItem); 
                 
                //更改鼠标图标 
                CursorManager.setCursor(cursorHand); 
            } 
             
            //读取XML文件完成事件 
            private function Xml_Complete(event:Event):void  
            { 
                xml = new XML(event.target.data); 
                if(xml.item.length()>=1) 
                { 
                    listSong.dataProvider= xml.item.name; 
                    listSong.selectedIndex = 0; 
                    //手动触发List的Change事件 
                    listSong.dispatchEvent(new mx.events.ListEvent(Event.CHANGE, true, false)); 
                } 
            } 
             
            //List选择歌曲改变事件 
            private function Xml_Change(event:Event):void 
            { 
                currIndex = event.target.selectedIndex; 
                 
                timer.stop(); 
                 
                //停止声音文件的加载 
                if( song!=null ) 
                { 
                    //移除之前加载PROGRESS事件对songProgress进度条的控制 
                    song.removeEventListener(ProgressEvent.PROGRESS,songProgress_Change); 
                    if( song.isBuffering ) 
                        song.close(); 
                } 
                 
                song = new Sound(); 
                var url : String = xml.item[currIndex].url; 
                var source:URLRequest = new URLRequest(url); 
                song.load(source); 
                song.addEventListener(ProgressEvent.PROGRESS, songProgress_Change); 
                song.addEventListener(IOErrorEvent.IO_ERROR, songProgress_Error); 
                 
                position = 0; 
                songStart(); 
            } 
             
            //歌曲播放完成 
            private function songProgress_Complete(e:Event):void { 
                if(currIndex == xml.item.length()-1) { 
                    currIndex = 0; 
                }else { 
                    currIndex++; 
                } 
                listSong.selectedIndex = currIndex; 
                listSong.dispatchEvent(new mx.events.ListEvent(Event.CHANGE, true, false)); 
            } 
             
            //加载歌曲失败 
            private function songProgress_Error(e:IOErrorEvent):void { 
                Alert.show("文件不存在!","系统提示"); 
            } 
             
            //开始播放歌曲 
            private function songStart():void { 
                 
                if ( channel != null ){ 
                    channel.stop(); 
                } 
                 
                lblName.text = xml.item[currIndex].name; 
                channel = song.play(position,int.MAX_VALUE); 
                 
                var length :Number = song.length*song.bytesTotal/song.bytesLoaded; 
                var date : Date = new Date(); 
                date.time = length;                 
                var dt : DateFormatter = new DateFormatter(); 
                dt.formatString="NN:SS"; 
                var totalTime : String = dt.format(date); 
                 
                date.time = channel.position; 
                lblTime.text = dt.format(date) + " | " + totalTime; 
                lblStatus.text = "播放"; 
                 
                var soundcontrol : SoundTransform = channel.soundTransform; 
                soundcontrol.volume = volumeSlider.value; 
                channel.soundTransform= soundcontrol; 
                 
                timer.start(); 
                boxSoundBar.visible = true; 
            } 
             
            //停止歌曲播放 
            private function songStop():void { 
                timer.stop(); 
                position = 0; 
                boxSoundBar.visible = false; 
                lblTime.text = "00:00 |"+lblTime.text.split("|")[1]; 
                lblStatus.text = "停止"; 
                songSlider.value = songSlider.minimum; 
                songProgress.setProgress(songProgress.minimum,songProgress.maximum); 
                if ( channel != null ) 
                { 
                    channel.stop(); 
                } 
            } 
             
            //暂停歌曲播放 
            private function songPause():void { 
                if ( channel != null ){ 
                    timer.stop(); 
                    position = channel.position; 
                    channel.stop(); 
                    lblStatus.text = "暂停"; 
                } 
            } 
             
            //加载歌曲进度条显示 
            private function songProgress_Change(e:ProgressEvent):void { 
                var percent:int = Math.round(e.bytesLoaded * 100 / e.bytesTotal); 
                songProgress.setProgress(e.bytesLoaded,e.bytesTotal); 
            } 
             
            //定时器方法 
            private function timerTick( e:TimerEvent):void { 
                 
                if( channel!=null) { 
                     
                    var length :Number = song.length*song.bytesTotal/song.bytesLoaded; 
                    var date : Date = new Date(); 
                    date.time = length;                 
                    var dt : DateFormatter = new DateFormatter(); 
                    dt.formatString="NN:SS"; 
                    var totalTime : String = dt.format(date); 
                     
                    date.time = channel.position; 
                    lblTime.text = dt.format(date) + " | " + totalTime; 
                     
                    songSlider.value=100*channel.position/length; 
                    if( songSlider.value>=songSlider.maximum){ 
                        timer.stop(); 
                        songProgress_Complete(null); 
                        return; 
                    } 
                     
                    SoundMixer.computeSpectrum(bytes, false, 0); 
                    for (var i:uint = 0; i < barNum; i++)  { 
                       soundBars[i].scaleY = bytes.readFloat(); 
                    } 
                     
                } 
            } 
             
            //歌曲进度调整事件 
            internal function songSlider_Change(e:SliderEvent):void{ 
                timer.stop(); 
                if ( channel != null ){ 
                    var length :Number = song.length*song.bytesTotal/song.bytesLoaded; 
                    position = e.value*length/100; 
                    songStart(); 
                } 
            } 
             
            //声音大小调整事件 
            internal function changeVolume(evt:SliderEvent):void{ 
                if ( channel != null ){ 
                    var soundcontrol : SoundTransform = channel.soundTransform; 
                    soundcontrol.volume = evt.value; 
                    channel.soundTransform= soundcontrol; 
                } 
            } 
             
            //设置歌曲播放时间和总时间 
            private function setTimeStatus():void { 
                var length :Number = song.length*song.bytesTotal/song.bytesLoaded; 
                var date : Date = new Date(); 
                date.time = length;                 
                var dt : DateFormatter = new DateFormatter(); 
                dt.formatString="NN:SS"; 
                var totalTime : String = dt.format(date); 
                 
                date.time = channel.position; 
                lblTime.text = dt.format(date) + " | " + totalTime; 
            } 
             
        ]]> 
    </mx:Script> 
    <mx:HBox verticalGap="0" verticalAlign="middle" horizontalAlign="center"> 
        <mx:Canvas borderColor="#CCCCCC" borderStyle="solid"> 
            <mx:Label x="5" fontSize="18" y="10" text=""/> 
            <mx:HBox horizontalGap="0" verticalAlign="middle" 
                 x="5" y="39" visible="false"></mx:HBox> 
            <mx:ProgressBar label=""  
                mode="manual" textAlign="left"  
                labelPlacement="center" fontSize="3" x="10" y="97"  
                minimum="0" maximum="100" barColor="yellow" 
                trackColors="[white, haloSilver]"/> 
            <mx:HSlider styleName="song" value="0" 
                 showTrackHighlight="true" x="5" y="85" thumbDrag="songSlider_Change(event)" 
                 minimum="0" maximum="100"  
                 liveDragging="false" snapInterval="1"  toolTip="拖动调整播放进度"> 
            </mx:HSlider> 
            <mx:Label x="243" y="41" text=""/> 
            <mx:Label x="205" y="66" text="00:00 | 5:23"/> 
            <mx:Button x="10" y="124" label="Play"/> 
            <mx:Button x="74" y="124" label="Pause"/> 
            <mx:Button x="152" y="124" label="Stop"/> 
            <mx:HSlider styleName="volume" change="changeVolume(event)" 
                 showTrackHighlight="true" value="0.5" x="222" y="133" 
                  minimum="0" maximum="10" liveDragging="true" 
                   snapInterval="0.1" toolTip="音量调节" /> 
            <mx:Label x="308" fontSize="18" y="10" text="歌曲列表"/> 
            <mx:List alpha="0.25" x="308" y="43" 
                 change="Xml_Change(event)" toolTip="点击选择歌曲"></mx:List> 
        </mx:Canvas> 
    </mx:HBox> 
</mx:Application> 
                         (编辑:滁州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |