把所有的音乐都加上同步歌词了。。
9 十 2005
下班花了点时间。。把所有的音乐都加上同步歌词了。。
怎么以前喜欢的歌,都记不起歌名了。。郁闷呢
13 Responses for "把所有的音乐都加上同步歌词了。。"
-
你的网站做得真好!能把同步歌词的思路说一下吗?谢谢
-
1)处理编
LRC歌词文件是用的ANSI编码。不支持多国语言。如果用Flash读取去解析。就必须设置useCodePage=true;对于使用其他语言的操作系统来访问,定是乱码,很有局限性。
可以通过服务器后台语言来解决这个问题。。而且可以用后台语言更强的函数来处理LRC文件,生成XML文档供FLASH同步歌词使用。
下面是一个实例LRC文件:
[ti:我们的爱]
[ar:F.I.R.]
[al:安息香 QQ:85148689]
[by:安息香'伟]
[00:00.00]F.I.R < < 我们的爱 >>
[00:05.27]词: 谢宥慧 曲: Terence Teo
[00:21.55]回忆里想起
[00:23.10]模糊的小时候
[00:28.63]云朵漂浮在
[00:30.21]蓝蓝的天空
[00:34.31]那时的你说
[00:38.51]要和我手牵手
[00:42.26]一起走~
[00:43.79]到时间的尽头
[02:19.12][00:49.68]从此以后我
[02:21.00][00:51.45]都不敢抬头看
[02:26.27][00:56.87]彷佛我的天空
[02:28.37][00:59.05]失去了颜色
[02:31.84][01:02.60]从那一天起
[02:36.12][01:06.76]我忘记了呼吸
[02:39.74][01:10.50]眼泪~ 永远不再
[02:43.44][01:14.11]不再哭泣~
[03:46.16][02:49.56][01:20.15]我们的爱~
[03:50.25][02:53.52][01:24.17]过了就不再回来
[03:54.14][02:57.49][01:28.11]直到现在
[03:55.97][02:59.29][01:29.90]我还默默的等待
[04:00.34][03:03.62][01:34.35]我们的爱 我明白
[04:04.20][03:07.61][01:38.37]已变成你的负担
[04:08.22][03:11.53][01:42.25]只是永远~
[04:09.98][03:13.23][01:44.09]我都放不开
[04:13.47][03:16.83][01:47.46]最后的温暖~
[04:18.19][03:21.68][01:52.37]Ah~ Ah~
[04:21.85][03:25.23][01:55.77]你给的温暖
[01:59.53]Music→→→→→→→QQ:85148689
[03:28.95]不要再问
[03:29.98]你是否爱我
[03:32.29]现在我想要
[03:33.75]自由天空
[03:35.89]远离开这
[03:36.86]被困绑的世界
[03:39.61]不再寂寞~
[04:25.68]GOOD-BYE!!! BY: 安息香
通过后台脚本处理,生成XML文档
这样,这个XML被Flash 的 XMLConnector 或者 Flex的 HttpServices 读取后就会放到dataProvider中。
因为歌词文件可能存在重复的歌词。生成出来的XML文档并时间不是顺序的。需要重新排序。。转换为Array后LrcArray.sortOn(“t”, 16);
这样这个Array就是我们需要的歌词了。。然后绑定到一个DataGrid就可以显示歌词了。
2)同步编
需要同步,就必须有时间判断,歌曲播放到的时间是很容易取到的,
呵呵。。实在好意思。。现在没有时间。。有时间再写。。。待续!
-
谢谢,期待你的下一篇文章,好好研究先。另外可以播放WMA格式的文件吗?
-
等我时间闲了。我会具体写个教程示范。。swf是不能播放wma,为何要使用wma,同比特率和mp3没有太大的区别啊。
-
哦,是这样的,我以前做了一个小网站,是给同事们听歌用的,里面大约有一半是WMA格式。所以我问一下支不支持WMA格式
不过也没问题,到时我可以把WMA格式全部转成MP3就可以了
-
一定注意转换的采样率
有的采样率,flash读取后会有问题
比如播放特别快
-
确实有这种问题。不知道的Flash播放器的兼容性的问题,还是mp3本身不标准!
-
那么一般要转换为多少呢,44100kbps吗?
-
我转换的都是44100kbps的,其他的级别很少用过。
-
播放时如何检测该显示哪一句歌词呢,是不是要不停地检测歌曲播放的时间呢?
期待着能继续写下去……
-
看来都对同步感兴趣,我先简单的说一下,有时间再整理一下,放出源代码。
循环判断时间:可以用setInterval函数,也可以建一个新影片用onEnterFrame来处理
在显示歌词的dataGrid的dataProvider数组中有三维,
一维:歌词自动向上翻的时间引索。(t1)
二维:歌词自动向下翻的时间引索。(t2)
三维:同步歌词。
在循环控制函数中。加入判断语句判断显示歌词的dataGrid的selectedItem.t2 是否大小于 播放器当前的时间。。来使用selectedIndex+=1;来选择下一条歌词,用vPosition +=1来控制向下滚动。
而关键的处理就在dataProvider中的两个时间索引。(t1)一个可以是直接通过httpServices返回的数组里的时间。这个用于判断向上范,(t2)向下翻的要处理一下。必须为上条歌词的时间。这样就基本完成了。
当单击歌词时。可以用play(selectedItem.t1)来跳转播放!
先写到这里了。。
-
谢谢,找工作的事有眉目了吗?
-
谢谢楼上这位仁兄关心,工作的事已经有点眉目了,新工作又更大的发展空间。
2005-10-12 12:10