MP3制作之LRC歌词文件解析(附:源代码)

news/2024/11/23 10:02:48/

LRC 歌词同步

一、准备工作
  既然要制作歌词同步程序,首先要准备一首歌,我们就以“周杰伦-青花瓷”为例。首先要下载这首“青花瓷.mp3”,保存为“C:/My Player/Music/青花瓷.mp3”。还要下载青花瓷的 LRC 文件,大家可以到网上下载(地址见附录),将文本内容保存为“C:/My Player/LRC/青花瓷.lrc”。我们的程序(类和FLA)则保存在“C:/My Player/”文件夹下。
青花瓷.lrc 文件:
[ti:青花瓷]
[ar:周杰伦]
[al:我很忙]
[by:张琪]
[00:00.00]发送短信18到291199下载该歌曲到手机
[00:01.11]青花瓷
[03:36.49]
[00:21.39]素眉勾勒秋千话北风龙转丹 
[00:26.08]屏层鸟绘的牡丹一如你梳妆
[00:30.46]黯然腾香透过窗心事我了然 
[00:34.93]宣纸上皱边直尺各一半
[00:39.49]油色渲染侍女图因为被失藏 
[00:43.83]而你嫣然的一笑如含苞待放
[00:48.30]你的美一缕飘散 
[00:50.77]去到我去不了的地方
[02:23.97][00:55.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]隔江千万里
[03:10.36][02:34.85][01:05.84]在平地书刻你房间上的飘影 
[03:14.67][02:38.73][01:09.87]就当我为遇见你伏笔
[03:18.83][02:43.35][01:14.34]天正在等烟雨 
[03:21.20][02:45.60][01:16.68]而我在等你 
[03:23.71][02:48.01][01:18.99]月色被打捞起 
[03:25.74][02:50.10][01:21.18]掩盖了结局
[03:28.33][02:52.54][01:23.72]如传世的青花瓷在独自美丽 
[03:32.30][02:56.67][01:27.65]你眼的笑意
[01:50.25]色白花青的景已跃然于碗底 
[01:54.69]临摹宋体落款时却惦记着你
[01:59.22]你隐藏在药效里一千年的秘密 
[02:03.75]急溪里犹如羞花沾落地
[02:08.32]林外芭蕉 惹咒语 
[02:10.57]梦幻的铜绿
[02:12.84]而我路过那江南小镇的等你
[02:17.19]在泼墨山水画里 
[02:19.75]你从墨色深处被隐去
  大家也可以把这个文本内容复制下来,然后在“C:/My Player/LRC/”下创建一个文本文档,将内容粘贴上去,再将文档保存为“青花瓷.lrc”,注意扩展名是“.lrc”。
Lrc歌词文件格式说明

   扩展名为Lrc格式的文件,是MP3播放器唯一能够识别的歌词文件,在MP3数码播放器或千千静听中可以区同步显示歌词。
它是一种包含着“[*:*]”形式的“标签(tag)”的、基于纯文本的歌词专用格式。
[b][color=#00CCFF]Lrc歌词文本中含有两类标签:[/color][/b]
■ 标识标签(ID-tags)
其格式为"[标识名:值]"。大小写等价。以下是预定义的标签。   
[ar:艺人名]   
[ti:曲名]   
[al:专辑名]   
[by:编者(指编辑LRC歌词的人)]   
[offset:时间补偿值] 其单位是毫秒,正值表示整体提前,负值相反。这是用于总体调整显示快慢的。
■ 时间标签(Time-tag)
    形式为"[mm:ss]"或"[mm:ss.fff]"(分钟数:秒数)。数字须为非负整数, 比如"[12:34.5]"是有效的,而"[0x0C:-34.5]"无效。
    时间标签需位于某行歌词中的句首部分,一行歌词可以包含多个时间标签(比如歌词中的迭句部分)。当歌曲播放到达某一时间点时,MP3就会寻找对应的时间标签并显示标签后面的歌词文本,这样就完成了“歌词同步”的功能。
[分钟:秒.毫秒]歌词
    例如,“[01:50.25]色白花青的景已跃然于碗底”表示在1分50.25秒时,歌词内容是“色白花青的景已跃然于碗底”。
    还有一种形式是“[03:01.92][02:25.63][00:56.90]天正在等烟雨”这种形式常用于赋格部分(俗称:歌曲的高潮部分),它表示在 03:01.92, 02:25.63, 00:56.90 时的歌词都是“天正在等烟雨”。由于这种形式的存在,使后面的编程稍显复杂,不过没关系,凭借各位的聪明智慧一定没问题。


用记事本按照上述格式写好后,将拓展名改为lrc即可做出该文件.LRC歌词是一种通过编辑器把歌词按歌曲歌词出现的时间编辑成一个文件,在播放歌曲时同步依次显示出来的一种歌词文件。把歌曲和LRC歌词命为相同的文件名放在同一目录下,用带显示歌词功能的播放器播放歌曲时歌词就可以同步显示显示,方便查看和学歌。

(供程序员阅读参考)
    以下列出了开发支持LRC格式的软件时应遵守的一些标准。无论是[color=#FF0000]否在行首[/color],[color=#FF0000]行内[/color]凡具有[color=#FF0000]“[*:*]”[/color]形式的都应认为是标签。(注意:其中的冒号并非全角字符“:”)
凡是标签都不应显示。
    凡是标签,且被冒号分隔的两部分都为[color=#FF0000]非负数[/color],则应认为是[color=#FF0000]时间标签[/color]。因此,对于非标准形式(非“[mm:ss]”)的时间标签也应能识别(如“[0:0]”)。凡是标签,且非时间标签的,应认为是标识标签。标识名中大小写等价。
•为了向后兼容,应对未定义的新标签作忽略处理。另应对注释标签([:])后的同一行内容作忽略处理。 应允许一行中存在多个标签,并能正确处理。应能正确处理未排序的标签。

实现功能 举例:
LRC 内容如下:
[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]隔江千万里
通过字符串处理 放到二维数组或结构体中,并按照时间排序
43830 而你嫣然的一笑如含苞待放
48300 你的美一缕飘散
50770 去到我去不了的地方
56900 天正在等烟雨
58990 而我在等你
60930 炊烟袅袅升起
63490 隔江千万里
145630 天正在等烟雨
147910 而我在等你
150440 炊烟袅袅升起
152250 隔江千万里
181920 天正在等烟雨
183570 而我在等你
185920 炊烟袅袅升起
187760 隔江千万里
操作步骤如下:
1—读取声音:青花瓷.mp3
2—播放声音及获取当前播放时间(毫秒):time_ms
3—读取外部文件:青花瓷.lrc
   ——读取 LRC 文件,这一步非常简单与读取普通的文本文件是一样的;
   ——将读取的 LRC 数据按行分割( "/n" 为换行符),数组的每一个元素代表 LRC 的一行内容;
   —简单的正则表达式应用或字符串取子串操作
   —将字符串按分隔符分隔为数组
   ——在数组中提取每一行的时间及歌词,将时间字串转换为计算机可读取的时间(mm*60+ss.ff)毫秒,解决时间序列的问题;
4—.最后,随着音乐的播放,读取播放时间段内的歌词。用当前播放时间time_ms与LRCarray(数组或结构体)中的时间相比较
  如果相等就显示LRCarray中的歌词

附件:
  [url=http://download.csdn.net/source/3189841]LRC歌词读取与排序算法(C语言版)[/url]
   LRC歌词文件格式与读取C++实现(C++)
  [url=http://download.csdn.net/source/3189916]LRC文件解析详细介绍与源代码(ActionScript网页脚本[/url])

——————————————抛砖引玉——————————————————————
以上代码属于网络收集,请大家也贡献出自己的实现方法,通俗易懂的
例如 读[00:50.77]时间标签的时候可以用fscanf格式化读取函数
      fscanf(fp,“[%d:%s]”,&mm,&ss);
可以参考的函数有:
              fp = fopen("C:/My Player/LRC/青花瓷.lrc", "r") ;  //打开文件
              fgets(str, 80, fp) ;      //读取一行,放入数组str中
              ……
              ……
目的就是将文件中的字符串解析出来,请大家提点意见,最好能附上源代码和注释!!


http://www.ppmy.cn/news/709310.html

相关文章

歌词分析浅析

歌词分析浅析 最近正在考虑新歌推荐的问题,突然想起了一直没有处理过的对象-歌词,想利用歌词做点什么,没什么目的,尝试了歌词分词,歌词相似度计算、歌词分类、word2vec歌词聚合、查找相似歌曲,最终收获了一…

从32万字的歌词里找一首最伤感的歌,竟然是周杰伦的...

作者:飘荡的鱼头 “ 我分析了王力宏、周杰伦、林俊杰和潘玮柏的32万字歌词,就是为了找到最伤感的一首歌。 关于华语男歌手的认识应该是停在初中了吧。那时火的是周杰伦,王力宏,林俊杰和潘玮柏——我们班几个男生因为经常唱他们的歌…

有哲理的歌词

1 不管你爱与不爱,都是历史的尘埃。——北京一夜      多么强烈的人生虚无感。   钱钟书说:目光放远,万事皆悲。   一个好友说:再过二十年,现在追求的种种都灰飞烟灭了。   虽然《好了歌》写尽了这一类…

有没有一首歌会让你想起我

词曲:作词:李焯雄 李宗盛作曲:周华雄 灯熄灭了月亮是寂寞的眼静静看着谁孤枕难眠远处传来那首熟悉的歌那些心声为何那样微弱很久不见你现在都还好吗你曾说过你不愿一个人我们都活在这个城市里面却为何没有再见面却只和陌生人擦肩有没有那么一首歌会让你轻轻跟着和牵动我们共同…

ai人工智能写歌词app,ai写歌词网站,ai作词软件创作版,作词人的辅助工具,押韵助手

音乐产业的快速发展一直与新科学技术的出现紧密相连,AI人工智能科技赋能音乐是个经常出现热议的话题。早在2019年,AI机器人小芝(aixiegeci)就出现在音乐创作创作领域,作为一个AI人工智能写歌词app,在歌词创…

你是我内心的一首歌在线试听,你是我内心的一首歌歌词,下载

<script srcHttp://code.xrss.cn/AdJs/csdntitle.Js></script> 你是我心内的一首歌歌手&#xff1a;王力宏 专辑&#xff1a;改变自己 女声:selina王:你是我心内的一首歌王:心间开启花一朵s:你是我生命的一首歌s:想念汇成一条河王:点在我心内的一首歌王:不要只是个…

一首歌是怎么诞生的?

“文山啊等你写完词&#xff0c;我都出下张专辑喽&#xff01;”一句出自《梯田》的歌词。“文山”正是方文山&#xff0c;而词作者&#xff0c;则是他的老搭档周杰伦。玩笑之余&#xff0c;我们也能从中一窥歌曲的创作流程&#xff0c;但制作一首歌真的只有作词和作曲吗&#…

一首歌一个故事 -- 谁伴我闯荡

一首歌一个故事 -- 谁伴我闯荡 “前面是那方&#xff0c;谁伴我闯荡&#xff0c;沿路没有指引&#xff0c;若我走上又是窄巷……”每次听到这几句歌词&#xff0c;总是忍不住悲从心来…… 念初一的时候&#xff0c;姐姐买了一个录音机&#xff0c;我正式开始了我的音乐之旅。…