文档章节

浅谈动感歌词-歌词生成篇

aak
 aak
发布于 2017/01/11 02:00
字数 1046
阅读 72
收藏 2

1引言

在写这生成篇时,我还是在烦恼应该是先写歌词解析篇,还是先写歌词生成篇,后来我想一想,其实还是要先有歌词文件,才有解析嘛,当然,我们也可以通过现有的歌词(krc、trc和ksc等)直接跳过这一步,直接解析歌词即可。

2制作软件

这里介绍一下《小灰熊卡拉ok字幕制作软件》,我们可以通过一些专业的制作软件,来理清和弄懂歌词的制作原理。这里先上个截图:

由图和软件制作歌词的使用教程,我们可以知道如下信息:

1.歌词以行为单位制作,逐【字】制作

2.在制作歌词时,软件似乎已经把每一行歌词的【字】都分割好了,应该是为了后面方便制作歌词,所以预先把行歌词分割成每一个【字】,这里的【字】包括:英文单词、数字串、中文,其中空格【只能】与英文单词、数字串或者中文组成一个【字】,且空格的位置要放在后面

3.在制作歌词的过程中,音乐响起,听到行歌词中的【字】时,就按一下【空格】,这里按一下【空格】,其实应该就是记录该【字(A)】的出现时间,当按下下一个【字(B)】或者换行时,那就可以记录【字(A)】的持续时间

4.歌词换行,则记录行歌词的开始时间

5.歌词制作完成后,则根据歌词格式,生成对应歌词文件

注:第2和第3点是实现制作歌词的重点,如无法理解,则无法制作歌词。

3自实现制作软件

知道制作歌词的原理后,我们就要动手自己编写和实现制作歌词软件,这里我采用Java Swing来编写一个桌面程序,界面方面参考酷狗实现。

3.1API

Java Swing:Graphics2D.setClip。当然也有Android的,后面的博客会说到。

 

由图可知,Graphics2D在绘画文本时,先画默认颜色的歌词文本,再设置clip层的长度宽度,然后再绘画【高亮】歌词文本,只要我们不断地修改clip层的宽度,就是我们想要的动感歌词效果了。当然我们在制作歌词时,只需要设置渐变递增宽度为每个【字】的宽度就可以了。

3.2实体类设计

3.2.1歌词实体、行歌词实体、标签实体

采用《浅谈动感歌词-歌词分析篇》里的实体类,制作歌词时,生成的数据,会保存到,歌词实体(LyricsInfo)里面,方便歌词的预览和生成。

3.2.2歌词文件生成器

这个类的作用,就是为了方便后面拓展支持多种动感歌词格式。

 

3.2.3HRCX歌词生成器

 

3.3界面

3.3.1录入歌词

 

3.3.2制作歌词

思路:

1.大概就是将【录入歌词】的歌词文本,进行行分割

2.获取行歌词后,对歌词的内容进行分析,并进行【字】分割

3.播放歌曲,按下【左右箭头】和【空格】制作歌词

4.分割部分代码:

 

5.界面

注:紫色,是已完成。红色,表示正在生成。

3.3.3制作完成

 

3.4歌词生成

部分代码,文件后缀名:hrcx

3.5歌词效果预览

 

4参考

卡拉OK歌词实现

注:这个是好像是Android的视频教程,我也是从这个视频的原理来找到Java Swing的API的。

5源码

乐乐音乐

注:这是我用Java Swing写的一个PC音乐播放器

6最后

下一篇,将介绍动感歌词的解析。如有侵权,麻烦告知。

© 著作权归作者所有

aak

aak

粉丝 2
博文 7
码字总数 7857
作品 0
广州
私信 提问
不在乎y/LyricTools

LyricTools 支持qrc、krc、trc、网易云音乐的歌词相互转,支持输出krc、qrc、trc、 网易云音乐、srt、smi、lrc、ksc、ssa、foobar2000插件eslyric格式 鉴于有些人实在让人生气,所以不再开源...

不在乎y
2015/11/01
0
0
Android仿酷狗桌面悬浮歌词效果

引言 该悬浮歌词功能是乐乐音乐中的一个模块,主要是APP在后台运行时,在手机的桌面上出现一个歌词窗口,方便用户可以随时随地地查看歌词及操作APP,除了通知栏外,多提供了一个操作APP界面,...

只有一条尾巴的猫
2018/05/13
0
0
动感歌词制作工具--MakeLyric

源码中带有两个工具,一个制作歌词的(暂时只支持中文歌词); 另一个是一个通用的转换工具,批量将现有qrc, krc, trc, 网易云音乐歌词相互转换,另可输出lrc及ksc格式。 关于qrc的问题,以前...

不在乎y
2015/12/01
1K
1
我分析了2837首歌曲,做了个信息检索与信息抽取系统

写在前面 首先,作者受到 《我分析了42万字的歌词,为了搞清楚民谣歌手们在唱些什么》 这篇文章的影响,加上自己也是一个音乐爱好者,所以决定做一个网易云热门歌手歌词信息检索与信息抽取系...

牛奶芝麻
2018/08/02
0
0
歌词显示控件的实现上——歌词解析

最近打算仿网易云音乐的音乐播放器,除了网络框架、接口数据等这些外,最核心的就是音乐的播放和歌词的显示。 考虑到歌词显示控件涉及到歌词解析,自定义控件的实现等等诸多方面,可能文章的...

安卓干货营
2017/10/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
今天
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
10
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
8
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
81
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部