4. 楽器定義


4.1. 楽器定義について

楽器を指定しない場合、すべての音はただの正弦波として生成されます。 これでは、音色に豊かさがありません。 そこで、楽器を定義・指定します。

楽器を定義するには楽器定義行を書きます。 楽器定義行は「@」「楽器名」「改行」を連ねます。 また、楽器定義行から次の空白行・ディレクティブ行・またはコメント行まではオペレータ定義行としてみなされます。 オペレータ定義行はタブ文字によるインデントの後「振幅」「周波数比」「アタックタイム」「ディケイタイム」「サステインレベル」「リリースタイム」「(フィードバック回数)」を連ねます。 詳しくは後述します。

あるパートで楽器を使うには、楽器コマンドを用います。 楽器コマンドは「@」「楽器名」「空白」を連ねます。 詳しくは後述します。

4.2. 正弦波を作る

上述の通り、IAM.mmlでは標準の楽器は正弦波を生成します。 この標準の楽器は、以下のように再定義できます。

@sin
1 1 0 0 1 0

では、この楽器を用いて演奏してみましょう。

; sin波を定義
@sin
1 1 0 0 1 0

; 楽器「sin」を使う
part @sin cdefgab>c

4.3. 変わったsin波を作る

3.2.の楽器を指定しても、標準の楽器とは違いがありません。 これでは面白くないので、少しカスタマイズしてみましょう。

IAM.mmlのコマンドには音高を自由に変えるものがありません。 そのため、四半音上げることができません。 この問題は、楽器の周波数比に\(2^{(1/24)}\)を指定することで解決します。

2音以上連続する楽譜を再生してみると、音の変わり目で「プツッ」という音が鳴るはずです。 この音は「クリックノイズ」と言われる・音の波が不連続であるために発生する雑音です。 この雑音を消す手法として、連続する音を混ぜることが挙げられます。 これは、アタックタイムとリリースタイムを設けることで実現します。

以上2点を反映した楽器は次のようになります。

@new-sin
1 1.0293 0.1 0 1 0.1

また、この楽器を用いたサンプルコードは次のようになります。

; 変わったsin波を定義
@new-sin
1 1.0293 0.1 0 1 0.1

; 楽器「new-sin」を使う
part @new-sin cdefgab>c

4.4. 矩形波を作る

正弦波だけでは、まだ音色に豊かさがありません。 では、正弦波ではない波を生成する楽器を作りましょう。 そのためには、波を変調する必要があります。

波の周波数を別の波で変えることをFM変調と言います。 周波数を変調することで、後述するAM変調よりも大きく倍音に変化を齎せます。 しかし、カオス的な挙動をするために、意図した通りの音色を作るのが難しい変調方式でもあります。

変調される波の周波数と変調する波の周波数の周波数の比を1:2にすることで矩形波を生成できることが知られています。 従って、矩形波を生成する楽器は、次のように定義できます。

@square
1 1 0 0 1 0
	1 2 0 0 1 0

上のように、FM変調を行うには、変調する波のインデントをタブ文字によって深くします。

4.5. ベルを作る

FM変調は金属音を作るのに向いていると言われています。 例えばベルの音色は、変調される波と変調する波の周波数比が2:3や2:7のような割り切れない数である場合に発生します。

次のように定義した楽器では、ベルのような金属音が鳴ります。 尚、2:7としているため、1オクターブ上がっています。 1:3.5としても変調の内容は変わりませんが、標準の4オクターブ辺りでは音が低く、あまり金属音のように聴こえないかもしれません。

@bell
1 2 0 0 1 0
	1 7 0 0 1 0

4.6. スネアドラムを作る

FM楽器においてスネアドラムはノイズによって表現されます。 ノイズを作るためには、周波数を滅茶苦茶に変調する必要があります。 ひいては、何回もFM変調を行う必要があります。 これはフィードバック機能を用いると簡単に実現できます。

フィードバック機能を使うには、オペレータの第7パラメータに数値を指定します。 仕様上小数を指定できますが、小数点以下は切り捨てされます。

次のように定義した楽器では、スネアドラムのような音が鳴ります。

@snare
1 0 0 0.3 0 0
	50 1 0 0 1 0 10

4.7. オルガンを作る

波の振幅を合成することをAM変調と言います。

オルガンの音色は複数の正弦波の合成によって表現できます。 次のように定義できます。

@organ
0.2 1 0 0 1 0
0.5 2 0 0 1 0
0.2 3 0 0 1 0
0.1 4 0 0 1 0

上のように、AM変調を行うには、合成したい波のインデントを揃えます。

4.8. 色々な音を作る

次のように定義すると、弦楽器のような音になります。

@string
0.75 2 0.2 0 1 0.2
	0.8 2 0.2 0.1 0.9 0.1 5
0.25 2 0.2 0.1 0.9 0.1
	0.8 12 0.1 0.05 0.75 0.1

次のように定義すると、タムのような音になります。

@tom-tom
1 0 0 0.3 0 0
	0.5 0 0 0.3 0 0
		50 1 0 0 1 0 10
	0.5 0.5 0 0.2 0 0