校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Flex播放器(實現(xiàn)播放、緩沖進度條和音頻曲線顯示)

Flex播放器(實現(xiàn)播放、緩沖進度條和音頻曲線顯示)

熱門標簽:車載電話機器人 廣州ai外呼系統(tǒng)業(yè)務 南昌crm外呼系統(tǒng)如何 外呼系統(tǒng)號碼顯示 天津企業(yè)外呼系統(tǒng)代理商 中山外呼系統(tǒng)中間件 地圖標注多家店 無錫電銷外呼系統(tǒng)代理 什么行業(yè)需要電話機器人

一時興起,玩起了Flex,本來還想要做個Flex博客,不過目前還只能在里面樹個公告。。。沒辦法做完啊,河蟹的個杯具的!Flex布局不像是CSS,精美Flash動畫不是拖一個兩個控件就能做出來滴,而是一筆一條線繪制出來滴!這些我都還不熟悉,所有折騰快一個星期了,每天都是搞到頭大才睡覺,今天終于能出一個簡單的播放器。

一直很喜歡音樂這個東西,喜歡Jay,更喜歡他的歌,也很崇拜小豬,他的一段灰色空間曾讓我激流奮進,想過自己能做個播客放自己喜歡聽的歌曲,出于自戀那樣會更有一點點滿足感。呃~走神了,前二天無意看到一群教師的個人博客,深深的被他們的博文所吸引,無論是談技術還是記錄生活的,寫得都是那么的真切,還有堅持每日一博的,堅持不放棄...

mx:ProgressBar實現(xiàn)加載歌曲緩沖進度條

ProgressBar有三大mode模式,分別為event、manual、polled,event為基于事件驅動模式,可設置source對象自動顯示加載進程;manual為手動模式,需要調用ProgressBar.setProgress()方法設置滾動條進度;polled為輪詢模式,本例使用的manual模式,Sound加載load請求歌曲添加一個ProgressEvent.PROGRESS處理中監(jiān)聽事件,然后根據(jù)Sound已加載的bytes和bytesTotal數(shù),設置setProgress進度。這里需要注意在切換歌曲的時候先要移除ProgressEvent.PROGRESS事件,否則之前播放歌曲還未加載完又切換load新歌曲時回出現(xiàn)ProgressBar觸發(fā)多個PROGRESS事件被設置進度出現(xiàn)來回滾動的問題。

mx:HSlide調節(jié)滑稈

這個控件在本例中2處使用,實現(xiàn)對播放進度和聲音大小的控制。最一開始調整播放進度的問題難倒了我很久,因為在歌曲播放過程中HSlide要自動滑動當前播放位置,同時又需要能手動拖動播放位置,HSlide本來有一個很好的change事件用來偵聽改變,但是我使用定時器設置HSlide的value的時竟然也給我觸發(fā)change事件,參考了Adobe哥官網(wǎng)的幫助文檔,說是Slider 組件的值因鼠標或鍵盤交互操作而改變時調度,如果 liveDragging 屬性是 true,則在用戶移動滑塊時持續(xù)調度該事件。 如果 liveDragging 是 false,則在用戶釋放滑塊時調度該事件。但是無論我怎么設置,在代碼里改變了HSlide的value值怎會觸發(fā)change事件,不是說在用戶交互操作而改變時調度嗎?無賴啊,后來只能折中采取監(jiān)聽thumbDrag滑稈拖動時事件,這個事件Adobe哥的解釋是當按下滑塊并隨后隨鼠標移動時調度,這樣會有一個小問題,就是需要拖動滑稈按下時才會觸發(fā),點擊無效。

SoundMixer.computeSpectrum()分析音頻曲線

本例你看到顯示的音頻曲線其實是右64個繪制成條狀的Canvas控件排列而成,然后使用定時器每間隔100毫秒重新設置他們的scaleY位置以呈現(xiàn)出變幻曲線的效果,代碼只有三行很簡單,具體可參見我下面源碼給出的timerTick事件。這里為什么要用定時器呢?在網(wǎng)上看別人是監(jiān)聽Event.ENTER_FRAME事件重繪音頻曲線的,不想搞那么麻煩就直接用定時器了,隨便根據(jù)bytesTotal和bytesLoaded計算下歌曲播放時間,使用100毫秒的定時器也并好耗站資源,CPU沒有漲很高。

效果圖:

mxml代碼如下:

復制代碼 代碼如下:

?xml version="1.0" encoding="utf-8"?>
mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" verticalGap="0" scroll="false" backgroundAlpha="0"
     horizontalScrollPolicy="off" verticalScrollPolicy="off" verticalAlign="middle" horizontalAlign="center"
     initialize="init(event)" layout="vertical" fontSize="14" paddingLeft="0" paddingTop="0" paddingRight="0" paddingBottom="0" >
    mx:Script>
        ![CDATA[
            import mx.formatters.DateFormatter;
       
            import mx.effects.SoundEffect;
            import mx.events.SliderEvent;
            import mx.core.SoundAsset;
       
            import mx.controls.Alert;
            import mx.managers.CursorManager;
            import flash.media.*;
           
            import flash.utils.Timer;
           
            [Embed(source="images/cursor.gif")]
            private var cursorHand : Class;//圖標
           
            private var xml:XML;
            private var xmlPath:String = "/flex/bin-debug/song.xml";
            private var currIndex : Number = 0;
           
            private var song :Sound;
            private var channel :SoundChannel;
            private var position : Number = 0;

            // 保存 512 個聲音波形的快照
            private var bytes:ByteArray = new ByteArray();
            // SoundBar 的個數(shù)
            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為音頻條,放入舞臺并加入數(shù)組
                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);
                }

                // 隱藏一些內(nèi)建的鼠標右鍵菜單項
                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;
                    //手動觸發(fā)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("文件不存在!","系統(tǒng)提示");
            }
           
            //開始播放歌曲
            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 width="100%" verticalGap="0" verticalAlign="middle" horizontalAlign="center">
        mx:Canvas width="440" borderColor="#CCCCCC" borderStyle="solid" height="171">
            mx:Label id="lblName" x="5" fontSize="18" y="10" text=""/>
            mx:HBox id="boxSoundBar" horizontalGap="0" verticalAlign="middle"
                 width="192" height="50" x="5" y="39" visible="false">/mx:HBox>
            mx:ProgressBar id="songProgress" label=""
                width="290" height="3" mode="manual" textAlign="left"
                labelPlacement="center" fontSize="3" x="10" y="97"
                minimum="0" maximum="100" barColor="yellow"
                trackColors="[white, haloSilver]"/>
            mx:HSlider id="songSlider" styleName="song" value="0"
                 showTrackHighlight="true" x="5" y="85" thumbDrag="songSlider_Change(event)"
                 width="300" height="22" minimum="0" maximum="100"
                 liveDragging="false" snapInterval="1"  toolTip="拖動調整播放進度">
            /mx:HSlider>
            mx:Label id="lblStatus" x="243" y="41" text=""/>
            mx:Label id="lblTime" x="205" y="66" text="00:00 | 5:23"/>
            mx:Button x="10" y="124" label="Play" click="songStart()"/>
            mx:Button x="74" y="124" label="Pause" click="songPause()"/>
            mx:Button x="152" y="124" label="Stop" click="songStop()"/>
            mx:HSlider id="volumeSlider" styleName="volume" change="changeVolume(event)"
                 showTrackHighlight="true" value="0.5" x="222" y="133"
                  width="81" minimum="0" maximum="10" liveDragging="true"
                   snapInterval="0.1" toolTip="音量調節(jié)" />
            mx:Label x="308" fontSize="18" y="10" text="歌曲列表"/>
            mx:List id="listSong" alpha="0.25" x="308" y="43" height="116"
                 change="Xml_Change(event)" width="130" toolTip="點擊選擇歌曲">/mx:List>
        /mx:Canvas>
    /mx:HBox>
/mx:Application>

您可能感興趣的文章:
  • 超級REAL視頻播放器
  • 網(wǎng)頁視頻播放器程序代碼(通用代碼)
  • asp 網(wǎng)頁視頻播放器程序代碼(通用代碼),支持avi,wmv,asf,mov,rm,ra,ram等
  • flvplayer.swf flv視頻播放器使用方法
  • vbs sendKeys 16進制的結合使用(打開IE,靜音,打開播放器等)
  • (jsp/html)網(wǎng)頁上嵌入播放器(常用播放器代碼整理)
  • JS HTML5 音樂天氣播放器(Ajax獲取天氣信息)
  • android暫停或停止其他音樂播放器的播放實現(xiàn)代碼
  • android webvie指定視頻播放器播放網(wǎng)站視頻
  • asp.net實現(xiàn)在線音樂播放器示例
  • PHP實現(xiàn)使用優(yōu)酷土豆視頻地址獲取swf播放器分享地址
  • 基于C#的音樂播放器主Form實現(xiàn)代碼
  • javascript實現(xiàn)簡單的html5視頻播放器
  • 基于Flowplayer打造一款免費的WEB視頻播放器附源碼

標簽:呂梁 佛山 泰州 仙桃 欽州 海西 攀枝花 滄州

巨人網(wǎng)絡通訊聲明:本文標題《Flex播放器(實現(xiàn)播放、緩沖進度條和音頻曲線顯示)》,本文關鍵詞  Flex,播放器,實現(xiàn),播放,緩沖,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Flex播放器(實現(xiàn)播放、緩沖進度條和音頻曲線顯示)》相關的同類信息!
  • 本頁收集關于Flex播放器(實現(xiàn)播放、緩沖進度條和音頻曲線顯示)的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲欧洲日韩av| 久久亚洲春色中文字幕久久久| 成人一区二区三区视频| 国产麻豆精品theporn| 国产高清精品久久久久| 国产suv一区二区三区88区| 国产精品99久久久久久宅男| 福利视频网站一区二区三区| 懂色中文一区二区在线播放| 99免费精品视频| 色悠悠久久综合| 欧美精品粉嫩高潮一区二区| 欧美精品一区二区三区在线| 精品sm在线观看| 久久久久99精品国产片| 亚洲欧洲色图综合| 亚洲一区二区三区免费视频| 毛片一区二区三区| 国产精品一区二区91| 色老综合老女人久久久| 欧美高清视频不卡网| 欧美不卡123| 一区二区三区在线免费视频| 日韩精品成人一区二区在线| 国产伦精品一区二区三区免费| 99视频超级精品| 欧美一区二区免费| 国产精品美女久久久久av爽李琼| 亚洲国产日韩av| 国产一区在线观看麻豆| 色婷婷av久久久久久久| 精品国产成人在线影院| 一区二区三区高清在线| 蜜桃精品在线观看| 色婷婷久久一区二区三区麻豆| 欧美一级片在线| 136国产福利精品导航| 视频一区视频二区在线观看| 成人av影院在线| 制服丝袜成人动漫| 自拍偷自拍亚洲精品播放| 手机精品视频在线观看| 成人的网站免费观看| 欧美一区午夜视频在线观看| 日韩美女精品在线| 国产a久久麻豆| 欧美r级电影在线观看| 亚洲影院免费观看| 99久久er热在这里只有精品66| 日韩欧美一二三| 天堂午夜影视日韩欧美一区二区| 成人av午夜电影| 精品av久久707| 男男视频亚洲欧美| 欧美日韩一级视频| 一区二区三区在线观看国产| 成人app在线观看| 久久久久久麻豆| 麻豆成人久久精品二区三区小说| 欧美性一级生活| 亚洲精品国产精品乱码不99| 成人av在线播放网站| 中文av一区二区| 国产91高潮流白浆在线麻豆| 久久精品人人做人人综合 | 国产一区二区三区高清播放| 欧美日韩精品欧美日韩精品一| 亚洲免费伊人电影| 成人爱爱电影网址| 中日韩av电影| 国v精品久久久网| 国产色综合久久| 大胆欧美人体老妇| 日韩伦理免费电影| 91丨porny丨最新| 亚洲免费视频中文字幕| 日本精品一区二区三区高清| 亚洲影视资源网| 欧美日韩精品是欧美日韩精品| 午夜国产精品一区| 欧美一级xxx| 国内精品久久久久影院薰衣草 | 激情久久久久久久久久久久久久久久| 欧美亚洲动漫另类| 午夜成人在线视频| 日韩一级在线观看| 国产高清无密码一区二区三区| 欧美韩国日本不卡| 一本久久a久久免费精品不卡| 亚洲自拍偷拍图区| 欧美一卡在线观看| 国产乱人伦偷精品视频不卡| 国产精品久久三| 欧亚一区二区三区| 美女一区二区视频| 国产精品女主播av| 欧美吻胸吃奶大尺度电影 | 亚洲成年人影院| 精品免费一区二区三区| 丁香婷婷综合五月| 亚洲精品你懂的| 日韩午夜激情av| 不卡在线观看av| 日韩高清国产一区在线| 国产日产欧美精品一区二区三区| 成人福利视频在线| 青青草国产精品97视觉盛宴| 国产精品欧美综合在线| 欧美日韩在线观看一区二区 | 亚洲一二三四在线观看| 日韩一卡二卡三卡四卡| 成人激情av网| 老司机午夜精品| 亚洲精品成人少妇| 久久亚洲一级片| 欧美日韩一级二级| av成人免费在线| 精品一区二区三区视频| 亚洲靠逼com| 日本一区二区电影| 欧美一区二区视频观看视频| 成人毛片视频在线观看| 九色综合国产一区二区三区| 亚洲一区二区三区精品在线| 国产欧美日韩三级| 日韩精品一区二区三区三区免费| 欧美自拍偷拍午夜视频| 成人免费看黄yyy456| 精品一区二区三区在线播放| 一级特黄大欧美久久久| 国产精品美女www爽爽爽| 精品国产乱码久久久久久免费| 欧美日韩一区精品| 欧美性感一区二区三区| 91年精品国产| 成人黄色综合网站| 成人精品免费网站| 丁香一区二区三区| 国产精品一区二区三区四区| 经典三级在线一区| 免费看欧美美女黄的网站| 亚洲线精品一区二区三区 | 久久久久亚洲蜜桃| 精品少妇一区二区三区视频免付费| 欧美日韩免费电影| 精品视频一区二区不卡| 欧美日韩色一区| 欧美日韩mp4| 91精品国产综合久久香蕉的特点| 欧美日韩国产首页| 欧美日韩另类一区| 欧美亚洲国产一卡| 欧美丝袜自拍制服另类| 欧美日韩高清一区二区| 欧美电影影音先锋| 欧美va在线播放| 国产免费观看久久| 国产精品美女www爽爽爽| 亚洲视频网在线直播| 一区二区三区日韩在线观看| 午夜久久久影院| 精品一区二区三区在线观看| 国产98色在线|日韩| 色诱亚洲精品久久久久久| 欧美日韩一区二区在线观看视频 | 色婷婷精品久久二区二区蜜臂av | 中文字幕乱码日本亚洲一区二区 | 国产精品午夜春色av| 国产精品福利影院| 亚洲福中文字幕伊人影院| 午夜视黄欧洲亚洲| 极品少妇xxxx精品少妇偷拍| 成人综合激情网| 在线看日本不卡| 日韩欧美一级二级| 成人免费在线视频观看| 亚洲午夜久久久| 国产精品白丝av| 欧美三级中文字幕在线观看| 欧美一级理论片| 国产精品久线在线观看| 日韩福利电影在线| av成人动漫在线观看| 日韩一级高清毛片| 亚洲国产电影在线观看| 视频一区二区国产| 成人一区二区在线观看| 欧美日韩一区二区三区高清| 欧美激情综合网| 视频一区视频二区中文字幕| 豆国产96在线|亚洲| 欧美一区二区三区在线观看| 国产精品对白交换视频| 麻豆freexxxx性91精品| 色94色欧美sute亚洲线路二| 亚洲精品一区二区三区影院 | 蜜臀久久久久久久| 99久久久久久| 久久婷婷久久一区二区三区| 亚洲一区二区三区中文字幕在线|