// メタイベント
Copyright = {"かまきりざーど"}
TrackName = {"「久しぶりなのにこれかよぅ」な曲"}

// 基本的な設定
   Tempo = 110;
TimeBase = 480;

// 関数(この曲で使ってないのもある)
/*:
    MT (開始トラック, 終了トラック, S)
    MT: 文字列Sを複数のトラックに対して実行する。
    【使い方】
      // トラック2~5のベロシティを+20する。
      MT (2, 5, { v+20 })

    ET (S, トラック,..<可変>)
    ET: 文字列Sを一部のトラックに対して実行する。
    【使い方】
      // トラック1とトラック11に対して「ドミソ」と鳴らす。
      ET ({ ceg }, 1, 11)

    ONCE (フラグ, A, B)
    ONCE: フラグがオフならAを実行する。オンならBを実行する。
          戻り値には必ずオンが返る。一度だけAを実行させる処理をIfを使わずに書きたい時に。
    【使い方】
      // 1回だけ途中で「かっこー」と鳴らす。
      [3 cdef #F = ONCE(#F, { ``d32r8`b32r8 }) gab`c ]

    LTR (S, ティック)
    LTR: 指定したティックの経過後、Sを実行する。LaTeRの略。
    【使い方】
      // 対位法的な
      LTR { l4 "g"b"a-c"bd },!2
            l8 ce-df e-cd"b cde-f g2

    TRCH (チャンネル)
    TRCH: トラックとチャンネルを同時に設定しちゃう。

    DRTR (トラック)
    DRTR: チャンネルを10にして別トラックに分ける。

    MsToTickAbout (ミリ秒)
    MsToTickAbout: 指定した時間(ミリ秒)をティックに変換する。
                   ただし、テンポやタイムベースによっては誤差が生じる場合がある。
    【使い方】
      // 「ドミソ」の和音を500ミリ秒くらい鳴らす
      'ceg'%(MsToTickAbout(500))
:*/

Function MT (From, To, Str S) { For (; From <= To; From++) { TR(From) S } }
Function ET (Str S, Array TRs) { For (Int I = 0; I < SizeOf(TRs); I++) { TR(TRs(I)) S } }
Function ONCE (Flag, Array A) { Str S; Result = on; S = A(Flag == on); S }
Function LTR (Str S, Len) { Sub { r%(Len); S } }
Function TRCH (Ch) { TR(Ch) CH(Ch) }
Function DRTR (Tr) { TR(Tr) CH(10) }
Function MsToTickAbout (Ms) { Result = (Ms * TimeBase) / (60000 / Tempo) }

// MIDIリセットに必要なブランクタイムを計算する
Int   BlankMs = 50;
Int BlankTick = MsToTickAbout(BlankMs);

// 初期化
System.MeasureShift(1)
System.TimeSignature(4, 4)
TR(00) Time(0:1:0) ResetGS;
       MT(01, 16, { ArgOrder(lvqto); Time(0:1:BlankTick) })

// トラック設定
/*:
TRCH(01) y0(000) r%1; y32(000) r%1;   @(001) r%1;   P(064) r%1;
          V(100) r%1;  EP(127) r%1; REV(000) r%1; CHO(000) r%1;
:*/
              
TRCH(01) y0(000) r%1; y32(000) r%1;   @(045) r%1;   P(064) r%1;
          V(100) r%1;  EP(127) r%1; REV(060) r%1; CHO(030) r%1;
              
TRCH(02) y0(000) r%1; y32(000) r%1;   @(007) r%1;   P(064) r%1;
          V(100) r%1;  EP(127) r%1; REV(060) r%1; CHO(030) r%1;

// ここからデータを書く
// そろそろ綺麗なソースの書き方を考えたい。
TR(01) v100 q80
  o6 EP.W(127, 127, !8, 127, 60, !1)
  l4 ce-gb- l8 a-^^g f^^^ | l4 "bdfa- l8 g^^f e-^^^
  l4 e-cb-g l8 a-^^b- `c^^^ | l4 bgdf l8 e-^^d c^^^ | c1 '"bd*'1

TR(02) v100 q80
Include(delay.h)
  Sub {
    // 低音部
    o4
    l4 [2 c"g ] [2 d"g ] d"gd"b c4 l8 <ga-gfe-d
    l4 [2 cg ] [2 fa- ] gab>d c"gc4."b-8 | "a-1 "g1
  }
  o5
  LTR { [3 MidiDelay{ ``d32r8`b32r8 r4 },3,!12 ] },!1^4 // かっこー
  l8 [4 e-c ] [4 d"b ] [4 d"b ] [4 e-c ]
  l8 [4 e-c ] [4 fc ] [4 d"g ] ce-de- c^^^ | t.N(0, 16, 36, 64) '"f"a-ce-'1 '"e"gce'1

// 1行コメント
/* 複数行コメント */
/** 複数行コメント(強調1) **/
/*: 複数行コメント(強調2) :*/

// エディタ設定の Brackets から
// "/**" "**/" や "/*-" "-*/" みたいに色登録してあげると
// いろんな色のコメントアウトが作れる。
// ただし、"/*" "*/" のやつを最後にしないとうまくいかないみたいだ。