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

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最后

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

时间: 2024-12-22 10:27:34

浅谈动感歌词-歌词生成篇的相关文章

浅谈动感歌词-歌词显示篇

1引言 经过分析篇.生成篇和解析篇之后,相信大家对动感歌词都已经不再陌生了,现在最重要的就是,动感歌词怎样显示的问题,这里就不再介绍java swing上面怎样显示了,因为在生成篇,已经做了一些简单的介绍,这一篇着重说一下动感歌词在android上面怎样显示. 2显示 关于歌词的平滑滚动,之前一直都是用android Scroller来滚动,发现在歌词滑动快进方面,一直都实现不了,能力有限.幸好,发现了一个帖子,这个帖子真是帮了大忙,这里先贴一下,他的博客,我强烈推荐大家看一下他的博客,他说得比

浅谈动感歌词-歌词解析篇

1引言 要解析动感歌词文件,首先就要清楚动感歌词的文件内容,当然歌词的文件内容,我们已经在分析篇的文章里面介绍过了,这里将不再做详细的介绍,当我们可以把歌词成功解析出来后,再结合歌词生成篇,一个简单的歌词格式转换工具也就出来了. 2歌词解析 歌词解析,其实就是把文件里面的标签内容.歌词时间和歌词内容解析出来,当然,为了后期拓展其它的动感歌词格式,我们这里要好好设计一番. 2.1实体类 2.1.1歌词读取器 主要用来约束动感歌词读取器要实现的方法,可用于拓展实现其它的动感歌词格式. 2.1.2歌词

浅谈编码习惯之注释篇

软件编码过程中,当注释代码时,要考虑到不仅将来维护你代码的开发人员要看,而且你自己也可能要看.用Phil Haack大师的话来说就是:"一旦一行代码显示屏幕上,你也就成了这段代码的维护者".因此,对于我们写得好(差)的注释而言,我们将是第一个受益者(受害者).以下是我个人的简单看法和平常的习惯. 1.模块注释 在一个程序模块的开始,应用注释说明模块的名字.功能.开发者和日期和版本变更历史,如下所示: /******************************************

浅谈算法和数据结构

: 一 栈和队列 http://www.cnblogs.com/yangecnu/p/Introduction-Stack-and-Queue.html 最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算

浅谈算法和数据结构: 四 快速排序

原文:浅谈算法和数据结构: 四 快速排序 上篇文章介绍了时间复杂度为O(nlgn)的合并排序,本篇文章介绍时间复杂度同样为O(nlgn)但是排序速度比合并排序更快的快速排序(Quick Sort). 快速排序是20世纪科技领域的十大算法之一 ,他由C. A. R. Hoare于1960年提出的一种划分交换排序. 快速排序也是一种采用分治法解决问题的一个典型应用.在很多编程语言中,对数组,列表进行的非稳定排序在内部实现中都使用的是快速排序.而且快速排序在面试中经常会遇到. 本文首先介绍快速排序的思

浅谈php生成静态页面

一.引 言 在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存相关信息的话,整体的管理上比较繁琐,比方修改编辑.比方阅读权限限制等,但是,对应一些我们经常频频使用的文件,比方说,开发的新闻发布系统,我们不希望很多用户都读取数据库才显示结果,这样一方面消耗了服务器的资源,另一方面占去了浏览者大量可贵的响应时间,所有,有了"静态页面话"的做法,当前很多网站都采用这种技术,一般都是由管理后台控制,或者生成html直

浅谈Hibernate--入门篇

Hibernate是什么 Hibernate是一个轻量级的ORMapping框架 ORMapping原理(Object Relational Mapping)就是把对象里面的数据和数据库里面的数据,按照一定的规则进行映射的过程. ORMapping基本对应规则: 1:类跟表相对应 2:类的属性跟表的字段相对应 3:类的实例与表中具体的一条记录相对应 Hibernate的实现方式 Hibernate解决的问题: 通过上图我们也能发现,Hibernate主要用来实现Java对象和表之间的映射,除此之

浅谈 js 字符串 trim 方法之正则篇

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

浅谈视频的制作

摘 要:在当今社会视频已经成为人们生活和工作日以追求的物质和精神需求.视频让人们的生活更富客观性和真实性.它记录了人生的美好,当回望过去时,它就是见证.它也是生活中的一抹调味剂,可以使人们愉悦身心,缓解工作.生活的压力.这些可以运用Adobe Premiere Pro CS3来制作完成,刻录成VCD.DVD等等.下面我就简单介绍一下如何运用Adobe Premiere Pro CS3. 关键词:视频:Adobe Premiere Pro CS3:制作: 视频技术最早是为了电视系统而发展,但是现在