ZYH Studio.NET ACG专区


{dy}关同学们都学会了吗?没学会不要着急看这个哈,本章节是制作NSF最关键的阶段——调音。在上一章节调音部分我没有仔细讲,那么这一章节就好好来传授下FC的音色调整方法。

这一章比较长,希望同学们看完别晕了……


PART I 音量和音色

虽然说矩形波有它自己的魅力所在,但如果不进行任何处理FC就会发出极其刺耳的12.5%占空比的纯·矩形波,听那个是折磨耳朵。那么,商业FC游戏音乐为啥听起来像个样呢?

大家都知道FC的内藏音源(扩展音源的音色内容比较多,留到下一块专门讲好了)都是简单的波形发生器,由于各种乐器存在各不相同的泛音成分,所以不可能是简单波形或者相同的波形,这样在波形上是没办法模拟出各种乐器的音色了(其实也不是完败,等下一块我们召唤FDS,N106和VRC7芯片就有能力逆袭了)。

但是我们还没GAME OVER,为了使可怜的几种波形听起来尽可能接近某乐器(好象差蛮多的...)还有个办法就是在音量上模仿此乐器的ADSR,玩过合成器和一些比较完善的软音源的同学应该很熟悉才对,ADSR即Attack(起音)、Decay(衰减)、Sustain(持续)、Release(释音)。






参数描述

一个波封可以用4种参数来描述,分别是Attack(起音)、Decay(衰减)、Sustain(延持)、与Release(释音),这四者也就是一般称的“ADSR”。一般音源机或合成器,会提供Attack与Release的调整参数;而较专业的合成器,这4种参数则都会提供。


  Attack (起音)参数

  又分成Attack Time(起音时间)与Attack Level(起音音量)。若Attack Time的值越大,表示该音色从一弹奏(压下琴键)到音量{zd0}之间的时间会较长,声音听起来就好像慢慢起来的感觉;若Attack Time值越小,表示从弹奏(压下琴键)到音量{zd0}之间的时间会较短,声音听起来就比较铿锵。而Attack Level(起音音量)的调整参数。这是用来决定弹奏该音色所冲到的{zg}音量是多大。

  Decay(衰减)参数

  则有Decay Time(衰减时间)与Decay Level(衰减音量)。许多传统乐器的音色特性,是当一弹奏之初声音冲到{zd0}音量后,会立刻再往下掉一些,也就是衰减,直到音量稳定为止。Decay Time就是用来决定这个衰减会有多快。

  Sustain (延持)参数

  即Sustain Time(延持时间)。若您在电子键盘乐器上持续压住一个琴键,则声音在经过Attack与Decay之后,会进入一个音量较为稳定的状态,这个时候就称为Sustain。Sustain Time就是用来调整当您一直按住琴键的状况下,声音可以持续多久。像鼓的音色,即使您按住琴键,它的声音也只会出现一下子,因此它的Sustain Time比较短;像钢琴,当您按住琴键不放,它的声音就会缓慢变弱,因此钢琴音色的Sustain Time较长;而对于弦乐器音色而言,只要您一直按住琴键,声音就会一直维持固定音量而不会消失,因此它的Sustain Time是无限大。

  Release(释音)参数

  只有Release Time(释音时间)。它是指当您停止弹奏(放开琴键)后,声音还能维持多久。若Release Time较长,则即使您放开琴键了,还是可以听到声音慢慢变弱。





原理有了,现在需要想象力把这个过程转换为数字并用MML语言实现

嗨还朋友们大家好~还记得这个窗口吗?对了,我就是为FC配音的演员,音量包络编辑器!
在MCKTool中,按F2打开音量包络编辑器。



看到下面的那个文本框了吗,蓝色的那部分为这个音量包络的【编号】,用于演奏时调用。记得自己改编号,千万别忘了!

右边的黑色部分是音量包络的描述。FC总共有16级别的音量,对应着数字0-15。
每个数字对应的是时间轴上每个时间点的当前音量,每个数值持续时间为16毫秒。竖线后的值会一直循环。

例:

编号0 右边填写 10 9 8 7 6 5 4 3 2 1
应用此包络的音符的音量将在160ms内 线性地从10降到1,{zh1}一个值成为音符剩下时值的音量,即这里的1。

编号1 右边填写 4 | 6 10 6 2
简单的tremolo效果。4 | 6 10 6 2 相当于4 6 10 6 2 6 10 6 2 6 10 6 2 无限循环……

点击【绘制图形】按钮可以看下音量包络柱状图示意。
勾选下面的复选框可以让这些通道调用刚才写好的音量包络。

觉得没啥了,点击【插入】按钮,可以发现程序为我们生成了两条指令

@v<数字> = { <音量包络内容> }

<通道名(如A)> @v<编号> @<占空比> v<音量>


例如:

@v0 = {15 13 12 10 9 9 7 7 5 5 3} ;编号为0的音量包络,音量是一个持续衰减但不静音的过程
A @v0 v12 @1 ;通道A(矩形波1)应用编号0的包络,此后音量固定在12,占空比为25%



那啥,刚才又提到占空比这东西了,那么这到底是啥呢?

再次引用下百科

“在一串理想的脉冲序列中(如方波),正脉冲的持续时间与脉冲总周期的比值。”

很抽象吧,那么请同学们理解为 FC输出的音色类型——是“嘀嘀”还是“当当”一类的……(好囧的描述)

矩形波按照中英文的习惯应该叫脉冲波(Pulse Wave),毕竟这FC还是人家泥轰国的玩意,我们就跟着他们叫矩形波吧。占空比(duty cycle)可以有12.5% 、25%、50%(方波)、75%(与25%反相)四种选择。

所以这里也纠正下很多FC硬件资料里的说法,FC内藏音源不仅仅是方波(Square Wave),而是包含了方波,实际上,作为旋律来使用得最多的还是更为明亮的25%的矩形波。这也是GM音色里的81号音色“Lead 1 (square)”找不到FC的感觉的原因。

◎音色亮度12.5% > 25% = 75% > 50%
(喂喂,太亮了容易刺耳啊,这点要注意)

OTZ...写的有点乱,咱是在谈音量包络对吧,那么说一点进阶的东西。

以下部分学会了,模拟乐器啥的肯定没问题!
我们其实可以通过手写的方式模拟乐器的ADSR。
软件没有提供这个指令的图形方案,那么我们可以在MML中加入这一条语句

@vr<数字>

<数字>(0 - 127) 之前定义的音量包络编号。


能起到类似“触后”的作用,即在一个音符播放的中途重新应用新的音量包络。需要配合q<数字>来使用,被q<数字>截取后剩下的时值不会静音而是使用@vr<数字>对应的@v<数字>。

活用这条指令,会发现它有很大的用处。如果只使用@v,在音量包络的Sustain(持续)部分需要用很多相同的数字填满,占空间不说,不同时值的音符还需要做单独的包络。


但是我们可以这样:

用@v做A、D、S,@vr做Release,通过改变q<数字>来做sustain的细微调整,就避免了上述的麻烦。



例:

@v0 = { 6 10 9 9 8} ;定义"起音"和"衰减",{zh1}一个值就是"持续"的音量
@v1 = { 7 7 7 7 6 6 6 6 5 5 5 5 4
4 4 4 4 3 3 3 3 3 2 2 2 2
2 2 1 1 1 1 1 1 1 1 1 1 0 } ;定义"释放"
@v2 = { 4 4 4 4 4 3 3 3 3 3 3 3 3
2 2 2 2 2 2 2 2 2 2 2 1 1
1 1 1 1 1 1 1 1 1 1 1 1 0 } ;来尝试下回音效果 > _
 
AB t130
A @v0@vr1 q5
B v4 @vr2 r32. q2 ;音符与A通道相同,音量略低,稍微滞后一定时间,
AB @2 l8 o5 ;@v0与@vr1的组合。@2表示50%的矩形波
AB d4a4 ef16e16dc q1 d1

@v<数字>适用场合与v<数字>相同,可以出现在乐谱的任意位置,当前包络以此通道{zh1}一次调用的编号为准。
除了这些,音量包络同样还可以用来模拟混响,延迟等。学长我能说的也就这么多了,chiptune靠的就是想象力,更奇妙的效果就请同学们自由发挥。



 


PART II 音高指令

这一部分需要一点音乐知识的理解,如果看不懂也可以暂时跳过,如果你对你作品质量要求不高,只想听个响的话……

弯音(Pitch Bend):

点击【插入-弯音】 在对话框中输入对应编号和弯音指令数字即可,程序会生成如下指令。

@EP<数字> = { ~ | ~ }

<数字>(0-127)包络编号。使用EP<数字>调用,使用“EPOF”关闭。
 
弯音包络定义,一般放在header之后。花括号内数字可用范围: -127至126,负值为向下滑,正值是向上滑,每个数值持续时间为16毫秒。适用场合同音量包络。除DPCM通道外均可用。


需要注意的是,括号内的数字表示的是音高向上或向下滑的速度,而不是直接改变音高。比如:

{ 3 }表示从本来音高的以"3"的速度向上滑。

{ 3 0 }表示从本来音高的以"3"的速度向上滑16毫秒后停止。

资料里没写这个速度的单位,根据既存防御学长快废掉的耳朵测试(错了别赖他啊)
大概是 每16毫秒 1/12 ~ 1/11个半音,即是说{11.X 0 }会使一个音符在16ms内升高一个半音后停止滑音。

当然小数是不行的,1个半音时取12,2个半音时取23,3个半音时取34,4个半音时取44,其它的自己试验去...


另外,如果要调整速度,可以把希望改变的数值拆开。

如{ 12 0 } 、{ 3 9 0 } 、{ 6 6 0 }、{ 2 4 6 0 }都使音符升高大约一个半音,数字越多滑音越慢。




例:
@EP0 = {12 22 0}
@EP1 = {|3 2 1 0 -1 -2 -3 -2 -1 0 1 2 }


A @2 v9 o5
A EP0 c2 EPOF d+2 ;C5在32ms内升高3个半音,即滑向D#5,对比下后面的D#5吧
A EP1 c1 ;也可以大致模仿正弦形,写个不是很标准的颤音效果。




颤音(Vibrato):

点击【插入-颤音】 在对话框中输入对应编号和指令数字即可,程序会生成如下指令。

@MP<数字> = { <参数1> <参数2> <参数3> }

<数字> (0 - 63) 给此颤音类型编号。使用MP<数字>调用,使用“MPOF”关闭。
<参数1> (0 - 255) 延迟多少时间后开始颤音
<参数2> (1 - 255) 颤音速度,数字越大越慢
<参数3> (0 - 255) 颤音深度,数字越大深度越大

颤音定义,一般放在header之后。适用场合同弯音包络。除DPCM和N106通道外均可用。


例:

@MP0 = { 8 2 6 } ;模仿小提琴的颤音演奏.
A @2 v9 o5
A MP0 c1




琶音(Arpeggio):

点击【插入-琶音】 在对话框中输入对应编号和指令数字即可,程序会生成如下指令。


@EN<数字> = { ~ | ~ }

解释:
<数字>(0-127)编号。使用EN<数字>调用,使用“ENOF”关闭。

琶音包络定义,一般放在header之后。花括号内数字表示每单位时间(16ms)改变的音程,以半音为单位。
同弯音包络一样,如果不在后面加0,每单位时间都会按照{zh1}一个数字来改变一次音高。所以某些需要在音阶上的滑音,比如钢琴的滑奏,用它就对了。
在很多欧美同学的作品里,很多时候也用高速循环的琶音来模拟和弦效果,反正我听着跟电话铃声似的,xx体会不到和弦的音响效果,同学们自己看着办吧。


例:

@EN0 = { 0 0 | 4 0 3 0 -7 0 } ;模仿大三和弦的效果
A @2 v9 o5 q7
A EN0 c1 ;播放C5,32ms后上升4个半音到E5,再32ms后上升3个半音到G5,又32ms



STAGE 2 CLEAR!




郑重声明:资讯 【ZYH Studio.NET ACG专区】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——