以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 难题一道,谁会啊? (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=23863) |
-- 作者:烈火之炎 -- 发布时间:11/2/2005 4:44:00 PM -- 难题一道,谁会啊? 具体问题是:用C语言实现LRC歌词的解析,就是将歌词与时间分开显示。 [ti:欧若拉] [ar:张韶涵] [al:欧若拉] [by:www.jpwy.net] [00:07.96]欧若拉 [00:14.75]作词:施立 [00:26.43]作曲:李天龙 [00:36.55]神秘北极圈 [00:37.50]阿拉斯加的山巅 [00:39.10]谁的脸 [00:40.35]出现海角的天边 [00:42.30]忽然的瞬间 [00:43.22]在那遥远的地点 [00:44.86]我看见 [00:45.92]恋人幸福的光点 [01:55.69][00:47.83]灵魂在招唤 [01:58.42][00:50.64]唱着古老陌生熟悉的歌谣 [02:01.33][00:53.60]天空在微笑 [02:03.75][00:56.26]我的世界缤纷闪耀 [03:14.60][02:06.90][00:59.16]爱是一道光 [03:16.22][02:08.37][01:00.56]如此美妙 [03:17.61][02:09.70][01:01.95]指引我们想要的未来 [03:20.42][02:12.52][01:04.84]魔力北极光 [03:21.70][02:13.89][01:06.18]奇幻的预言 [03:23.24][02:15.35][01:07.59]赶快去找不思议的爱 [03:26.02][02:18.27][01:10.46]爱是一道光 [03:27.43][02:19.66][01:11.90]如此美妙 [03:28.85][02:21.07][01:13.30]照亮我们勇气的未来 [03:31.65][02:23.89][01:16.12]魔力北极光 [03:33.02][02:25.28][01:17.42]传说的预言 [03:34.47][02:26.72][01:18.97]原来就是恋人的眼光 [02:55.61][01:24.56]music [01:44.11]沉默一眨眼 [01:45.41]一万年外的光年 [01:47.21]我相信 [01:48.35]未来其实并不远 [01:50.08]哭泣的眼泪 [01:51.38]也是喜悦的赞美 [01:52.84]是因为有你能展翅高飞 [03:37.36][02:29.43]红橙黄绿蓝 [03:40.16][02:32.35]五彩的欧若拉 [03:42.96][02:35.22]爱就在心中 [03:45.79][02:37.98]相信就会存在 [03:48.68][02:40.83]红橙黄绿蓝 [03:51.42][02:43.60]美丽的欧若拉 [03:54.23][02:46.52]爱就在心中 [03:57.03][02:49.24]相信就是永远 (LRC歌词) |
-- 作者:烈火之炎 -- 发布时间:11/2/2005 4:45:00 PM -- LRC的基本语法格式比较简单,其格式为“[标识名:值]”,而使用中最重要的就是下面两种标签(tag): ①标识标签(ID-tags): 标识标签主要起注释作用,它又可分为以下几种: [ar:艺人名],可以在这里加上歌手信息; 以上四项在MP3播放时在歌词显示窗口是不显示的; [offset:时间补偿值] (其单位是毫秒),此项是用来进行长歌词显示速度补偿所用的。由于一些歌曲版本不同(如翻唱等),有时歌词的显示上可能整体上偏快或偏慢几秒。这时你无须重新编辑歌词,只要按小键盘上的“+"、“-"调整一下当前的显示速度即可。调整后,补偿的时间差信息会被自动添加到歌词中(格式为“[Offset:毫秒数]”)。以后就无须调整了。当LyricsMate自动向歌词内写入时间差补偿标记时,是按照一行一个时间标签的标准格式填写的,原歌词文件中没有标签的行将被忽略。正值表示整体提前,负值相反。 ②时间标签(Time-tag): 时间标签的格式通常为“[mm:ss]”(分钟数:秒数)。其中的分钟数和秒数必须是非负整数,比如“[12:34]”是有效的标签,而“[-12:3.4]”则是无效的标签。时间标签可以位于某行歌词中的任意位置。一行歌词可以包含多个时间标签(比如歌词中的迭句部分)。根据这些时间标签,歌词伴侣会按时间的先后顺序依次高亮显示歌词,从而实现卡拉OK功能。另外,时间标签无须排序。 |
-- 作者:烈火之炎 -- 发布时间:11/3/2005 2:18:00 PM -- 没高手啊 |
-- 作者:firstway -- 发布时间:12/2/2005 8:53:00 PM -- 如果仅仅是把歌词分开 下面可以做到 注:ci.txt为前面歌词混和文件 ------------------------------------ int main() while(feof(fp)==0) |
-- 作者:pennyliang -- 发布时间:12/3/2005 12:26:00 PM -- char s[80]; 请问80是什么意思?为什么是80而不是85或者90? |
-- 作者:firstway -- 发布时间:12/3/2005 12:41:00 PM -- 当然大一点可以啦 只要每行字符不要大于这个数就可以了 |
-- 作者:pennyliang -- 发布时间:12/3/2005 1:16:00 PM -- 通常这样写是缺乏原理描述的,可以这样写 const int maxLineSize = 80; char lineBuffer[maxLineSize ];
|
-- 作者:firstway -- 发布时间:12/3/2005 1:20:00 PM --
that‘s good! |
-- 作者:pennyliang -- 发布时间:12/3/2005 1:21:00 PM -- 另外这段语句也缺乏表达力,必须根据上下文去推测。 strp=strrchr(s,']'); 可以改写成 string getSubStingUntileSepcifiedChar(string s, char sepcifiedChar)
|
-- 作者:pennyliang -- 发布时间:12/3/2005 1:26:00 PM -- 另外一个问题就是,空行没有明显的规律,有的空3行,有的空2行。 其他格式上看还是很严谨的,是个不错的程序。 |
-- 作者:firstway -- 发布时间:12/12/2005 10:37:00 AM -- 还有一点:没有注释,呵呵。 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
8,269.531ms |