用於讀取LRC同步歌詞的類
今天心情不錯,用FLASH寫了一個用於讀取LRC同步歌詞的類,只要25行程式碼,完全用是用FLASH的字串操作來分析標籤的.。
下面就是這個類:
package LRC{
public class readlrc {
public function readlrcastime(mp3playtime:Number,gc:String):String {
var qsd:int;//起始點
var fhz:String;
for (var j:int=0; j < gc.length; j ) {
if (gc.charCodeAt(j) == 58) {
if (int(gc.slice(j - 2,j)) * 60 int(gc.slice(j 1,j 3)) == mp3playtime) {
var i:int=0;
do {
i ;
if (gc.charCodeAt(j i) == 93) {
qsd=j i;
}
if (gc.charCodeAt(j i) == 13) {
fhz=gc.slice(qsd 1,j i);
}
} while (gc.charCodeAt(j i) != 13&&j i<gc.length);
}
}
}
return fhz;
}
}
}
將此檔案儲存為readlrc.as。
注意:一定要把此AS檔案放入一個名為LRC的資料夾中,才可以使用。
下面就用一個小示例來說明如何用這個類,新建一個AS檔案,寫入以下程式碼:
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.system.System;
import flash.text.TextField;
import LRC.readlrc;
public class mp3 extends MovieClip {
private var lrcreq:URLRequest=new URLRequest("日不落.lrc");
private var mp3url:URLRequest=new URLRequest("日不落.mp3");
private var mymp3:Sound=new Sound();
private var channel:SoundChannel=new SoundChannel();
private var lrcurl:URLLoader=new URLLoader();
private var tbgc:String;
private var mylrc:readlrc=new readlrc();
System.useCodePage=true;
public function mp3() {
mymp3.load(mp3url);
channel=mymp3.play();
lrcurl.load(lrcreq);
lrcurl.addEventListener(Event.COMPLETE,loaded);
}
private function enterframe(event:Event) {
try {
gc_txt.text=mylrc.readlrcastime(int(channel.position/1000),tbgc);
} catch (error:Error) {
//
}
}
private function loaded(event:Event) {
tbgc=String(event.target.data);
addEventListener(Event.ENTER_FRAME,enterframe);
}
}
}
儲存此檔案為mp3.as。
寫完後,我們還需要一個FLA檔案來編譯這些程式碼,新建一個FLA檔案,名字隨意,在場景中拖出一個動態文字域,例項名稱填寫gc_txt,在FLA檔案的文件類中填寫mp3,將此FLA檔案與mp3.as檔案,日不落.mp3檔案,日不落.lrc檔案和名為LRC的資料夾放入同一個目錄下,測試影片,就可以看到效果了。