一种解析歌词并使其与歌曲同步播放的装置及方法
技术领域
本发明涉及嵌入式多媒体领域,特别涉及一种解析歌词并使其与歌曲同步播放的装置及方法。
背景技术
近年来,随着科技水平和经济的发展,人们对精神生活的要求也越来越高。作为多媒体技术的代表,音乐一直以来都为全世界的人们所喜爱。传统的音乐多来自于电脑、Mp3播放器等,随着移动手持设备的普及,越来越多的人倾向于用手机来听音乐。在繁忙工作后的闲暇之余,插上耳机欣赏美妙的音乐,已为大家所接受。如果再加上歌词的同步显示,手机音乐将更具魅力。
LRC歌词是一种包含着“[*:*]”形式的“标签(tag)”的、基于纯文本的歌词专用格式。这种歌词文件既可以用来实现卡拉OK功能(需要专门程序),又能以普通的文字处理软件查看、编辑。当然,实际操作时通常是用专门的LRC歌词编辑软件进行高效编辑的。
发明内容
本发明的目的是提供一种解析歌词并使其与歌曲同步播放的装置及方法,其能实现在手机播放歌曲时同步显示歌词。
一方面,本发明提供一种解析歌词并使其与歌曲同步播放的方法,其适用于手机中,包括以下步骤:
S1、建立歌词解析器,定义所述歌词解析器的数据结构,使其能够记录歌词文件的所有有效信息;
S2、打开歌词文件,通过所述歌词解析器逐行解析,并将解析得到的结果保存到所述解析器数据结构中形成歌词数据结构数组;
S3、删除所述歌词数据结构数组中的冗余及错误信息;
S4、对得到的所述歌词数据结构数组以时间大小为基准点进行排序;
S5、根据所述歌词文件内容的顺序调整所述歌词数据结构数组,并将当前播放时间与所述歌词文件包括的时间进行比较,实现歌词的同步播放。
所述步骤S1中还包括以下步骤:
S11、分析所述歌词文件的组成;
S12、根据所述歌词文件的组成,自定义适合记录所述歌词文件有效信息的歌词解析器的数据结构。
所述步骤S2中还包括以下步骤:
S21、打开歌词文件,得到其编码格式;
S22、逐行解析所述歌词文件的时间标签,忽略标识标签中offset字段以外的字段;
S23、若解析出错,得到了不合法的时间,则进行出错处理;
S24、将解析得到的时间标签和对应的歌词文本存储到所述歌词解析器数据结构中形成歌词数据结构数组。
所述步骤S4中还包括以下步骤:
S41、以步骤S3得到的时间为基准点,使用冒泡排序法对所述歌词数据结构数组进行排序;
S42、如果出现同一时间对应不同歌词,则进行出错处理。
所述步骤S5还包括以下步骤:
S51、将外部歌曲重命名为与所述歌词文件同名,或者将所述歌词文件重命名为与外部歌曲文件同名,本步骤不包括对文件后缀名的重命名;
S52、获取手机播放器正在播放歌曲的播放时间;
S53、所述手机平台定时刷新函数render,同名歌曲的当前播放时间与歌词索引所指时间进行对比,若播放时间不小于索引所指时间,则该句歌词高亮显示;否则,索引进行自增,等到下一次刷新时再行比较。
另一方面,一种解析歌词并使其与歌曲同步播放的装置,其适用于手机中,包括:
歌词解析器,所述歌词解析器具有的数据结构能够记录歌词文件的所有有效信息;
解析单元,用以打开歌词文件,并通过所述歌词解析器逐行解析,将解析得到的结果保存到所述解析器数据结构中形成歌词数据结构数组;
整合单元,用以删除所述歌词数据结构数组中的冗余及错误信息;
排序单元,用以对得到的所述歌词数据结构数组以时间大小为基准点进行排序;
同步单元,用以根据所述歌词文件内容的顺序调整所述歌词数据结构数组,并将当前播放时间与所述歌词文件包括的时间进行比较,实现歌词的同步播放。
所述歌词解析器还包括以下模块:
分析所述歌词文件的组成的模块;
根据所述歌词文件的组成,自定义适合记录所述歌词文件有效信息的歌词解析器的数据结构的模块。
所述解析单元还包括以下模块:
用以打开歌词文件得到其编码格式的模块;
用以逐行解析所述歌词文件的时间标签,忽略标识标签中offset字段以外的字段的模块;
用以解析出错得到了不合法的时间时,进行出错处理的模块;
用以将解析得到的时间标签和对应的歌词文本存储到所述歌词解析器数据结构中形成歌词数据结构数组的模块。
所述排序单元还包括:
以时间为基准点,使用冒泡排序法对所述歌词数据结构数组进行排序的模块;
负责当出现同一时间对应不同歌词时,进行出错处理的模块。
所述同步单元还包括:
重命名模块,用以将外部歌曲重命名为与所述歌词文件同名,或者将所述歌词文件重命名为与外部歌曲文件同名,所述重命名模块不支持文件后缀名的重命名;
取时模块,用以获取手机播放器正在播放歌曲的播放时间;
比较模块,用以当所述手机平台定时刷新函数render时,同名歌曲的当前播放时间与歌词索引所指时间进行对比,若播放时间不小于索引所指时间,则该句歌词高亮显示;否则,索引进行自增,等到下一次刷新时再行比较。
采用本发明所述的一种解析歌词并使其与歌曲同步播放的装置及方法,首先建立歌词解析器,定义所述歌词解析器的数据结构,使其能够记录歌词文件的所有有效信息;然后通过所述歌词解析器逐行解析,并将解析得到的结果保存到所述解析器数据结构中形成歌词数据结构数组;再对得到的所述歌词数据结构数组以时间大小为基准点进行排序;最后根据所述歌词文件内容的顺序调整所述歌词数据结构数组,并将当前播放时间与所述歌词文件包括的时间进行比较,实现歌曲和歌词的同步播放。
附图说明
图1为本发明所述方法的主流程图;
图2为本发明所述方法一实施例的流程图;
图3为本发明所述的循环定时刷新步骤的流程图。
具体实施方式
下面结合附图和实施例进一步说明本发明的技术方案,本实施例是通过适用在手机上进行说明的。
参见图1,本发明提供一种解析歌词并使其与歌曲同步播放的方法100,其适用于手机中,包括以下步骤:
S1、建立歌词解析器,定义所述歌词解析器的数据结构,使其能够记录歌词文件的所有有效信息。
作为一实施例,所述步骤S1中还包括以下步骤:
S11、分析所述歌词文件的组成。
S12、根据所述歌词文件的组成,自定义适合记录所述歌词文件有效信息的歌词解析器的数据结构。
S2、打开歌词文件,通过所述歌词解析器逐行解析,并将解析得到的结果保存到所述解析器数据结构中形成歌词数据结构数组。
作为一实施例,所述步骤S2中还包括以下步骤:
S21、打开歌词文件,得到其编码格式。
S22、逐行解析所述歌词文件的时间标签,忽略标识标签中offset字段以外的字段。
S23、若解析出错,得到了不合法的时间,则进行出错处理。
S24、将解析得到的时间标签和对应的歌词文本存储到所述歌词解析器数据结构中形成歌词数据结构数组。
S3、删除所述歌词数据结构数组中的冗余及错误信息。
S4、对得到的所述歌词数据结构数组以时间大小为基准点进行排序。
作为一实施例,所述步骤S4中还包括以下步骤:
S41、以步骤S3得到的时间为基准点,使用冒泡排序法对所述歌词数据结构数组进行排序。
S42、如果出现同一时间对应不同歌词,则进行出错处理。
S5、根据所述歌词文件内容的顺序调整所述歌词数据结构数组,并将当前播放时间与所述歌词文件包括的时间进行比较,实现歌词的同步播放。
作为一实施例,所述步骤S5还包括以下步骤:
S51、将外部歌曲重命名为与所述歌词文件同名,或者将所述歌词文件重命名为与外部歌曲文件同名,本步骤不包括对文件后缀名的重命名。
S52、获取手机播放器正在播放歌曲的播放时间。
S53、所述手机平台定时刷新函数render,同名歌曲的当前播放时间与歌词索引所指时间进行对比,若播放时间不小于索引所指时间,则该句歌词高亮显示。否则,索引进行自增,等到下一次刷新时再行比较。
参见图2,图2是一个实施例的流程图,首先定义歌词文件的数据存储结构,然后打开歌词文件,根据歌词编码格式,逐行解析歌词文件。如果解析出错,说明歌词文件有问题,进行出错处理。等逐行处理过后,删除多余的信息:主要包括标识标签以及无意义的时间标签(如负值时间之类的)。至此,得到的数据结构数组可能是有序的,也可能是无序的,完全由歌词文件决定。为了便于同步,必须将歌词进行排序,即以时间大小为基准点进行排序。有的歌词文件的标识标签还具有offset字段,该字段是时间补偿,正值表示将歌词整体提前,负值则表示将歌词整体滞后,所以还需要进行微调:根据所述歌词文件内容的顺序进行调整,并将当前播放时间与所述歌词文件包括的时间进行比较,实现歌词的同步播放。
参见图3,图1中的步骤S5有实现歌词与歌曲同步的步骤,该步骤需要在一个循环定时刷新函数中实现(图3中的手机刷新函数)。定时刷新保证歌曲播放时间playTime会不断更新,当playTime不小于歌词数据结构lrcStruc t索引index所指的lrcTime时,将该时间所指的歌词高亮显示,否则index自增一个,等待下一次刷新时重新比较playT与lrcTime,如此循环,直到歌曲播放完毕。
另外,本发明还提供一种解析歌词并使其与歌曲同步播放的装置,其适用于手机中,包括:
歌词解析器,所述歌词解析器具有的数据结构能够记录歌词文件的所有有效信息。作为一实施例,所述歌词解析器还包括以下模块:
分析所述歌词文件的组成的模块。
根据所述歌词文件的组成,自定义适合记录所述歌词文件有效信息的歌词解析器的数据结构的模块。
解析单元,用以打开歌词文件,并通过所述歌词解析器逐行解析,将解析得到的结果保存到所述解析器数据结构中形成歌词数据结构数组。作为一实施例,所述解析单元还包括以下模块:
用以打开歌词文件得到其编码格式的模块。
用以逐行解析所述歌词文件的时间标签,忽略标识标签中offset字段以外的字段的模块。
用以解析出错得到了不合法的时间时,进行出错处理的模块。
用以将解析得到的时间标签和对应的歌词文本存储到所述歌词解析器数据结构中形成歌词数据结构数组的模块。
整合单元,用以删除所述歌词数据结构数组中的冗余及错误信息。
排序单元,用以对得到的所述歌词数据结构数组以时间大小为基准点进行排序。作为一实施例,所述排序单元还包括:
以时间为基准点,使用冒泡排序法对所述歌词数据结构数组进行排序的模块。
负责当出现同一时间对应不同歌词时,进行出错处理的模块。
同步单元,用以根据所述歌词文件内容的顺序调整所述歌词数据结构数组,并将当前播放时间与所述歌词文件包括的时间进行比较,实现歌词的同步播放。作为一实施例,所述同步单元还包括:
重命名模块,用以将外部歌曲重命名为与所述歌词文件同名,或者将所述歌词文件重命名为与外部歌曲文件同名,所述重命名模块不支持文件后缀名的重命名。
取时模块,用以获取手机播放器正在播放歌曲的播放时间。
比较模块,用以当所述手机平台定时刷新函数render时,同名歌曲的当前播放时间与歌词索引所指时间进行对比,若播放时间不小于索引所指时间,则该句歌词高亮显示。否则,索引进行自增,等到下一次刷新时再行比较。
需要指出的是,本发明所述的一种解析歌词并使其与歌曲同步播放的方法与一种解析歌词并使其与歌曲同步播放的装置,两者在原理和实施上是相同或类似的,故其重复部分不再赘述。
本技术领域中的普通技术人员应当认识到,以上的实施例仅是用来说明本发明,而并非用作为对本发明的限定,只要在本发明的实质精神范围内,对以上实施例的变化、变型都将落在本发明的权利要求书范围内。