【全文转自浆糊论坛,不代表本人观点】
【本文作者:CRS】
【原文链接:http://bbs.rohome.net/thread-920309-1-1.html】
优 雅 的 变 速[上篇]
初级篇
第一章:变速的分类及bpm与格线的定义
第二章:A类变速的基本原理
第三章:B类变速的基本原理
中级篇
第四章:A类变速的一般式函数方程及其函数图形
第五章:A类变速的Excel变速方程表及其运用
第六章:B类变速的Excel格线变速表及其运用
高级篇
第七章:C类变速的应用之A类变速的等时点
第八章:A类变速的比时点与B类变速的联系
第九章:C类变速的应用之复合式B类变速
超级篇
第十章:简单的复合式A类变速
第十一章:复合式A类变速与复合式B类变速的等效应用
究级篇
第十二章:变速的可视性效果与播放器的关系
第十三章:变速的值域选择与格线的动态分配
终级篇
第十四章:变速的微分和微分变速的制作
第十五章:其它变速和变速的制作规律
无级篇
第十六章:变速与音乐的艺术融合
前言:
Bms音乐游戏中的变速是一种加速减速效果,是bms制作中很重要的一部分。它的艺术效果可以很好地配合音乐和键型,使得bms更加的美妙。这里的变速是指在bms中,同行的键的以不同的速度下落。所谓同行,就是指在同一个水平线上的键。bms文件本身无法实现各轨的分轨变速,而mania里面的“4D notes”特效就是每个轨道一个速度的分轨变速的一种特例。另外,bms也无法实现0速和负值速度(就是键往回走-_-)。这些变速在此仅提及,不讨论这些。下面分层次探讨bms优雅的变速。
初 级 篇
第一章:变速的分类及bpm与格线的定义
Bms里的变速大致分为三类,这里以A,B,C区分。
A类变速是我们最常用的变速,可以说是纯粹的视觉变速,处理对象通常以一行键为单位,使其掉落之前呈现快或慢的视觉效果,并且变速过程中没有其他的键落下。A类变速不会影响键在格线中的位置,所以也可以叫做非变格变速。
B类变速是整体的变速,也是很常用的一种,处理对象通常是一串键或者是很多行键,使它们整体的速度与原速度不同,而是使用一个新的不变的速度掉落,变速过程中可以有很多键。B类变速会影响键在格线中的位置,所以也可以叫做变格变速。
C类变速是A,B两类变速的混合体,既有整体变速也有某行键的视觉变速,比较复杂,也是很多初学者不易掌握的变速方式。C类变速会影响键在格线中的位置,也会限制视觉变速的取值范围,我们可以叫它混合变速。
BPM的意思就是Beat Per Minute,每分钟的节拍数。如120bpm的歌曲就是每分钟120拍,而4拍=1小节,也就是说每分钟有30小节。反过来算,就是1拍=1/2秒,1小节=2秒。从这里可以推理出一个公式:
1拍=60/bpm(秒)
用这个公式我们可以算一下贵族ⅢSHD(bpm150)最后一段秒杀的难度:
一拍=60/150=0.4秒,而键用的是64线,也就是说一拍里面有16行键只用了0.4秒,就算是只按一列的键,那么就是16/0.4=40,要有1秒种点40下的手速,人类是不可能的。这个公式在bms制作的其他领域可能会用到,这里不详细介绍。
bmse编辑器里的格线是衡量键距的标准,为了更清楚地定义格线的种类,请看下面的图例:
图1 分割小节的叫做小节线也就是1线,也就是4拍;
1/2音符的线叫做2线,也就是2拍;
1/4音符的线叫做4线,也就是1拍;
1/8音符的线叫做8线,也就是1/2拍;
1/16音符的线叫做16线,也就是1/4拍;
1/32音符的线叫做32线,也就是1/8拍;
1/64音符的线叫做64线,也就是1/16拍。
我们做歌最常用的制作背景是16线的,图中就是如此。另外还有3,6,12,24,48的格线,原理是一样的,主要用作3拍子的歌和变速中运用,大家应该都理解。值得一提的是“FREE”这个格线并非free,其实它是把64线再分为3格,也就是192线,它的用途不只是做BT歌曲,有些变速是需要用到它的,后面会介绍。
下面几章将分类介绍这三种变速,讨论的话题也将由浅入深。
第二章:A类变速的基本原理
首先,我们回顾一下初中的物理知识,来做一道关于走路的问题。
【例1】如图,两地之间有一段直线路程S,现在要求路人甲用T的时间匀速走完,请问他是速度应该为多少?
图2
【解答】:速度=路程/时间
V=S/T
【例2】如图,两地之间有一段直线路程S,现在要求路人乙用T1的时间匀速走完S1的路程,再用T2的时间匀速走完S2的路程,S=S1+S2,请问他在S1路程中的速度和S2路程中的速度各是多少?平均速度是多少?
图3
【解答】:速度1=路程1/时间1
V1=S1/T1
速度2=路程2/时间2
V2=S2/T2
平均速度
=总路程/总时间
V=(S1+S2)/(T1+T2)=S/T
Bms的变速就类似上面的走路问题。Bms文件最终由播放器(如mania等)来读取。读取的方式我们可以看作是由红色标准线由下往上顺序读取,可以比作红色标准线在谱面上由下往上走。如读不到bpm也就是速度指令,那么按照原来的速度读取,开始的速度如果不写就默认为bmse里编写的速度为初速度。有了这种比喻,我们可以轻松的把bmse里的读取与走路问题联系起来:
S就是bmse里面的格线,V就是bpm,T就是走过这段格线所需要的时间,如图:
图4 图5
由以上例题,我们可以清楚地看出S,V,T三者之间的关系。在bms中,键的T是常量,也就是说键原本应该什么时候到达标准线,变速后仍然是那个时间到线,不会因为变速而导致后面的键不对音。T为常量,而T=S/V,也就是说S/V是常量。由例2我们可以知道,T=T1+T2,T1=S1/V1,T2=S2/V2,所以我们可以得到以下方程:
S/V=S1/V1+S2/V2
在例2中,如果V1=V2,那么就是变速的特例(其实就是没变速-_-),我们研究时一般都默认V1≠V2。在上面两个图中,图5是图4的变速效果,我们可以计算一下两种速度的T:
S为格线,我们可以有几种看法:
1)把总体看作1,那么S=1,S1=1/4,S2=3/4
2)把总体看作4,那么S=4,S1=1,S2=3
3)把总体看作8,那么S=8,S1=2,S2=6
4)把总体看作16,那么S=16,S1=4,S2=12
5)把总体看作32,甚至是64……
我们选哪一种呢,最好的选择是2),也就是格线数为整数且无公约数的一组。
V为格线开始处的bpm也就是V=120,V1=60,V2=180
T=S/V=4/120
T1=S1/V1=1/60
T2=S2/V2=3/180
通过计算我们可以验证T=T1+T2,所以证明了以上方程S/V=S1/V1+S2/V2
了解了变速的原理,我们开始自己制作一个变速吧,以最常见为例:
【例3】有两行键,要求在第一个键按下之后,给予第二行键变速,第二行键按下之后回归原速,原bpm=120,目标变速效果为:将原速分为两速,先慢后快。具体如图:
图6
【解答】要求变速的是第二行,也就是我们研究的工作区域是第一行与第二行之间的格线,也就是4格16线,也就是我们所说的S区域。速度V=bpm=120为变速前速度。然后我们开始变速,先慢后快意味着V1<V<V2,按照通常变速的思路,我们可以选择S1<S2<S,也就是用慢速走完一小部分路程,用快速走完一大部分路程。下面我们来确定格线,按照格线的选择规律及计算方便,我们设S=4,S1=1,S2=3。然后我们确定分速度,按照简单的变速习惯,我们设慢速V1=1/2V=60。将以上速度带入方程S/V=S1/V1+S2/V2,我们可以得到:
4/120=1/60+3/V2
解方程得,V2=180
写入bmse后如图:
图7
记得要在变速后,也就是第二行键边上写上原来的速度,也就是bpm=120。所谓变速,变的是键落到红色标准线之前的速度,而一旦变速完毕,也就是键到红色标准线的时候,如果下行键没有变速,那么记得速度归位为原来的bpm。
做完这题,聪明的你一定有一个想法,为什么我们要选择S1=1,S2=3?为什么变速的V1要选择60?这道题的解答应该有很多种才对。
没错,对于这种变速而且,答案可以有无数种!我这里只是举出了最常见的一种而已,至于其他的答案,大家可以自己试试,在后面的篇章中我将会详细介绍各种答案之间的关系。在这里就这一题,我再给出两个比较特殊的解答:
图8
图9
(图8中被“210”遮盖的bpm值为“30”,格线为32线)
以上两个解答仍然符合题目的要求,大家可以尝试一下带入公式计算,至于怎么算来的,以后会给予讲解。
第三章:B类变速的基本原理
【例4】如图,现在有总时间T,现在要求路人甲用V的速度匀速行走,请问他能走多远的路程S?如果用(1/2)V的速度,请问S1是多少?如果用2V的速度,请问S2是多少?
【解答】路程=速度×时间
S=VT
S1=(1/2)VT
S2=2VT
图10
由图可以看出S=2S1=(1/2)S2,因为S=VT,当T恒定的情况下,S与V成正比。
Bms里的B类变速就是这种情况,与其是变速不如说成是加速或者减速更为合理。下面我们把例4的情况运用到bms里:
图11 图12 图13
以上三个图中以各自bpm走完各自的路程所花费的时间是相等的,也就是说我们在T恒定的情况下,选择与原速不同的速度来前进,从而影响到了格线的数量,且bpm与格线成正比。由此我们可以得到方程:
S1/V1=S2/V2
下面我们运用这个方程来做一个变速题:
【例5】原速为120的两小节键,现在要求降一半速来排列。
图14
【解答】原速V1=120,S为键走过的格线数,这里怎么看呢?先看需要变速的所有键所占的格线数,也就是2个小节线,或者看作8个节拍线(也就是4线),或者看作32个16线,由于我们要看的是总体,所以看作2个小节线比较好,也就是说S1=2。题目要求V2=(1/2)V1=60,根据公式S1/V1=S2/V2,可以算得S2=1。因为刚才我们算的是总体的格线,也就是说这里算得的S2是整体的S2,就是所有的键都在1个小节线里。下一步确定每个键所占的格线,重新确定各数值。根据上面的方法可以确定每个键占2个16线,S1=2,V1=120,V2=60,带入公式可以算得S2=1,也就是说这里算得的S2是一个键的S2,即每个键占2个16线。由此我们可以写入bmse如图:
图15
如果这样写速度,下一小节的速度仍然为60,如果下一小节需要恢复原速,记得要在第二小节重新写入原速。就这一题我们可以举一反三,也可以用逆向思维来看待。如果题目要求把图14的键加速2倍,那么解答就是图13,计算方法是类似的。其实这题这样的的变速计算简单,主要成倍数关系,所以多做几次不用带公式就会知道怎么做了。当然B类也会有复杂的,在后面会做详细介绍。
中 级 篇
第四章:A类变速的一般式函数方程及其函数图形
第二章我们介绍了A类变速的基本原理,但是很多问题仍然存在,在最通常的慢快变速种,我们怎么来定bpm的快慢值,怎么确定格线,除了一些特殊的简单的变速方法之外,有没有其他的更为普遍的定量方式呢?答案是有,这就是CRS研究出的A类变速的一般式函数方程,下面详细为你介绍,要认真看哦!
上面我们研究出的方程S/V=S1/V1+S2/V2其实就是一般式,但是这是从走路的问题上得到的,我们学会了基本的变速,就可以把其中的一些量直接换作与bms里的量了。
S为总格线,我们换作字母A来代替;
V是原速度,我们就用bpm的B来代替;
S1为第一变速的格线,我们用字母m来代替;
S2为第二变速的格线,我们用字母n来代替;
V1是第一变速的速度,我们设为X;
V2是第二变速的速度,我们设为Y。
带入原来的公式,得到以下一般式函数方程:
A/B=m/X+n/Y
(A=m+n,X>0,Y>0,A>0,B>0,m>0,n>0,A,m,n为正整数)
方程共6个量,B为常量,其他的5个量均为变量,而这5个量中的A,m,n由我们来定,但是仍然可以变化,X,Y是我们最终要求得的值。
由此我们可以画出其函数曲线图:
图16
图形其实还是比较复杂的,我们可以看出是一个以45角为中心线的对称曲线,其中有一些特殊点和区域这里需要详细说明一下:
顶点(B,B):也就是说V1=X=B,V2=Y=B,V1=V2,这就是最特殊的等速点,也就是说第一速与第二速相等,相当于没有变速。
值域(Y>X):即顶点左边的区域,此时V2=Y,V1=X,V2>V1,就是第二速大于第一速,即先慢后快。
值域(X>Y):即顶点右边的区域,此时V1=X,V2=Y,V1>V2,就是第一速大于第二速,即先快后慢。
X极限点(mB/A,+∞):就是X的极限最小值,此时A/B=m/X,n/Y=0,因为n>0,所以Y是无穷大。这就相当于X以第一速度走完它的格线已经花费了所有的时间,Y必须以无穷大的速度才能走完剩下的格线。其实这一点是取不到的,但是可以无限逼近,所以图中是虚线表示,就是说当X接近mB/A时,Y的速度可以很大。
Y极限点(+∞,nB/A):就是Y的极限最小值,此时A/B=n/Y,m/X=0,因为m>0,所以X是无穷大。这就相当于X要走过他的格线但是所拥有的时间却是0,所以速度必须是无限大,然后Y以第二速度走完剩下的格线。其实这一点也是取不到的,但是可以无限逼近,所以图中也是虚线表示,就是说当Y接近nB/A时,X的速度可以很大。
有了函数方程,又了解了其曲线特征,我们就可以更清晰地了解变速。以上是数学上的理论,拿到bms中还需要一些附加的条件。
在bms中,bpm的值不是在任何情况都可以取很大的,因为这牵涉到bms的判定问题。bpm值越大,判定就越高。具体为什么这里不详细讨论,但是这提醒我们制作变速的时候,要考虑到这一点。一般来说,制作普通的A类变速时,变速后的所有的bpm值最大不要超过原bpm值的4倍。只有一种情况可以使用很大的甚至上千(极限是65536,否则文件无法给播放器识别)的bpm值,就是空变速,这种变速在A,B,C三类变速中都会有,后面会介绍。
第五章:A类变速的Excel变速方程表及其运用
上一章我们研究出的一般式方程A/B=m/X+n/Y中,除了B是bpm定值以外,其余的A,m,n由我们确定,最后再确定X或Y其中的一个值,就能最终确定所有的量。
【例6】有两行键,要求在第一个键按下之后,给予第二行键变速,第二行键按下之后回归原速,原bpm=160,目标变速效果为:将原速分为两速,先慢后快。具体如图
图17
【解答】B=bpm=160;而其中的A很容易确定,就是两行键之间的格线数,可以为4(16线),也可以是8(32线),而A的最终确定要看m,n的取值;关于m,n的大小关系也是很有讲究的,一般情况下为了保证分速度与原速的差异感,我们选择慢的取小,快的取大,也就是慢速V1对应的m取小,快速V2对应的n取大(m>n和m=n的情况会在后面的篇章中讨论),最终确定要看A的值。下面问题就是A,m,n怎么取的问题了,因为它们是相互的。
按照m<n的前提,
当A=4;m=1,n=3。
当A=8;m=1,n=7或m=3,n=5
(A=8;m=2,n=6的情况排除,因为它等效于A=4;m=1,n=3)
当A=16或32时,m,n也都有相应的值可以选择,这里不一一列出。
其实A=4,A=8是我们最常用的两种情况。尤其是A=4;m=1,n=3的情况最为普遍,号称“平民变速”,稍微会点变速的人都会。
我们这里取A=8;m=1,n=7来研究。这样A,B,m,n四个数值都有了,最后只要确认X的值就能知道Y的值了。CRS就此做了一个Excel函数方程表格,可以很轻松的帮你计算X,Y的值。表格如下:
图18
它的操作很简单,就这一题我们只需把B=160,A=8,m=1输入黄色区域,然后这组变速的n,X极限点,Y极限点都会自动计算出来。更重要的是,表格中已经列出了一些X的值,从1开始的整数,所以第二分速度Y的值自然也就确定下来了。下面是写入后的表格:
图19
为了减少误差,我们最好选择X,Y都为整数的值,这也是为什么要先列出X的原因。又因为Y的值不能过大,所以我们可以选择X=30,Y=420这样的组。当然(30,420)与(34,340)的视觉感觉是不一样的,至于选哪个最好就要根据歌曲本身的属性来看了,如果歌曲需要很强的变速崩发感,就选择X,Y差异较大的一组,如果只是轻柔的变速,就选择差值小一点的一组。当然你也可以不选择都是整数的,取小数bpm所造成的误差其实也很小,一般我们取小数点后2位就足够了。对于原bpm值为小数的歌曲,我们可以自己确定X的值,写入绿色区域,可以为B值的1/2或1/4等等,这样算出的Y值有时会是有限非循环小数,就可以精确取值了。如果X的整数域不够,可以把各列用“+”保留函数往下拉。还要注意的是,函数过了(B,B)点之后,m所对应的V1会比n所对应的V2要大,也就是说m<n但是V1>V2的情况,这就与我们当初先慢后快的条件所违背,所以我们不取这些值。那么要做先快后慢的变速时候,我们同样可以看成先慢后快,算出各自的数值之后再把顺序颠倒过来就可以了。
依照变速方程表的计算,我们最终的答案有无数种,当A=8,m=1,n=7的时候也有无数种,以下列出其中的2种:
图20
(图20中被“340”遮盖的bpm值为“34”,格线为32线)
图21
(图21中被“280”遮盖的bpm值为“40”,格线为32线)
如果题目要求是先快后慢,那么仍然可以按照先慢后快的方式计算然后颠倒顺序,也可以直接重新定义m,n的值计算,最终效果是一样的,图21如果改成先快后慢的话效果如下:
图22
(图21中被“160”遮盖的bpm值为“40”,格线为32线)
熟练地运用CRS变速方程表可以节省你大量的变速计算时间,提高bms制作的效率,它会成为和uBMplay一样必不可少的bms制作工具。表格种的“等时点”即“比时点”也是非常重要的,它的作用是制作C类变速,后面会详细介绍。
第六章:B类变速的Excel格线变速表及其运用
在第三章中,我们介绍了B类变速,也就是变格变速的的基本原理及简单应用。以bpm的半速或者两倍速进行的变速是最常用的一种,相对应的V1=(1/2)V,V2=2V,其变速前后的相互关系为2的整次方数倍,就是2,4,16等倍数关系。一般的情况下,这样的变速对于以小节为整体的键来说,变速后恢复原速的时候可以保证下面的键在新的小节线上。
【例7】一首bpm=160歌曲中的4个小节(从图最下面的小节开始)需要半速变速,要求变速后的小节恢复原速,且要求对齐小节线。
图23
(图23中的最小格线为16线,键的位置在4线上)
【解答】V2=(1/2)V,S2=(1/2)S
图24
(图24中的最小格线为16线,键的位置在8线上)
如果题目要求是加倍变速的话,那么整体键所占的小节为4小节,每个键的位置在2线上,可以用bmse自己试试。
下面我们来看B类变速的另一个方法,运用其他的格线来制作。
【例8】一首bpm=150歌曲中的1个小节中所有的键需要加速变速,不考虑变速后的对线问题。如果加速后的速度不能超过450,那么有几种变速方法?
图25
【解答】B类变速的一个最重要的要求是,所有键变速后都要在格线上,简称为对线。我们来分析一下各种变现对应的速度关系:
首先我们要确定原键所占的格线,由于我们要进行的是各种格线的应用,所以我们不仅要看总体的格线,还要考虑每个键所占的格线。就图24,我们可以看出总体键共占1小节也就是4拍,设为S1;而每个键所占的是一个16线格,设为s1。
假设加速2倍,S2=2S1=2小节=8拍,s2=2s2=2个16线=1个8线
假设加速3倍,S2=3S1=3小节=12拍,s2=3s2=3个16线
假设加速1.5倍,S2=1.5S1=1.5小节=6拍,s2=1.5s2=1.5个16线=3个32线
假设加速2.5倍,S2=10拍,s2=5个32线
……
下面是1.5倍速情况下的图形:
图26
(图26中的最小格线为32线,键的位置在32线上)
那么这题的答案是无数种吗?不,B类变速会因为格线而受限制。上面列出的几种情况,我们可以找到相应的格线来满足键的排列;但是,假设我们做一个加速为2.25倍的变速可能吗?S2=2.25S1=2.25个小节=9拍,是可以的,s2=2.25s1=2.25个16线=4.5个8线=9个64线,也是可以的。假设做一个2.2倍的呢?S2=2.2个小节=8.8拍=35.2个16线=70.4个32线=140.8个64线=422.4个FREE线,无法找到这样的线。s2=2.2个16线=4.4个32线=8.8个64线=26.4个FREE线,这样也不行。只要一个键没有办法放在线上,就无法使用。
其实我们完全可以反过来思考,因为最终能确定可行性的是格线,而我们所能用的格线就那几个,把每种格线对应的速度关系写出来就好了。这就是CRS研究出的第二个工具-格线变速表。
图27
它的操作不难,但是其计算的结果新手可能不容易看懂。我们需要知道的是原键的格线数,就这一题我们只要考虑每个键的格线,只要最小格线满足变速要求,整体自然也可以满足。s=16(这里是指1个16线,输入16即可),bpm=150,写入表格的蓝色区域,我们可以得到以下计算结果:
图28
由图我们可以看见,按照1.5倍(1又1/2倍)进行的变速参数在表格的第30行已经被计算出来。看其纵横对应关系,可以发现变速后的格线应为“1.5个16线”,“3个32线”,“6个64线”,“2.25个24线”,“4.5个48线”,“18个192线(FREE线)”,我们理所当然的选择最简单的一个,也就是“3个32线”。答案与我们之前计算的一致。不但如此,我们还能从表格中看到其他的B类变速方式,但是那么多种,怎么选择呢?B类变速最基本的要求是对线,也就是说我们只能选择计算结果为正整数的值,然后找到它所对应的格线,而且最好取最简单的一组。另外也要注意变速后速度本身的bpm值,还要尽可能用简单的格线,一般情况下是没有必要用到FREE线的。图中有紫红色的行是常用行,淡紫色的是次常用行,其余的一般不怎么用,而且很多情况下也不可用。图中列出的速度倍数也只是一部分,理论上有无数种,但是考虑到其它的速度倍数算出来的值大多都不能满足对线的要求,所以我就没有列出来了。紫色行的值已经完全够用了,它能帮助我们完成好几种不同速的B类变速,也为复合式B类变速(属于C类变速的一种)打下了基础。
|