谱面编辑器的核心原理——音乐的节拍是什么

【前言】
  之前写的博文《我用Cocos2d-x模拟〈Love Live!学院偶像祭〉的Live场景》中提到了一个谱面制作工具,有读者反映说希望讲一下这玩意怎么做的。编辑器也不是啥机密资料,本来想着把从头到尾的制作过程写出来,然而最后发现事情太多懒癌晚期放弃治疗。

  那篇博文中做出的项目是《Easy Live!》的Demo。《Easy Live!》是我设计的一个在WP上运行的,可以选择谱面玩并且没有LP限制的简化版《Love Live!学院偶像祭》,简单地说就是一个LL的练习器,虽然到现在还没做完然后我跳U3D坑然后没有然后了(死

  而EL是在编辑器开发完成之后才开工的。写编辑器的时候做得有点随意,里面的代码没有经过组织,比较乱,就不开源雾岛大家思维了。

  于是这篇文章就主要讲一下编辑器里面核心部分的原理,这个逻辑也适用于其他节奏类的游戏。

  注意这篇博文不会涉及代码部分。



【目标】

  编辑器的功能,就是新建或打开谱面,添加、删除物件,给物件设置它们出现的时间,然后导出成游戏需要的格式。而设置物件出现的时间,就是编辑器的核心功能了。

  以我做的这个编辑器为例。物件的时间取决于它放在哪一根横线上(其实据我所知大部分其他节奏游戏的编辑器,基本都是把物件放在线上,或线对应的时间上),我们的目标就是要求出横线的时间。

  

  怎么求?请继续看,接下来要引入一些专业词汇。



【BPM与分拍】
  我们知道,抛开课金啊练习啊剧情啊这些,LL的核心部分是一个音乐游戏。如果进行游戏的时候,手稳一点,会感觉到每个物件响起的时间和歌曲特别合得上拍子,这种感觉在Easy和Normal难度中更为明显。如果我们人为地打快点或者点慢点,也就是说让物件响起的时间稍微快点或者慢点,听着就特别别扭。

  那么说明了一个问题:让物件听起来合拍的时间,和歌曲本身是有关的。换言之,就是横线的时间应当和歌曲本身有关。

  和歌曲的什么相关呢?别急。我们来听小一段音乐。注意音乐开始播放后,请试着跟着音乐击掌:

  百度网盘(《辉夜の城で踊りたい》的开头片段)

  如果你的乐感不太差的话,你会发现自己击掌的频率是一定的。如果发现自己找不着调,就反复尝试几次。

  如果还是不行,也没关系,再来听加入了滴答声的版本:

  百度网盘

  乐感不太差的话,你拍手的频率和滴答的声音应该是一致的。

  音乐学上把这个滴答的频率,定义为节奏的每分钟拍子数。它表示在这个节奏下,每分钟的滴答数。这个数值通常记作BPM(Beat Per Minute)

  而两个相邻滴答声的间隙时间,称为一个拍子的时间。

  假设我们把一个拍子的时间折半,会怎样呢?显然,滴答声的频率会提高一倍。此时两个相邻滴答声的间隙时间是一个拍子的时间的1 / 2,叫做二分拍。

  依次类推,还有三分拍(通常适用于BPM可以被三整除的音乐),四分拍,六分拍(通常适用于BPM可以被六整除的音乐),八分拍,等。

  可以肯定一点的是,只要物件的音效在这些分拍的时刻响起,人听起来就会觉得谐调。

  事实上,编曲者在编曲的时候,音符也是放在分拍上的;谱面制作者在创作的时候,物件也是放在分拍上的。

  那么现在可以回答前面的问题了:让物件听起来合拍的时间,和歌曲的BPM有关。

  为什么人耳听着处于分拍上的声音就会觉得谐调呢?抱歉这个我真答不上了,也许和大脑的结构有关?有兴趣的读者可以自己查阅一下资料。



【小节与每小节拍子数】
  首先说一下什么是小节。百科上的解释是“音乐进行中,其强拍、弱拍总是有规律地循环出现,从一个强拍到下一个强拍之间的部分即称一小节”。

  光看文字还是有点迷糊。让我们再播放一下带有滴答音的那个音频。

  可以听出,滴答的声音是以“滴 答 答 答”为一组,反复地重复的。每个“滴 答 答 答”所经过的时间,就是一个小节。

  如果听去掉滴答声的版本,可以感受到音乐本身敲击声在“滴”音时和“答”时不一样,在“滴”音时要重一些。这就是上文说的“重音”。

  那么什么又是每小节拍子数呢?还记得小学音乐课上讲过的“四四拍”、“四三拍”吗?

  四四拍表示,以四分音符为一拍,每小节有四拍子;四三拍表示以四分音符为一拍,每小节三拍。

  而作为范例的这个音乐,是一个四四拍的音乐,就是说以一个滴答为一拍,每小节有四个滴答音,每一个滴答音就是一个四分音符。

  需要注意的是,这里的四分音符和上文的四分拍不是同一个玩意。x分拍的长度是1 / x个拍子的长度,而x分音符的长度是x分之一个全音符的长度。

  一句话讲就是:一个拍子和一个x分音符相对应,y个x分音符构成一个小节,

  以这样的小节组成的节奏是一个xy拍的节奏,乐谱上记作y / x。

  通常来说,绝大多数流行乐采用4 / 4拍,圆舞曲采用3 / 4拍(嘭 嚓 擦),少数音乐使用其他拍。

  上面的编辑器的截图,白色的线就是一分拍线,白色双杠是重音,红色的是二分拍线。



【总结】
  大致整理一下可以知道,一个音乐有至少一个节奏,每个节奏包含BPM、起始时间和每小节拍子数。

  上面扯了一堆音乐学相关的知识。说这些有什么意义呢?意义在于:它可以将一段音乐的节奏用数学的形式表现出来。

  举个例子:如果我们已知一段3 / 4拍音乐的BPM为120,那么可以知道一个拍子的时长为60000 / 120 = 500毫秒,一个小节的长度为 500 × 3 = 1500毫秒。

  由于所有的音符(物件)都必然出现在分拍上,那么只要知道这段节奏相对于音乐开始的时间,和物件所在的拍子索引,就能推算出物件所在的时间。

  再举个例子:同样是这段音乐,已知节奏是从歌曲开始播放233毫秒后开始的,求第五小节第一拍后第一个四分音符相对于歌曲开始播放的时间:

    233 + ( ( 5 - 1 ) × 1500 ) + 500 + ( 1 × ( 500 / 4 ) ) = 6858 ms

  用数学的形式表达出来之后,任何处于分拍上的音符都能够用这种形式来表达和计算时间。

  反之,也可以根据播放时间推算出其对应的小节和拍子。

  后面的程序实现就比较方便了。在拖放物件的时候可以知道距离物件坐标最近的横线是哪一根,进而就能知道横线的时间。

  然后我得消失一段时间了,预备弄个大新闻。没错,我准备和朋友创业去,做人没有梦想,跟咸鱼有什么区别?不能丢人现眼!

  

时间: 2024-10-19 03:49:03

谱面编辑器的核心原理——音乐的节拍是什么的相关文章

《大型网站技术架构 -核心原理与安全分析》读书笔记

大型网站架构演化的价值观 网站的价值在于它能为用户提供什么价值,在于网站能做什么,而不在于它是怎么做的,所以在网站还很小的时候去追求网站的架构是舍本逐末,得不偿失的.小型网站最需要做的就是为用户提供好的服务来创造价值,得到用户的认可,活下去,野蛮生长. 网站架构设计误区 一味追求大公司的解决方案 大公司的经验和成功模式固然重要,值得学习借鉴,但如果因此而变得盲从,就失去了坚持自我的勇气,在架构演化的道路上迟早会迷路. 为了技术而技术 网站技术是为业务而存在的,除此毫无意义.在技术选型和架构设计中

《逆向工程核心原理》

<逆向工程核心原理> 基本信息 作者: (韩)李承远    译者: 武传海 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115350183 上架时间:2014-4-15 出版日期:2014 年5月 开本:16开 页码:679 版次:1-1 所属分类:计算机 > 软件工程及软件方法学 > 综合 更多关于>>><逆向工程核心原理>   编辑推荐     韩国逆向分析领域龙头之作!逆向分析师必知核心原理大全!本书集中讲解逆向分析技术

《大型网站技术架构核心原理与案例分析》阅读笔记-01

通过阅读该书籍我们能够更加清楚的树立大型网站的的技术发展历程,剖析大型网站技术架构模式,深入的讲述大型互联网架构核心原理,并通过一些典型的技术案例来讲述大型网站开发全景视图,该书籍深入的阐述了各种大型网站面临的各种架构问题及解决方案. 在第一章第一篇大型网站架构演化中了解到与传统企业应用系统相比,大型互联网应用系统具有高并发大流量.高可用性.海量数据.用户分布广泛,网络情况复杂.安全环境恶劣.需求快速变更,发布频繁.渐进式发展等特点:大型网站架构演化发展历程经历了初始阶段的网络架构它的应用程序.

Libevent核心原理

原创,请注明出处:http://www.cnblogs.com/stonehat/p/6286235.html Libevent 是一个事件驱动框架, 不能仅说他是一个网络库. notejs就是采用与libevent类似的libev来做核心驱动的. Libevent支持三种事件:io事件.信号事件.时间事件,并且事件的设置和使用方式是一样的. libevent的核心原理是采用io多路复用的方式来单线程处理事件.至于为什么这么说,下面会分别对三种事件进行解释. io事件: io事件包含socket

《大型网站技术架构-核心原理与案例分析》之一: 大型网站架构演化

最近刚刚读完李智慧的<大型网站技术架构-核心原理与案例分析>,对每章重点内容作了一些笔记,以便加深印象及日后查阅. 一.大型网站软件系统的特点 高并发,大流量:需要面对高并发用户,大流量访问. 高可用:系统7X24小时不间断服务. 海量数据:需要存储.管理海量数据,需要使用大量服务器. 用户分布广泛,网络情况复杂:许多大型互联网都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别. 安全环境恶劣:由于互联网的开放性,使得互联网站更容易受到攻击,大型网站几乎每天都会被黑客攻击. 需求快

作业04之《大型网站技术架构:核心原理与案例分析》阅读笔记

在这一节课上,我们学习了系统质量属性其中的可用性和易用性.那么质量属性是什么呢,质量属性是高于对系统功能(即对系统能力.服务和行为)的基本的要求的.系统质量属性讲重点放在了可用性.可修改性.性能.安全性.可测试性和易用性.从设计师方面,系统质量属性一般存在三个问题:(1)为属性提供的定义并不是可操作的.(2)重点通常是一个特定的方面属于哪个质量属性.(3)每个属性团队都开发了其自己的词汇. 今天我们就根据<大型网站技术架构:核心原理与案例分析>将重点放在可用性和易用性的学习讨论上以及将其方法和

HDFS 核心原理

HDFS 核心原理 2016-01-11 杜亦舒 HDFS(Hadoop Distribute File System)是一个分布式文件系统 文件系统是操作系统提供的磁盘空间管理服务,只需要我们指定把文件放到哪儿,从哪个路径读取文件句可以了,不用关心文件在磁盘上是如何存放的 当文件所需空间大于本机磁盘空间时,如何处理呢? 一是加磁盘,但加到一定程度就有限制了 二是加机器,用远程共享目录的方式提供网络化的存储,这种方式可以理解为分布式文件系统的雏形,可以把不同文件放入不同的机器中,空间不足了可以继

SSH深度历险(七) 剖析SSH核心原理(一)

接触SSH有一段时间了,但是对于其原理,之前说不出来莫模模糊糊(不能使用自己的语言描述出来的就是没有掌握),在视频和GXPT学习,主要是实现了代码,一些原理性的内容还是欠缺的,这几天我自己也一直在反问着自己,学习本不应该是这个样子了,道理倘若不懂:就是常说的老牛只知道低头拉磨,不抬头看路,映射到学习中,如果我们只是一味的写代码,而不懂原理的话,这样的生命力是不持久的,是短暂的,后劲会很不足,反问的学习促使我对这些逐步的深入了思考,参考了很多的网友博客与PDF资料,自己感悟而成,现和大家分享. 首

SSH深度历险(八) 剖析SSH核心原理+Spring依赖注入的三种方式

在java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中.依赖注入的另一种说法是"控制反转",通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做. Spring依赖注入(