辉夜音游论——使用midi当音游谱面的可行性
写在前面
我是辉夜星瞳,是一个TensorFlow学员,同时也是midi谱师、Arc,Phi音游人等等等等…
做这篇文章毫无疑问是我在经过研究时发现的,当然可能包括一本正经的胡说八道;毕竟General MIDI是一个标准,所以我们可以拿来进行音游创作。
是这样的
我在逛音游群的时候偶然发现了一位midi创作者,在打Arc的时候问midi转谱面的可行性,于是就有了这篇文章
Step1.分析谱面都需要什么?
这里以我们最熟悉的音游——Phigros来进行讲解。
如未声明,本实例的所指的音游及谱面均为Phigros
众所周知,音游一共有四个note类型:
1.tap:在到达判定线时点一下即可。
2.Hold:一种长音符,在到达判定线时需要按住,消失于判定线时松手。
3.drag:俗称黄键,你不需要经常点它,只需要保持你的手指按在那里就行了。
4.flick:俗称粉键,到达判定线时划一下就好了
之后就是判定线:为方便起见,这里我们将判定线进行固定处理。
还有note的下落时间、下落速度,位置等;只有这些完备了,一个谱面的创作才能正式开始。
Step2.midi又包括哪些内容?
一个标准的MIDI文件往往以二进制代码的形式包含了多层次的信息,通常以“事件(消息)”来刻画这些信息。如音符开启事件(Note On),音符力度(Velocity),音符结束事件(Note Off),触后(Aftertouch),还有弯音(Pitch Wheel)、调制(Modulation)、主音量(Main Volume)、表情(Expression)等。
因此midi能拿出来的参数简直太多了
Step3.midi与谱面的对应关系
这里以一个json化的midi音符举例,这样你就能明白我为什么说midi可以做谱面了。
1 |
|
name的音高决定了音符的位置,但是很显然音游的屏幕有限,所以我们可以基于Minecraft的音符盒音高进行框定,再选出中间的那个键作为中心即可。
duration对应持续时间,这个在Hold音符里非常有用,如果是其他音符和进行置空处理。
接下来是定义通道和乐器部分,这个部分可以对应谱面的键的类型。
1 |
|
MIDI标准的内容分为五个部分:
16个声部(通道)
最大复音数为24或更多
GS格式的乐器音色排列(包含有各种不同风格的音乐所使用的乐器音色和打击乐音色)
鼓音色可以通过音色改变信息进行选择
两种可以调节的效果,包括混响和合唱
所以我们拿出前四个通道分别对应四种键,之后再在框定的区域内做音符即可。
后记
这里没有后记,既然理论存在,那么代码就能实现。希望有朝一日midi能够成为音游谱面通用标准吧。