4. 楽器定義
4.1. 楽器定義について
楽器を指定しない場合、すべての音はただの正弦波として生成されます。 これでは、音色に豊かさがありません。 そこで、楽器を定義・指定します。
楽器を定義するには楽器定義行を書きます。 楽器定義行は「@」「楽器名」「改行」を連ねます。 また、楽器定義行から次の空白行・ディレクティブ行・またはコメント行まではオペレータ定義行としてみなされます。 オペレータ定義行はタブ文字によるインデントの後「振幅」「周波数比」「アタックタイム」「ディケイタイム」「サステインレベル」「リリースタイム」「(フィードバック回数)」を連ねます。 詳しくは後述します。
あるパートで楽器を使うには、楽器コマンドを用います。 楽器コマンドは「@」「楽器名」「空白」を連ねます。 詳しくは後述します。
4.2. 正弦波を作る
上述の通り、IAM.mmlでは標準の楽器は正弦波を生成します。 この標準の楽器は、以下のように再定義できます。
@sin
1 1 0 0 1 0
- 1行目: 楽器の名前は「sin」
-
2行目: 左から順に、
- 振幅は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