自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

解析Flex播放器如何同步顯示歌詞

開發(fā) 后端
本文向大家介紹一下Flex播放器同步顯示歌詞這一功能,這是繼上一篇Flex播放器實(shí)現(xiàn)播放、緩沖進(jìn)度條和音頻曲線顯示后的一擴(kuò)展功能。

相信大家對Flex播放器同步顯示歌詞這一功能應(yīng)該都不陌生,那么你對它的原理是否比較熟悉呢,這里和大家分享一下,本例是實(shí)現(xiàn)對lrc文本格式的歌詞進(jìn)行解析顯示,并把當(dāng)前播放歌詞一行文本進(jìn)行高亮顯示。

Flex播放器同步顯示歌詞

在聽完S.H.E的你最近還嗎不下一百遍,終于搞好了Flex播放器同步顯示歌詞這一功能。這是繼上一篇Flex播放器(實(shí)現(xiàn)播放、緩沖進(jìn)度條和音頻曲線顯示)后的一擴(kuò)展功能,本例是實(shí)現(xiàn)對lrc文本格式的歌詞進(jìn)行解析顯示,并把當(dāng)前播放歌詞一行文本進(jìn)行高亮顯示。

播放歌曲時(shí)要同步顯示歌詞,首先必須要能解析出lrc格式的歌詞文本,之前我還準(zhǔn)備直接在網(wǎng)上匹配下載對應(yīng)歌詞,打開我機(jī)器的千千靜音在線匹配歌詞,然后用HTTPAnalyzerStdV監(jiān)視所有的http請求,發(fā)現(xiàn)它是請求這個(gè)ttlrcct.qianqian.com網(wǎng)站下載歌詞,本來還是直接套用千千靜音服務(wù)器下載歌詞,但是它的url參數(shù)全部加密了。后來又看了下酷狗音樂,它里面下載歌詞我都監(jiān)視不請求,考慮到就算我能在線找到下載歌詞的url地址,flash里發(fā)送遠(yuǎn)程請求也會(huì)有安全殺箱問題,所以最終放棄直接在網(wǎng)絡(luò)上下載歌詞的辦法,還是全部上傳到我網(wǎng)站上去。

lrc歌詞其實(shí)就是一個(gè)文本格式的文件,在Flex里面我們可以使用URLLoader去加載,代碼如下:

  1. /加載歌詞varlrcUrl:String=xml.item[currIndex].lrc;if(lrcUrl!=null&&lrcUrl!="")  
  2. {varlrc:URLLoader=newURLLoader();//lrc.dataFormat=URLLoaderDataFormat.VARIABLES;  
  3. lrc.load(newURLRequest(lrcUrl));lrc.addEventListener(Event.COMPLETE,LRC_Complete);  
  4. lrc.addEventListener(IOErrorEvent.IO_ERROR,LRC_IOError);}lrcArr=null;outPutLRCString="";  
  5. startIndexOf=0;txtLrc.text=""

然后在加載完成的事件里,我們能得到lrc文本字符串,這時(shí)候我們需要對字符串進(jìn)行處理,把它轉(zhuǎn)換成一個(gè)Array數(shù)組,函數(shù)方法如下:

  1. publicfunctiongetLRCArray(lrc:String):Array{varlrcArr:Array=newArray;  
  2. lrc+="\r";for(vari:int=0;i<lrc.length;i++){vartime:Number=0;if(lrc.charAt(i)==":"){time=Number(lrc.slice(i-2,i))*60+Number(lrc.slice(i+1,i+3))
  3. ;if(String(time)!="NaN"){varj:uint=0;  
  4. varstartIndex:uint=0;varendIndex:uint=0;do{j++;  
  5. if(lrc.charAt(i+j)=="]"){startIndex=i+j+1;}}while(i+j<lrc.indexOf("\r",i))endIndex=lrc.indexOf("\r",i);  
  6. if(startIndex!=0&&endIndex!=0){lrcArr.push([time,lrc.slice(startIndex,endIndex)]);}}}}returnlrcArr;} 

解析歌詞返回的Array數(shù)組為多圍數(shù)組,數(shù)組里的每一項(xiàng)是為一個(gè)二圍數(shù)組,item[0]為當(dāng)前秒數(shù),item[1]為該秒顯示的歌詞(句),比如item[0]=歌曲名:你最近還好嗎、item[5]=演唱:S.H.E,就是代表第0秒顯示歌曲名:你最近還好嗎,而從第5秒起則顯示演唱:S.H.E,這樣通過getLRCArray方法就能得到歌曲所有的時(shí)間段顯示的歌詞拉。本例中把所有歌詞放在一個(gè)editable="false"不可修改的mx:TextArea文本域內(nèi)。

Flex播放器歌詞同步顯示的問題

歌詞能全部加載顯示了,問題是怎么隨著歌曲的播放而高亮顯示當(dāng)前行歌詞呢?不過還好Flex提供一個(gè)TextRange能對TextArea內(nèi)文本進(jìn)行選擇性的處理,你只需要設(shè)置beginIndex和endIndex就能自動(dòng)匹配到TextArea中間區(qū)域的文本,我這里只是簡單的改變了一下顏色,不過我們從TextArea中找某一個(gè)句歌詞索引的時(shí)候需要注意歌詞有很多是重復(fù)的,所以我們需要用一個(gè)變量保存當(dāng)前歌詞播放位置索引startIndexOf,以確保我們高亮選擇到的歌詞是正確的。同時(shí)將TextArea滾動(dòng)條設(shè)置到對應(yīng)的高度,主要的代碼如下:

  1. //同步顯示歌詞if(lrcArr!=null&&lrcArr.length>0){varsec:Number=int(channel.position/1000);  
  2. for(varj:int=0;j<lrcArr.length;j++){if(lrcArr[j][0]==sec){varcurrentLrc:String=lrcArr[j][1];  
  3. if(currentLrc!=this.currLrc.text){currLrc.text=currentLrc;
  4. //高亮顯示,先清空之前高亮部分vartr:TextRange=newTextRange(txtLrc);tr.color=this.getStyle("color");
  5. varbeginIndex:int=this.outPutLRCString.indexOf(currentLrc,startIndexOf);startIndexOf+=currentLrc.length;  
  6. varendIndex:int=beginIndex+currentLrc.length;tr.beginIndex=beginIndex;tr.endIndex=endIndex;  
  7. if(tr.text!=""){tr.color="yellow";}  
  8. //設(shè)置滾動(dòng)條位置this.txtLrc.verticalScrollPosition=j*this.txtLrc.maxVerticalScrollPosition/lrcArr.length;if(lrcArr.length-j<=5)  
  9.  
  10. thisthis.txtLrc.verticalScrollPosition=this.txtLrc.maxVerticalScrollPosition;}break;}}}  

上面sec是當(dāng)前歌曲播放的時(shí)間秒數(shù),然后循環(huán)換數(shù)組判斷rcArr[j][0]跟當(dāng)前sec比較,秒數(shù)一致才顯示對應(yīng)歌詞,一段歌詞可能在好幾秒內(nèi)都不會(huì)變的,同時(shí)根據(jù)當(dāng)前歌詞的數(shù)組索引位置設(shè)置TextArea滾動(dòng)條位置,讓當(dāng)前正在播放的歌詞在中間顯示。

【編輯推薦】

  1. 揭露Flex播放器使用內(nèi)幕
  2. Flex播放器同步顯示歌詞
  3. 技術(shù)前沿 看Flex客戶端緩存技術(shù)如何使用
  4. 解析Flex全屏模式設(shè)置方法
  5. Flex內(nèi)存泄露解決方法和內(nèi)存釋放優(yōu)化原則

 

責(zé)任編輯:佚名 來源: jonllen.com
相關(guān)推薦

2010-07-30 09:35:47

Flex播放器

2010-07-30 09:42:37

Flex播放器

2011-06-13 09:33:04

2022-08-16 17:37:06

視頻播放器鴻蒙

2023-09-22 10:54:28

播放器點(diǎn)播成本

2022-11-12 08:26:04

VLC視頻播放器裁剪視頻

2018-05-25 14:37:58

2011-06-27 11:23:21

Qt 音樂播放器

2010-08-11 13:39:16

Flex3.0Flv播放器

2023-08-26 19:07:40

VLC旋轉(zhuǎn)視頻

2011-09-09 11:28:35

Android Mus

2011-09-05 18:08:01

MTK音頻播放器

2015-05-21 15:25:42

VLC播放器

2011-07-20 16:21:20

iPhone 視頻 播放器

2010-03-31 16:47:09

Ubuntu 10.0

2021-10-18 14:57:25

鴻蒙HarmonyOS應(yīng)用

2010-06-11 12:53:56

openSUSE播放器

2009-12-17 15:10:31

Linux音樂播放器

2022-06-21 14:41:38

播放器適配西瓜視頻

2022-08-17 17:18:02

Sunamu開源
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號