BMS文件数字化及其应用 一.引言 本人乃BMS新手一枚,信誓旦旦做好了了处女作**交给FF验明正身,结果被无情地打击回来,理由“压音不准”,以下对白:
Me:我咋觉得0.4速都没看出啥问题呢?
FF:视觉和听觉也要跟理论结合!
具体情况如下图:
稍有经验的Noter(甚至菜鸟如我)一眼就能看出来Error 1中一排NOTE应该下移一排,Error 2应该向下微移半格(出现此状况的原因是由于使用了64 Grid;注:本图为32 Grid视图)
Error 1及Error 2应该都是新人容易犯的压音问题,出错原因很大程度上是由于不仔细(如理论上有不理解的请参阅论坛相关文章),快速、有效地检查出此两类错误是制作、提交作品时不可或缺的一个步骤,面对上百个小节、上千个Note,我对FF大嚎道:“要是有软件检查就好了~”,FF答曰:“Just do it!”
于是,本文诞生了。
谨以此文献给和我一样新的新手Noter,以帮助大家减少压音不准的错误,尽快走上正途(我们的目标~通过审核!)
废话不多说,正文开始。(对于理论不太感兴趣的同志请直接跳往3L实践篇,但请理解“数字串规律”前面“压线”的定义)
二.理论篇
怀着一颗好奇的心,我用笔记本打开了一个BMS文件,得到了以下结果:
*---------------------- HEADER FIELD
#PLAYER 1
#GENRE Pop
………………(省略)
#WAV01 oops.mp3
#BPM01 52.17
#BPM02 122.78
……………(省略)
#LNTYPE 1
*---------------------- MAIN DATA FIELD
#00001:00000001
………………(省略)
#00603:000000000000000000000000000000000000000000AE003C000000000000005A
#00608:00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000020300000004000000000000
#00611:0002000200020000
#00612:02000000000000000200000000020000
#00613:0002000000020000
#00614:00000000020000000000000000020000
#00615:0002000200020000
#00616:00000000000002000000000000020000
#00618:00000000000002000000000000020000
#00653:00000000000000000000000002020000
………………(省略)
可以看到一个BMS文件可以完美地用记事本打开(或解码,Decode),打开后文件分为下列几个部分:
1.头文件(HEADER FIELD):记录了曲名、曲风、作者等信息
2.K音区(即上文中的#WAV01),如果是K-BMS,这里将会有一大串
3.变速区,记录了变速的信息
4.面条区,即#LNTYPE一行
5.重头戏,主要数据区(MAIN DATA FIELD),记录了谱面信息
从上面叙述我们可以看出,用记事本打开的BMS文件详细完整地记录了歌曲的Note信息,换言之,我们完全可以只用记事本而无需BMSE做出Note(前提是你的头脑足够发达,具体见下文)更直白的说,用BMSE只是一个GUI(图形用户接口),关于这点的讨论详见后文“四.应用之自动Note机”
下面关注数据区(main data field),和BMSE上所见一样,数据的记录也是按小节来记的,如#000****、#001****、#002****……那么以006节为例,#006后面的数字又代表什么意思呢?
经过实验,可以得出结论:#0061X记录的是米粒Note,#0065X记录的是面条Note,也就是说BMS里面米粒和面条是分开记录的。自然地,我们可以猜测,#0060X记录的是变速信息(为何存在#00603和#00608两行?有待研究)
进一步,我们通过实验可以的出上文所提到的X代表的是Note所在列----BMS记录每小节的NOTE信息是以列记录的,具体对应关系如下:(Xà键)
6à1
1à2
2à3
3à4
4à5
5à6
8à7
记实际击打键位从左至右为1-7,详见下图:
如#00611后面的一串数字“0002000200020000”(下称为数字串)就是X=1,即实际击打的2号键(左蓝)的米粒NOTE信息(因为是1X,注5X为面条信息),02为#WAV 02的意思,代表该位置排了一个#WAV 02
为什么有的数字串为16位(如#00611,#00613)有的数字串为32位(如#00612,#00614)?这与排放NOTE的位置有关,见下图:
注:此图不与上文所述#006对应!(假设该小节为#001,且除所示Note 外无其余Note)
我们称1号键位第一个Note(自下往上数)压在Grid 4上,2号(蓝)压在Grid 8上,3号(白)压在Grid 16上,4号(黄)压在Grid 32上, 5号(右白)压在Grid 64上 (本图为Grid 32视图,每一节有32格线,每一拍有8格线)
数字串规律:
1.数字串位数为该键位该节所压最细的Gird数乘2(由于#WAV 后面的编号由两位,如#WAV 01,#WAV 02)如1号键(对应X=6)在第一节(#001)压的最细的Grid为4,则#00116:后面的字串有4*2=8位
2.记录Note的顺序总体上为从上向下(以一个最细Grid线为单位上移),例如1号键压的最细格线为4,则#00116:后面的数字串由4部分(每部分2位)从上向下记录该节1号键的Note米粒信息。
[ 本帖最后由 handsome8848 于 2010-8-6 23:23 编辑 ] |