トラックとチャンネルと時間

トラックとチャンネルの概念

普通、MIDI音源には、16個のチャンネルがあり、様々な音色の中から、16種類の楽器を1度に発音することが出来る仕組みになっています。

サクラでは、その16のチャンネルを、0〜511のトラックのいずれかに割り振って使います。

初期状態では、トラック0にチャンネル1、トラック1にチャンネル1、トラック2にチャンネル2、トラック3にチャンネル3・・・と、割り振られています。

これを割り振りなおすには、Track(n)Channel(n) という命令を使います。
Track(0) Channel(1)
Voice(1)//チャンネルの1番に、音色の1番(ピアノ)を設定。
l4 o5 cdefgfedcegec1

Track(1) Channel(2)
Voice(33)//チャンネルの2番に、音色の33番(ベース)を設定。
l4 o3 ccccccccccccc1
このように、違う楽器を16種類割り当てることが出来ます。

トラックと時間

音というものは、音の高さと、それが発せられる時間によって成り立っています。サクラでは、Time命令によって、音の発せられる時間を制御できます。
この命令には2種類の指定方法があります。
  1. Time( 小節:拍:ステップ ) 指定

    普通の音楽製作ソフトで利用されている時間の指定方法です。
    初期状態では、Time( 1: 1: 0)から始まります。
    Time( 1:1:0 )//1小節目の1拍目に設定。
    l4 cdef
    Time( 2:1:0 )//2小節目の1拍目に設定。
    l4 gfed cdef
    Time( 3:1:0 )//3小節目の1拍目に設定。
    l4 efga   //即ち、音が重なる

    ところが、インターネットなどで他人に公開するためのデータには、音源のリセット命令や、音色エディットの命令を送るために、1、2小節間を空けておきます。

    そこで、System.MeasureShift(n)を使うと、その開始小節を変えることができます。
    Include(stdmsg.h);//リセット命令のため
    System.MeasureShift(1);
    Time(0:1:0)
    ResetXG();ResetGS();ResetGM();//音源リセット
    Time(1:1:0)
    l4 cdef gfed cege cege cege c1

    また、音楽と言うのは、だいたい四小節で区切りですので、開始小節を0小節目から始める事にすれば、ちょうど、4の倍数小節目が、区切りの良い小節になるので、計算が楽です。(この辺りは好みの問題になってきますけれど。。。)
    Include(stdmsg.h);//リセット命令のため
    System.MeasureShift(2);
    Time(-1:1:0)
    ResetXG();ResetGS();ResetGM();//音源リセット
    Time(
    0:1:0)
    l4 cdef gfed cege cege
    Time(
    4:1:0)
    l4 cdef gfed cege cege
    Time(
    8:1:0)
    l4 cdef gfed cege cege
    Time(12:1:0)
    l4 cdef gfed cege cege
    //...

  2. Time = StepTime 指定

    Timeをステップ値を指定します。しかし、考えてみても、時間を四小節目に合わせるのに、四分音符分解能が96だと1小節が96X4=384で、四小節は1小節が4つだから、4を掛けて、384X4=...なんて使い方はしません。

    時間をちょっと進めたいときなどに、相対的に、
    Time = Time + !4;
    と、指定します。

    この例では、 r4 とほぼ同じ意味(*1)で、あまり意味がありません。あとで、変数が出てくるのですが、変数をこのTimeと組み合わせると、いろいろと面白いことが出来るようになります。
    (*1: r4 では、発音イベントを行ってしまうので、正確には、r*4と同じ意味です。 r*で、発音イベントを処理しません。)
    //変数を使って楽をする例

    l4 cdef //...MMLが続いていて...
    Int A;
    //変数Aを宣言。Aが生まれた。
    A = (Time)
    ;//Aに現在の時間を代入。
    l4 cdef gfed//...永遠と続くMML...
    //あ、Aの位置に戻りたいなぁ・・・
    //戻ろう!
    Time = A;//これで、Aの時間に戻れました。
    l4 efga //...めでたし、めでたし。

戻る次へ