欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Flash AS制作LRC歌詞同步的詳細(xì)教程

互聯(lián)網(wǎng)   發(fā)布時間:2008-10-06 01:25:22   作者:佚名   我要評論
本文為大家介紹Flash AS制作LRC歌詞同步的詳細(xì)教程

四、LRC 的讀取與存儲轉(zhuǎn)換(使用文檔類設(shè)計)
1.讀取 LRC 文件,這一步非常簡單與讀取普通的文本文件是一樣的;

CODE:
public function LRCPlayer() {
var loader:URLLoader=new URLLoader();
loader.load(new URLRequest("LRC/青花瓷.lrc"));
loader.addEventListener(Event.COMPLETE,LoadFinish);
}
private function LoadFinish(evt:Event):void {
trace(evt.target.data);
}--------------------------------------------------------------------------------
2.將讀取的 LRC 數(shù)據(jù)按行分割( "\n" 為換行符),數(shù)組的每一個元素代表 LRC 的一行內(nèi)容;

CODE:
function LoadFinish(evt:Event):void {
var list:String=evt.target.data;
var listarray:Array=list.split("\n");
trace(listarray);
}--------------------------------------------------------------------------------
3.在數(shù)組中提取每一行的時間及歌詞,解決單時間序列的問題;(注意!此段代碼只作講解,不以應(yīng)用)
LRC 內(nèi)容如下:

QUOTE:

[00:43.83]而你嫣然的一笑如含苞待放
[00:48.30]你的美一縷飄散 
[00:50.77]去到我去不了的地方
[03:01.92]天正在等煙雨 
[03:03.57]而我在等你 
[03:05.92]炊煙裊裊升起 
[03:07.76]隔江千萬 里
代碼如下:

CODE:
function LoadFinish(evt:Event):void {
var list:String=evt.target.data;
var listarray:Array=list.split("\n");
for (var i=0; i<listarray.length; i ) {
var info:String=listarray[i];
//提取每行內(nèi)容,用變量 info 保存
var lyric:String=info.substr(10);
//將歌詞內(nèi)容提取到 lyric 變量中
var ctime:String =info.substr(0,10);
//提取時間序列字串
var ntime:Number=Number(ctime.substr(1,2))*60 Number(ctime.substr(4,5));
//將時間字串轉(zhuǎn)換為計算機(jī)可讀取的時間
var obj:Object=new Object();
obj.timer=ntime*1000;
obj.lyric=lyric;
LRCarray.push(obj);
//將時間與歌詞保存到一個 Object 中,并壓入LRCarray 數(shù)組
trace(obj.timer,obj.lyric);
}
}輸出結(jié)果:

QUOTE:

43830 而你嫣然的一笑如含苞待放
48300 你的美一縷飄散
50770 去到我去不了的地方
181920 天正在等煙雨
183570 而我在等你
185920 炊煙裊裊升起
187760 隔江千萬 里
--------------------------------------------------------------------------------
4.在LRC文件,還有多時間序列的存在,所以單時間序列算法不能滿足實際需要,下面就來解決多時間序列問題;
LRC 內(nèi)容如下:

QUOTE:

[00:43.83]而你嫣然的一笑如含苞待放
[00:48.30]你的美一縷飄散 
[00:50.77]去到我去不了的地方
[03:01.92][02:25.63][00:56.90]天正在等煙雨 
[03:03.57][02:27.91][00:58.99]而我在等你 
[03:05.92][02:30.44][01:00.93]炊煙裊裊升起 
[03:07.76][02:32.25][01:03.49]隔江千萬 里
代碼如下:

CODE:
function LoadFinish(evt:Event):void {
var list:String=evt.target.data;
var listarray:Array=list.split("\n");
var reg:RegExp=/\[[0-5][0-9]:[0-5][0-9].[0-9][0-9]\]/g;
//建立正則表達(dá)式,范圍:[00:00.00]~[59:59.99]
for (var i=0; i<listarray.length; i ) {
var info:String=listarray[i];
//提取每行內(nèi)容,用變量 info 保存
var len:int=info.match(reg).length;
//該行擁有時間序列的個數(shù)
var timeAry:Array=info.match(reg);
//將匹配的時間序列保存到 timeAry 數(shù)組中
var lyric:String=info.substr(len*10);
//根據(jù)每個時間序列占10個字符,找出歌詞內(nèi)容的起點(diǎn)
//將歌詞提取到 lyric 變量中
for (var k:int=0; k<timeAry.length; k ) {
var obj:Object=new Object();
var ctime:String=timeAry[k];
var ntime:Number=Number(ctime.substr(1,2))*60 Number(ctime.substr(4,5));
obj.timer=ntime*1000;
obj.lyric=lyric;
LRCarray.push(obj);
trace(obj.timer,obj.lyric);
}
//將時間序列轉(zhuǎn)換為毫秒并與歌詞一起保存為一個數(shù)組元素
}
}輸出結(jié)果:

QUOTE:

43830 而你嫣然的一笑如含苞待放
48300 你的美一縷飄散 
50770 去到我去不了的地方
181920 天正在等煙雨 
145630 天正在等煙雨 
56900 天正在等煙雨 
183570 而我在等你 
147910 而我在等你 
58990 而我在等你 
185920 炊煙裊裊升起 
150440 炊煙裊裊升起 
60930 炊煙裊裊升起 
187760 隔江千萬 里
152250 隔江千萬 里
63490 隔江千萬 里
--------------------------------------------------------------------------------
5.將獲得的 LRCarray 數(shù)組按起始時間排序,這對于按序讀取歌詞有重要意義;

CODE:
LRCarray.sort(compare);
private function compare(paraA:Object,paraB:Object):int {
if (paraA.timer>paraB.timer) {
return 1;
}
if (paraA.timer<paraB.timer) {
return -1;
}
return 0;
}結(jié)果如下:

QUOTE:

43830 而你嫣然的一笑如含苞待放
48300 你的美一縷飄散
50770 去到我去不了的地方
56900 天正在等煙雨
58990 而我在等你
60930 炊煙裊裊升起
63490 隔江千萬 里
145630 天正在等煙雨
147910 而我在等你
150440 炊煙裊裊升起
152250 隔江千萬 里
181920 天正在等煙雨
183570 而我在等你
185920 炊煙裊裊升起
187760 隔江千萬 里
--------------------------------------------------------------------------------
6.最后,隨著音樂的播放,讀取播放時間段內(nèi)的歌詞。用當(dāng)前播放時間與 LRCarray 中的時間相比較,如果當(dāng)前時間小于 LRCarray.timer 的時間,那么就顯示 LRCarray[i-1].lyric 的歌詞。為什么要顯示 [i-1] 的歌詞呢?比如說當(dāng)前播放到第 500 秒,讀取的 LRCarray[20].timer 時間是 400 秒,那么 i 。下一次讀取的 LRCarray[21].timer 時間是 700 秒,這時當(dāng)前播放時間小于讀取的這個時間,就說明當(dāng)前的第 500 秒仍處于 LRCarray[20].timer 的時間范圍內(nèi)。

CODE:
var lrc_txt:TextField=new TextField();
var LRCarray:Array=new Array();
var sc:SoundChannel;
public function LRCPlayer() {
lrc_txt.width=500;
lrc_txt.selectable=false;
addChild(lrc_txt);
//歌詞在文本 lrc_txt 中顯示
var loader:URLLoader=new URLLoader();
loader.load(new URLRequest("LRC/青花瓷.lrc"));
loader.addEventListener(Event.COMPLETE,LoadFinish);
var sound:Sound=new Sound();
sound.load(new URLRequest("Music/青花瓷.mp3"));
sc=sound.play();
//播放聲音,并生成 sc 變量,SoundChannel 類的實例
stage.addEventListener(Event.ENTER_FRAME,SoundPlaying);
//實時刷新歌詞
}
function SoundPlaying(evt:Event):void {
for (var i=1; i<LRCarray.length; i ) {
if (sc.position<LRCarray[i].timer) {
lrc_txt.text=LRCarray[i-1].lyric;
break;
//找到歌詞,跳出循環(huán)體
}
lrc_txt.text=LRCarray[LRCarray.length-1].lyric;
//找不到歌詞,說明已超出了最后一句的時間,因此顯示最后一句歌詞
}
}五、全部代碼(文檔類 LRCPlayer.as):

CODE:
package {
import flash.display.Sprite;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.events.Event;
import flash.text.TextField;
import flash.system.System;
public class LRCPlayer extends Sprite {
var lrc_txt:TextField=new TextField();
var LRCarray:Array=new Array();
var sc:SoundChannel;
public function LRCPlayer() {
System.useCodePage=true;
lrc_txt.width=500;
lrc_txt.selectable=false;
addChild(lrc_txt);
var loader:URLLoader=new URLLoader();
loader.load(new URLRequest("LRC/青花瓷.lrc"));
loader.addEventListener(Event.COMPLETE,LoadFinish);
var sound:Sound=new Sound();
sound.load(new URLRequest("Music/青花瓷.mp3"));
sc=sound.play();
stage.addEventListener(Event.ENTER_FRAME,SoundPlaying);
}
function SoundPlaying(evt:Event):void {
for (var i=1; i<LRCarray.length; i ) {
if (sc.position<LRCarray[i].timer) {
lrc_txt.text=LRCarray[i-1].lyric;
break;
}
lrc_txt.text=LRCarray[LRCarray.length-1].lyric;
}
}
function LoadFinish(evt:Event):void {
var list:String=evt.target.data;
var listarray:Array=list.split("\n");
var reg:RegExp=/\[[0-5][0-9]:[0-5][0-9].[0-9][0-9]\]/g;
for (var i=0; i<listarray.length; i ) {
var info:String=listarray[i];
var len:int=info.match(reg).length;
var timeAry:Array=info.match(reg);
var lyric:String=info.substr(len*10);
for (var k:int=0; k<timeAry.length; k ) {
var obj:Object=new Object();
var ctime:String=timeAry[k];
var ntime:Number=Number(ctime.substr(1,2))*60 Number(ctime.substr(4,5));
obj.timer=ntime*1000;
obj.lyric=lyric;
LRCarray.push(obj);
}
}
LRCarray.sort(compare);
}
private function compare(paraA:Object,paraB:Object):int {
if (paraA.timer>paraB.timer) {
return 1;
}
if (paraA.timer<paraB.timer) {
return -1;
}
return 0;
}
}
}

相關(guān)文章

  • flash cs6鼠標(biāo)跟隨效果實現(xiàn)代碼分享

    flash cs6想要實現(xiàn)鼠標(biāo)跟隨效果?該怎么制作呢?今天我們就來看看使用as2.0實現(xiàn)鼠標(biāo)跟隨效果的教程,需要的朋友可以參考下
    2019-05-19
  • Flash cs6怎么使用代碼輸入中英文文本?

    Flash cs6怎么使用代碼輸入中英文文本?Flash cs6中可以使用文字工具直接輸入文本,也可以使用代碼來輸入文本,該怎么使用代碼輸入文本呢?請看下文詳細(xì)的教程,需要的朋友
    2018-03-11
  • flash as3.0怎么定義抽象類和抽象?

    flash as3.0抽象類怎么定義? as3.0中有很多抽象類,該怎么定義抽象類和抽象方法呢?下面我們就來看看簡單的例子,需要的朋友可以參考下http://www.dbjr.com.cn/softs/408402.
    2018-02-28
  • flash cs6中怎么使用ActionScript3.0?

    flash cs6中怎么使用ActionScript3.0?flash cs6中想要使用ActionScript3.0功能,該怎么使用呢?下面我們就來看看詳細(xì)的教程,需要的朋友可以參考下
    2018-01-25
  • Flash中怎么實現(xiàn)鼠標(biāo)點(diǎn)擊決定圖像位置?

    本教程給大家分享一個Flash小教程,教大家在Flash CS6中怎么實現(xiàn)鼠標(biāo)點(diǎn)擊決定圖像位置?方法很簡單,感興趣的朋友歡迎前來一起分享學(xué)習(xí)
    2018-01-12
  • Flash中如何用代碼將圖片放在自己想要的舞臺位置?

    本教程教腳本之家的ActionScript教程學(xué)習(xí)者在Flash中如何用代碼將圖片放在自己想要的舞臺位置,教程講解的詳細(xì),感興趣的朋友歡迎前來分享學(xué)習(xí)
    2017-11-20
  • 在Flash CS6中使用with函數(shù)繪制背景圖教程

    本教程教腳本之家的ActionScript教程學(xué)習(xí)者如何在Flash CS6中使用with函數(shù)繪制背景圖?教程一步步講解的挺詳細(xì),方法也不難,非常適合Flash新手入門學(xué)習(xí)
    2017-11-18
  • Flash怎么設(shè)置元件坐標(biāo)?flash使用代碼設(shè)置元件的坐標(biāo)的教程

    Flash怎么設(shè)置元件坐標(biāo)?flash中導(dǎo)如的元件需要添加坐標(biāo),該怎么定位元件坐標(biāo)呢?下面我們就來看看flash使用代碼設(shè)置元件的坐標(biāo)的教程,需要的朋友可以參考下
    2017-10-11
  • Flash怎么制作來回?fù)u擺的花朵的動畫?

    Flash怎么制作來回?fù)u擺的花朵的動畫?Flash中想要給花朵制作一段搖擺的動畫效果,該怎么制作呢?下面我們就來看看詳細(xì)的教程,很簡單,需要的朋友可以參考下
    2017-05-23
  • Flash怎么制作流動七彩色的文字?

    Flash怎么制作流動七彩色的文字?想要讓文字動起來,該怎么使用flash給文字制作一個流動七彩色的動畫呢?下面我們就來看看詳細(xì)的教程,需要的朋友可以參考下
    2017-04-23

最新評論