http://bborn.cn/media/lyric.swf
十一假期里自己摸索学着做了个flash的同步显示歌词的播放器
其中不少代码和思路来自经典论坛(blueidea.com)的HBrO和flashk(S2 mini lrc)[flower]
向他们表示感谢
我的代码优点是:程序简单,条理清楚,只在第一帧加入代码就可以,完全不需要其他制作
当然缺点也很明显了,就是效果不够炫
应该来说是个适合入门的教程吧
闲话少说,直接贴代码,有些简单的注释.
新建一个flash,场景大小为300X110 pixels
然后在第一帧加入下面的代码
//这些都是些无关的东西
System.useCodepage = true; //避免乱码
stop();
Stage.scaleMode = “noScale”;
myMenu = new ContextMenu();
myMenu.hideBuiltInItems();
myMenu.customItems.push(new ContextMenuItem(“Bborn 设计制作”, gohome));
function gohome() {
getURL(“http://bborn.cn”, “_blank”);
}
_root.menu = myMenu;
//创建一个动态文本框
createTextField(“txtlyric”, this.getNextHighestDepth, 10, 10, “265″, “90″);
txtlyric.html = true;
txtlyric.multiline = true;
txtlyric.wordWrap = false;
txtlyric.border = true;
txtlyric.selectable = false;
var lrcData = new Array();
var s = new Sound();
var url = “http://bborn.cn/media/醉清风(弦子).mp3″;
//因为服务器不支持lrc扩展名,因此把扩展名改为txt
var lyrics = “http://bborn.cn/media/醉清风(弦子).txt”;
loadsound(url);
function loadsound(x) {
s = new Sound();
s.loadSound(x, true);
loadLyrics(lyrics);
s.start();
s.onSoundComplete = function() {
loadsound(x);
};
}
function loadLyrics(lyrics) {
var lrc = new XML();
lrc.load(lyrics);
lrc.onLoad = function(success) {
if (success) {
originLyrics = new Array();
originLyricsBreak = new Array();
var originLyricsUnit = new Array();
//通过回车换行来分割歌词
originLyrics = lrc.toString().split(“\r\n”);
//去除空白行
for (var i in originLyrics) {
if (originLyrics[i] == “”) {
originLyrics.splice(i, 1);
}
}
for (var i in originLyrics) {
//下面的if判断就是去掉类似[ti:醉清风]这样的信息
if (isNaN(originLyrics[i].substr(1, 2)) == false) {
originLyricsUnit = originLyrics[i].split(“]”);
for (var j = 0; j
originLyricsBreak.unshift(originLyricsUnit[j]+”]”+originLyricsUnit[originLyricsUnit.length-1]);
}
}
}
delete originLyrics;
//把歌词排序
originLyricsBreak.sort();
//把歌词与时间分开
for (var i = 0; i
tempText = originLyricsBreak[i].split(“]”)[1];
var tempTimeString = originLyricsBreak[i].split(“]”)[0].slice(1);
lrcData.push({index:i, lrctime:convertToTime(tempTimeString), lrctext:tempText});
}
delete originLyricsBreak;
startShowLRC();
} else {
txtlyric.htmlText = “error”;
}
};
}
function convertToTime(str) {
var times = str.split(“:”);
return parseInt(times[0])*60+parseFloat(times[1]);
}
function startShowLRC() {
t = 0;
n = 0;
txtlyric.htmlText = “”;
this.onEnterFrame = checTimer;
showLRCInfo(0);
}
//检查时间
function checTimer() {
if (s.position>=lrcData[t].lrctime*1000) {
if (t
if (s.position
if (n != t) {
n = t;
showLRCInfo(t);
}
} else {
t++;
}
} else {
if (t != n) {
n = t;
showLRCInfo(t);
}
}
}
}
fontColor1 = new String(“1C6440″);
fontColor2 = new String(“05D859″);
lrcFormat = new TextFormat();
lrcFormat.align = “center”;
frontInfo = new String();
backInfo = new String();
//显示歌词
function showLRCInfo(id) {
frontInfo = “”;
backInfo = “”;
for (var j = 0; j
frontInfo += lrcData[j].lrctext+”
“;
}
for (var j = id+1; j
backInfo += lrcData[j].lrctext+”
“;
}
txtlyric.htmlText = ““+frontInfo+”“+”“+lrcData[id].lrctext+”
“+”“+backInfo+”“;
txtlyric.setTextFormat(lrcFormat);
txtlyric.scroll = id-1;
}

var url = "http://bborn.cn/media/醉清风(弦子).mp3";
//因为服务器不支持lrc扩展名,因此把扩展名改为txt
var lyrics = "http://bborn.cn/media/醉清风(弦子).txt";
loadsound(url);
我想请教一下,如果我想把音乐和歌词换成自己电脑中的文档,那么var url 和var lyrics 应该写成什么样子的?可以举个例子说明一个吗,谢谢!
如果生成的swf和mp3在同个目录下
var url = "独自等待.MP3";
或者用绝对路径
var url = "H:\\web\\独自等待.MP3";
看清楚是 \\
test
請問若不用"this.onEnterFrame = checTimer;",可以打些甚麼?
因為如果我用上this,會令播放器上既時間不能正常顯示.
[quote=mayleung]請問若不用"this.onEnterFrame = checTimer;",可以打些甚麼?
因為如果我用上this,會令播放器上既時間不能正常顯示.[/quote]
不太明白你说的
这个是让每帧更新显示的时间