音源操作


現在のMIDI音源は、音がリアルになっただけでなく、どんどん機能も充実してきて、様々なエフェクトをかけたり、音色をエディットしたり、楽しい機能がたくさんあります。

しかし、そのエフェクトのかかり具合や、どのようにエフェクトを操作するのかなど、MIDI音源ごとに違ってくるので、ご利用のMIDI音源の取扱説明書を見てもらうしかないのですが、ここでは、普通の音源に共通の音源操作方法を見ていきます。


・代表的な音源操作の方法

  1. コントロールチェンジ ( yn1,n2 )
  2. ピッチベンド( pn1 )
  3. RPN と NRPN ( RPN = n1,n2,n3 || NRPN = n1,n2,n3 )
  4. システム・エクスクルーシブ・メッセージ ( SysEx = n1,n2,n3 ... )

  1. コントロールチェンジ

    ・代表的で手軽な音源操作の方法です。
    →メインボリュームや、パンポット(音の定位)、リバーブ(エコー・残響音)などを操作できます。それぞれのコントロールチェンジの値は、0〜127までです。

    ・比較的よく使うコントロールチェンジは、マクロとして定義してあります。詳しくは、ヘルプのMML・コントロールチェンジ・ピッチベンドの項を参照してください。

    使い方:
    ここでは、コントロールチェンジ10番のパンポットを使ってみます。これは、音の定位を設定するものです。サクラでは、"Panpot"という名前で定義されています。
    Panpot(0) cdef
    Panpot(127) cdef
    Panpot(64) cdef //定位中央
    と、このように使います。
    次に、コントロールチェンジ1番のModulationです。これは、ビブラートの深さを調節します。
    Modulation(0); l4 cdef
    Modulation(127); l4 cdef
    Modulation(0); l4 cdef
    (このように最小値と最大値で聞き比べると何が起こってるのか解り易いですね。)

  2. コントロールチェンジ・オプション

    さて、コントールチェンジにも、ノートオン関連コマンドのような先行指定オプションが存在します。
    ただし、微妙に使い勝手が違いますので、ご注意ください。

    .onNote( n1,n2,n3...)
    これは、ノートオンの度に、コントロールチェンジを1つ出力します。
    Chorus(0); l4 cdef
    Chorus.onNote(0,127); l4 cdef
    Chorus(30);//.onNote 解除

    Panpot(0); l4 cdef
    Panpot.onNote(0,127); l4 cdef
    Panpot(64);//.onNote 解除

    .onTime( (低値, 高値, ステップタイム),...)
    これは、ステップタイムの間に低値から高値へ向かって、コントロールチェンジを一通り連続出力します。繰り返し出力はされません。
    Modulation(0); l4 cdef
    Modulation.onTime(0,127,!1);
    l4 cdef g2g2
    Modulation(0); c1
    Panpot.onTime((0,127,!1),(127,0,!1));
    l4 cccc cccc cccc cccc
    Panpot(64) eeee

    .onNoteWave( (低値, 高値, ステップタイム),...)
    ノートオンの度にステップタイムの間に低値から高値へコントロールチェンジを連続出力します。解除は、コマンドを普通に指定します。また、.Repeat(off)にしておくと、一度きりで解除されます。
    Panpot.onNoteWave((0,127,!4));
    l4 cccc cccc
    Panpot.onNoteWave((0,127,!2));
    cccc cccc
    Panpot(64)//.onNoteWave解除
    eeee

    .onNoteWaveEx( (低値, 高値, 割合),...)
    これは基本的には.onNoteWaveと同じですが、ノートの音長に応じて、値の変化のスピードが変わってきます。
    Panpot.onNoteWaveEx((0,127,!8),(127,64,!4))
    q100 l1cc l2cccc l4cccccccc
    Panpot(64)//.onNoteWaveEx解除

    .onNoteWaveR( (低値, 高値, ステップタイム),...)
    これも基本的には.onNoteWaveと同じですが、ノートの音長が続く限り、パラメーターの低値から高値を繰り返します。
    Panpot.onNoteWaveR((0,127,!8),(127,0,!8))
    q100 [4 l1cccc]
    Panpot(64)//.onNoteWaveR解除

    .Frequency(ステップタイム)
    コントロールチェンジを書き込む頻度を設定します。

    .Range(低値,高値)
    コントロールチェンジの値を制限します。ノートオン・オプションの.Rangeと同じです。

  3. ピッチベンド(PitchBend)
    ピッチベンドとは、その名の通りピッチを調整するものです。PitchBend(n)で指定し、値の範囲は、-8192〜8191までです。-8192は、16進法で-2000Hです。サクラでは、値の前に$をつけるとその値を16進法と見なします。
    よってピッチベンドの範囲は、-$2000〜$1FFFまでと書けます。

    また、ピッチベンドもコントロールチェンジ・オプションと同等のオプションが指定できます。
    (ピッチベンドを使って遊んでみました。)
    r%4q100 o5

    PitchBendSensitivity(24);//ベンドレンジを24半音に
    PitchBend(0); c2
    PitchBend.onNote(20,90,-10,0);
    l4 cdefgfed
    PitchBend.onTime(0,$1FFF,!1);
    c1c2 PitchBend(0); c2
    PitchBend.onNoteWave((-$2000,0,!4),(0,-$2000,!4));
    l1cc l2 cccc l4 cccccccc
    PitchBend.onNoteWaveEx((-$2000,0,!4),(0,-$2000,!4));
    PitchBend.Frequency(3);//書き込み頻度を変えて遊ぶ
    l1cc l2 cccc l4 cccccccc
    PitchBend.Frequency(!32);
    l1cccc
    PitchBend.Frequency(!16);
    l1cccc

  4. RPN NRPN エクスクルーシブメッセージ

    これらは、音源の様々な細かい情報を設定するのに使われます。
    数が多く音源によっても対象が違います。

    しかし、各音源共通のGM規格ものと、現在主流であるローランド提唱のGS音源と、ヤマハ提唱のXG音源の音源操作命令のいくつかは、Includeフォルダーにて関数として定義されています。代表的なものは、"stdmsg.h"に、GS音源は、"gs.h"に、XG音源は、"xg.h"にて定義されています。

    これらの関数を使うには、MML先頭に、Include(ファイル名); の一文を書き加えてください。

    音源操作の名前をそのまま関数名として定義してありますので、音源の説明書と見比べれば、すぐ使えるかと思います。

    関数の詳しい説明は、また後ほど。

戻る次へ