Z-MUSIC MML チュートリアル 中級篇 その1
Lesson 11: ポルタメント
さて、ここからは中級篇になります。 初級篇では「知っていないと困ること」を中心に説明いたしましたが、 中級篇以降では「知っていると便利なこと」を中心に説明します。
中級篇最初のお題目はポルタメントです。ポルタメントというのは、 「異なる2つの音をなめらかにつなぐ」意味を持つ音楽用語です。 これは実際に音を聞いてみる方が手っ取り早く理解できると思います。
@v127 z127 @81 (c<c1)
二つの音を括弧(~)でくくると、Z-MUSICではポルタメントになります。 つまり、この例では、ドから、1オクターブ上のドまでを、なめらかにつないで発音します。 (そのうち実際の音をクリック一つで聴けるようにしますが、 ここの例をZEDITに copy&pasteして、実際に聴いてみることをオススメします)
ちなみに@v
や z
, @
などという見慣れぬMMLが現れましたが、 これはそれぞれ [volume]
, [velocity]
, [program]
と同じ意味を持っています。 MMLに慣れてきたら、 [velocity]と打ち込むよりzと打ち込む方が短くて楽だと思います。
# 本当は、 z
と [velocity]
はビミョーに意味が違うのですが、 とりあえず同じと考えていただいて結構です。
@v127 z127 @81 (c<c1),48
括弧を閉じた後にコンマで数値をつけると、 最初の音を数値で指定した時間だけキープした後に、 目的の音にスライドします。 ここでは最初の音をキープする時間として48を指定していますが、 これはデフォルトでは四分音符分の長さを表しています。
# 全音符の分解能を指定しない限り、 四分音符の長さは48tickになります。 分解能・tickについての説明は、それぞれのリンクを参照ください。
Lesson 12: オートベンド
オートベンドというのはZ-MUSIC固有の用語(機能)です。 基本的にはLesson11のポルタメントとほぼ同じ機能ですが、 ポルタメントが「ある音階からある音階へ」となめらかにつなぐのに対し、 オートベンドは「微妙な音階から微妙な音階へ」なめらかにつなぎます。
まずは、先のポルタメントで使用した例(ドから、1オクターブ上のドへ、 なめらかにつなぎつつ発音)をそのままオートベンドを用いて記述すると、 以下のようになります。
@v127 z127 @81 @b0,8191 c1
@b0,8191
というのが、オートベンド指定のMMLです。 これは、ピッチベンド値を0から8191までスライドさせる、という指定になります。
ピッチベンドについては次のLesson 13で詳しく説明いたしますが、 まずは「音の高さを微調整するもの」とご理解ください。 ピッチベンドが0の場合は元の音そのものを表し、 ピッチベンド値を正の値に設定することで、音を微妙に高くします。 数値が大きくなればなるほど音が高くなり、 値として8191を指定したときは1オクターブ分高くなります。 また逆に、負の値を指定すると音がどんどん低くなっていき、 -8192を指定したときは1オクターブ分低くなります。
# 8191と-8192, 絶対値が微妙に異なりますが、誤植ではありません。
で、オートベンドというのは、このピッチベンドの数値を自動的に変化させる機能です。 結果的に音の高さが滑らかに変わりますので、 ポルタメントと同じような機能と言うことになります。
ただしポルタメントとは違って、オートベンドの場合は微妙な音の高さを設定できます。 ですから、たとえば@b0,8000
とすると、 「ドから、1オクターブ高いドより微妙に低いドへ」なめらかにつなぎつつ発音、 となります。
@v127 z127 @81 @b0,8191,48 c1
ポルタメント同様に、括弧を閉じた後にコンマで数値をつけると、 最初の音を数値で指定した時間だけキープした後に、 目的の音にスライドします。
Lesson 13: ピッチベンド
ピッチベンドは前のLesson 12で説明したとおり、「音の高さを微調整するもの」です。 以下再掲:
ピッチベンドが0の場合は元の音そのものを表し、 ピッチベンド値を正の値に設定することで、音を微妙に高くします。 数値が大きくなればなるほど音が高くなり、 値として8191を指定したときは1オクターブ分高くなります。 また逆に、負の値を指定すると音がどんどん低くなっていき、 -8192を指定したときは1オクターブ分低くなります。
# 8191と-8192, 絶対値が微妙に異なりますが、誤植ではありません。
オートベンドやポルタメントのように、 音の高さが滑らかに変わるというようなことはありません。 一度ある値を設定したら、そこから音の高さは変化しません。
@v127 z127 @81 @b341 c1 d1 e1
オートベンドと似ていますが、@bに値を1つしか書かないのがポイントです。 1つだけ書くとピッチベンド、2つ以上書くとオートベンドとなります。
この例では、ピッチベンド値として341を設定しています。 Z-MUSICの初期設定では、 ピッチベンドを683あげることで実際の音が1半音上がる(ド→ド♯、など) ようになっていますので、341だと半音の半分だけ音の高さが上がります。 つまり、「ドレミ」となるように見えて、実際には 「ドとド♯の真ん中、レとレ♯の真ん中、ミとファの真ん中」の音が鳴ります。
で、実際には、 「こんな正しい音階になっている音をわざとずらす機能、いったいどういう風に使うの?」 と思われるかもしれません。代表的な使い方は、以下の2つです。
- オートベンドの解除 (機能OFF)
- デチューン
1.は、例えば
@v127 z127 @81 @b0,8191 c1 d1 @b0 e1
などというように使います。
@b0 でなく、 単に @b としてもオートベンド機能をOFFにすることもできますが、 その場合ピッチベンド値が8191に上がりきったままオートベンド機能だけがオフになってしまうため、 次の e1 がピッチベンド値8191状態で発音されてしまう、 つまり、e1が1オクターブ高く発音されてしまいます。
# ピッチベンド値8191で「1オクターブ高い」ということになる話は、 先の引用部分を参照。
これを防ぐために、@b0というように、ピッチベンド値を手動で元に戻してやる (元に戻してやりつつ、オートベンドを解除する)必要があります。
2.の「デチューン」については、次のLesson14で詳しくやります。
[リファレンスでピッチベンドの初期設定の変え方を調べる(応用篇)]
Lesson 14: デチューン
デチューン。クルマなんかだと、馬力をわざと落としたり、 性能を落としたり・・・といった意味ですが、 音楽関係だとちょっと違います。
「2つの音を、微妙にピッチベンドをずらして、重ねる」
という意味になります。 正確にチューンされている音のピッチをわざとずらす、 という意味では一般的な「デチューン」そのものですね。
(t1) [volume 127][velocity 127][program 80] q7 [panpot m] c1 [panpot L32] @b0 c1 (t2) [volume 127][velocity 127][program 80] q7 [panpot m] r1 [panpot m] @b64 c1
このサンプルでは、Ocarinaの音が2回鳴ります。 1回目は素で鳴らした場合。 2回目はデチューンのテクニックを使って鳴らしてみた場合。
サンプルMMLをみると、
- 2つのチャンネルを使って2つの音を鳴らしていること
- 2つの音で微妙にピッチベンドを変えていること(@b0と@b64)
- 2つの音で微妙にパンポットを変えていること(センターと、左32)
といったことが分かります。
実際に鳴らしてみると、2回目に出てくる音の方が、 音に厚みが出ていることがおわかりいただけるかと思います。
ここでの例のように、デチューンを使う場合、単にピッチベンドをずらすだけではなく、 パンポット(Lesson 10でやった)も 若干ずらしてやった方が音の広がりが出て効果的です。 ピッチベンドとパンポットをそれぞれどれくらいずらすと効果的かは、 その都度いろいろ試行錯誤して決める必要があります。
なおコーラスエフェクトを使っても同じような効果を得ることができます。例えばこんな感じ。
[volume 127][velocity 127][program 80] q7 [effect.chorus 0] c1 [effect.chorus 40] c1
元々コーラスエフェクトってデチューンをたくさん重ねたようなものなんですが、 デチューンとコーラスは例えばこんな感じで使い分け・共存できると思います。
- コーラスが使えないときにはデチューン
- (携帯電話の着メロなど・・・ でも携帯電話だとパート制限がきついので、使いどころを考える必要あり)
- お手軽に音を厚くしたいならコーラス
- (デチューンの方が効果を自分で制御しやすいですけど、 いかんせんコーラスエフェクトの方がお手軽です)
ただ、コーラス・デチューンともに、 効果をかけすぎるとパンポットの定位感が失われる・・・つまり、 どの方向から音が出ているのかはっきりと分からなくなる・・・ので、 音の方向をはっきりさせたい(安定させたい)場合はご注意ください。 例えばベースの音なんかは、 極端な話パンポットセンター、コーラスなしと割り切っちゃっても構わないと思います。 ハイハットなんかも同様です。 [リファレンスでパンポットの設定法について再確認する]
Lesson 15: エクスクルーシブメッセージ
exclusive(エクスクルーシブ)というのを辞書で引いてみると・・・
exclusive: 排他的な、独占的な、独特の
と出てます。
MIDIにおけるエクスクルーシブメッセージというのは、 通常のMIDIメッセージにない、音源独特の制御データを送受信するのに使います。 例えば、 ある音階の音のオン・オフというのは別段特定の音源固有の制御というわけではありませんが、 音源の初期化( GM音源、 GM2音源、 GS音源、 XG音源すべて違います)や、 エフェクタの細かなパラメータ設定 (音源ごとに使えるエフェクタの種類は異なる) なんかにはエクスクルーシブメッセージを用います。
まず、使用頻度の高い音源初期化からいってみましょう。 音源の初期化は通常、曲の最初に行います。 曲の演奏前にMIDI音源へデータを送るには、通常「共通コマンド」というものを用います。
.gm_system_on [volume 127][velocity 127][program 80] r cdefg
といったように、演奏データを記述する前に、 "."(ピリオド/ドット)で始まるMMLを記述することで、 そのMMLは共通コマンドと見なされます。ここでは .gm_system_on
がそうで、 GM音源の初期化のためのMMLです。
同様に、 .gm2_system_on
だとGM2音源の初期化、 .gs_init
だとGS音源の初期化、 .xg_system_on
だとXG音源の初期化になります。
演奏用のMMLの頭に休符(r)がありますが、 これは「音源初期化の(MIDI音源側の)作業には時間がかかる」ため、 わざとこのようにして演奏前の時間稼ぎをしています。
# ホントは別の回避法があるんですが、まずはこのように「演奏データ側である程度時間を稼ぐ」方法をマスターしてください。 休符をちょっと入れるだけですし、簡単でしょ?
音源の初期化以外にも、 エフェクタのパラメータ調整等をエクスクルーシブメッセージで行うことができますが、 これには .exclusive
や .roland_exclusive
、 .yamaha_exclusive
などの共通コマンドを用います。例えば、GS音源でリバーブの種類を選ぶには、
.roland_exclusive $41, $10 {$40, $01, $30, $05 } / REVERB MACRO $05=Plate
なんてやります。
# ホントは.gs_reverb {$05}
というようにリバーブ選択専用のMMLが用意されているんですが、 あくまで例と言うことでご勘弁ください。
また、 Lesson 10で曲のタイトルを入れる方法を説明しましたが、 これも共通コマンドの一種です。
演奏中にどうしてもエクスクルーシブメッセージを扱いたいと言うことがあるかもしれません。 例えば、曲の演奏中にエフェクタを切り替えたい、など。こういうときは、 演奏トラックで使えるエクスクルーシブメッセージ用のMMLである、 @X
や X
、 [YAMAHA_EXCLUSIVE]
などを使います。さっきの「GS音源でリバーブの種類を選ぶ」例だと、
@i$41, $10, $42 cde x$40,$01,$30,$05 fg
なんてやります。
ただし、演奏トラック側でエクスクルーシブメッセージを用いるためには、 事前に@i
で音源情報を登録しておく必要があります。詳しくは、@i
の説明を参照ください。