//------------------------------------------------------------------------------
// テキスト音楽「サクラ」音楽データ (dSakura.dll Version.2.36)
//------------------------------------------------------------------------------

曲名{"Break time"}
作者{"n."}
コメント{"
  【この曲について】
  癒し系を目指した結果よくわからない方向に行ってしまったという典型です。

  Calm down のゲート調整があまりに面倒だったため、ゲート調整を関数化しています。
  が、いろいろ盛り込みすぎて関数化自体がかなり面倒な作業になったという。。
  また、関数の負荷が結構高いため、コンパイルに数秒を要すると思います。。
"}

/*
//- 演奏時間 -------------------------------------------------------------------

  2分 39秒

//- 変更履歴 -------------------------------------------------------------------

  2011/04/24 Ver 1.0:公開

  2011/06/04 Ver 1.1:追加・修正
    ・開始時の遅延を短縮
      演奏時間を、2分 41秒 → 2分 39秒 に修正
    ・TW-MUSIC2 専用モード追加(ドラムパートのみ)
    ・関数の修正

//------------------------------------------------------------------------------
*/

/*
//- 関数 "A" -------------------------------------------------------------------

  和音を鳴らす関数。

  入力形式
   MML 表記前提です。
   音符属性等は、^ < > 以外処理できません。
   
   具体例
   ○下記の形式の入力は、正常に処理できます。

    A{c8eg1}     → 音長を 1 (数値) で指定している
                    音の分散タイミングを 8 (数値) で指定している

    A{c4^8eg1^4} → 音長を 1^4 (数値+タイ+数値) で指定している
                    音の分散タイミングを 4^8 (数値+タイ+数値) で指定している

    A{1ceg1}     → ヘッダ(先頭の数字)

   ×下記の形式の入力は、正常に処理できません。

    A{ceg^}      → 音長を ^ (タイ) のみで指定している
    A{ceg2+4}    → 音長を ± で指定している
    A{ce^g1}     → 音の分散タイミングを ^ (タイ) のみで指定している
    A{c2-8eg1}   → 音の分散タイミングを ± で指定している
    A{ceg>32c1}  → 音の分散タイミングの前に > や < が存在する
    A{cegc1}     → 同じ音が複数回出現する

  オプション機能

   1 Pitch について、ランダムなずれを発生させることが出来ます。
     指定方法
     ?全体指定する場合
     →設定用変数(下記)の値に 1 を指定します。

       G_PitchRand = 1

     ?局所指定する場合
     →ヘッダに 1 を指定します。
         ↓
       A{1ceg1}

     ※?の全体指定で 1 が指定されている場合は、ランダム化を局所的に解除します。

   2 Velocity を、発音ごとに減衰させることが出来ます。
     指定方法
     ?減衰カーブの設定
     →設定用変数(下記)の値を指定します。

       G_VelCurve

     ※指定可能モードは、下記。
       E_CURVE_NONE        = 128;  // (1) 減衰曲線指定。下記のグラフを参照。
       E_CURVE_STRATE_DOWN = 256;  // (2) 直線で減衰。
       E_CURVE_INNER_DOWN  = 512;  // (3) 内側を通るように減衰。
       E_CURVE_OUTER_DOWN  = 1024; // (4) 外側を通るように減衰。
       E_CURVE_PARABOLA    = 2048; // (5) 放物線軌道で減衰(?)

(v)     (1)               (2)               (3)               (4)               (5)
 |･  ･  ･  ･  ･    |･                |･                |･                |     . .     
 |                 |   ･             | ･               |      ･          |   ･     ･   
 |                 |      ･          |   ･             |         ･       | ･         ･ 
 |                 |         ･       |      ･          |           ･     |･           ･
 |                 |            ･    |            ･    |            ･    |             
 |_____________(t) |_____________    |_____________    |_____________    |_____________

     ?減衰度合いの設定
     →設定用変数(下記)の値を指定します。

       G_DefaultVelCurveCoef

       ※値が大きいほど減衰が急になります。

       |･            
       |   ・ ･      
       |     ・  ･   
       |       ･   ･ 
       |        ･   ･
       |_____________

     ?オフセットの設定
     →設定用変数(下記)の値を指定します。

       G_VelCurveOffset

       ※負の値を設定すると前方、正の値を設定すると後方に減衰初期値をオフセットします。
         主に、E_CURVE_PARABOLA の制御に用います。

      (-)← Offset →(+)

       |     . .     
       |   ･     ･   
       | ･         ･ 
       |･           ･
       |             
       |_____________

   3 分散和音にした場合、内部で発音時間を調整して、終端が揃う/揃わないようにすることが出来ます。
     指定方法
     ?全体指定で終端が揃うようにする場合
     →設定用変数(下記)の値に 0 を指定します。

       G_Release = 0

     ?全体指定で終端が揃わないようにする場合
     →設定用変数(下記)の値に 1 を指定します。

       G_Release = 1

     ?局所指定で設定を切り替える場合
     →ヘッダに 8 を指定します。
         ↓
       A{8ceg1}

   4 入力された音を、逆転させて出力に追加出来ます(ギターストローク等の簡易化)。
     指定方法
     ?全体指定する場合
     →設定用変数(下記)の値に 1 を指定します。

       G_AutoReverse = 1

     ?局所指定する場合
     →ヘッダに 32 を指定します。
         ↓
       A{32ceg1}

     ※?の全体指定で 32 が指定されている場合は、ランダム化を局所的に解除します。

   5 ヘッダにおけるオプションの同時指定
     →設定値同士を足し合わせたものを指定します。

     9 : PitchRand + Release
     33: PitchRand + AutoReverse
     40: Release   + AutoReverse
     48: PitchRand + AutoReverse + Release

  備考
   メモリ馬鹿食いです。。

//- 変更履歴 -------------------------------------------------------------------

  2011/04/24 Ver 1.0:公開

  2011/06/04 Ver 1.1:修正
    ・注釈を修正
    ・初期化の必要ない箇所について、コメントアウト

//------------------------------------------------------------------------------
*/

// 各種 ASCII コードを格納。
// この値を変更してはならない！
INT ASC_0                  = ASC({0});
INT ASC_9                  = ASC({9});
INT ASC_A                  = ASC({a});
INT ASC_G                  = ASC({g});
INT ASC_PLUS               = ASC({+});
INT ASC_MINUS              = ASC({-});
INT ASC_ACCENT_CIRCONFLEXE = ASC({^});
INT ASC_LESS_THAN_SIGN     = ASC({<});
INT ASC_GREATER_THAN_SIGN  = ASC({>});

// 内部設定用列挙子。
// この値を変更してはならない！
INT E_PITCH_RAND        = 1;    // Pitch をランダム化する。
INT E_RELEASE           = 8;    // 終端をそろえない。
INT E_AUTO_REVERSE      = 32;   // 音を逆転させて追加出力。
INT E_CURVE_NONE        = 128;  // 減衰曲線指定。
INT E_CURVE_STRATE_DOWN = 256;  // 直線で減衰。
INT E_CURVE_INNER_DOWN  = 512;  // 内側を通るように減衰。
INT E_CURVE_OUTER_DOWN  = 1024; // 外側を通るように減衰。
INT E_CURVE_PARABOLA    = 2048; // 放物線軌道で減衰(?)
INT E_DEBUG_PRINT       = 65536;

// 内部設定用グローバル変数
// この値を変更して、内部挙動を調整することができる
INT G_PitchRand           = 1;                    // Pitch のランダム化フラグ。1 で常時ランダム。
INT G_Release             = 0;                    // 終端をそろえないフラグ。1 で常時そろえない。
INT G_AutoReverse         = 0;                    // 逆転出力追加の有無。1 で常時逆転出力追加。
INT G_VelCurve            = E_CURVE_PARABOLA      // Velocity の減衰モード。
INT G_DefaultVelCurveCoef = 4;                    // Velocity の減衰の度合い。値が大きいほど減衰が急になる。
INT G_VelCurveOffset      = 1;                    // Velocity の減衰タイミングをずらす。
INT G_DefaultDelay        = 128;                  // 音の分散タイミングの既定値。
INT G_DebugPrint          = 0;

// 切り上げ割り算
FUNCTION DivRoundUp(INT Value, INT Div){
    Result = (Value * 10 / Div + 9) / 10;
}

// べき乗計算
FUNCTION Pow(INT Value, INT e){
    INT RetCalc = Value;
    For(INT I = 1; I < e; I++){
        RetCalc = RetCalc * Value;
    }
    If(e){
        Result = RetCalc;
    }Else{
        Result = 1;
    }
}

// "Init" 用の値受け渡し用変数
INT L_PitchRand;
INT L_Release;
INT L_AutoReverse;
INT L_VelCurve;
INT L_DefaultVelCurveCoef;
INT L_VelCurveOffset;
INT L_DefaultDelay;
INT L_DebugPrint;

// 各変数の初期化
FUNCTION Init(INT Header){
    L_PitchRand   = (G_PitchRand / G_PitchRand + ((Header & E_PITCH_RAND) / E_PITCH_RAND)) % 2;
    L_AutoReverse = (G_AutoReverse / G_AutoReverse + ((Header & E_AUTO_REVERSE) / E_AUTO_REVERSE)) % 2;
    L_Release     = (G_Release / G_Release + ((Header & E_RELEASE) / E_RELEASE)) % 2;
    L_VelCurve    = G_VelCurve;
    L_VelCurveOffset = G_VelCurveOffset;
    // 処理効率を上げるため、ネスト化。効果があるのかは、不明。
    If(Header & E_CURVE_PARABOLA){
        L_VelCurve = E_CURVE_PARABOLA;
    }Else{
        If(Header & E_CURVE_STRATE_DOWN){
            L_VelCurve = E_CURVE_STRATE_DOWN;
        }Else{
            If(Header & E_CURVE_INNER_DOWN){
                L_VelCurve = E_CURVE_INNER_DOWN;
            }Else{
                If(Header & E_CURVE_OUTER_DOWN){
                    L_VelCurve = E_CURVE_OUTER_DOWN;
                }Else{
                    If(Header & E_CURVE_NONE){
                        L_VelCurve = E_CURVE_NONE;
                    }
                }
            }
        }
    }
    L_DefaultDelay = G_DefaultDelay;
    L_DefaultVelCurveCoef = G_DefaultVelCurveCoef;
    L_DebugPrint = (G_DebugPrint / G_DebugPrint + ((Header & E_DEBUG_PRINT) / E_DEBUG_PRINT)) % 2;
}

// 減衰曲線を作成
FUNCTION CreateCurve(INT StartVel, INT NoteCount, INT CurveOffset = 0){
    INT Count = CurveOffset;
    STR RetStr;
    INT Calc;
    INT HalfNoteCount = DivRoundUp(NoteCount, 2);
    // 処理効率を上げるため、ベタ書き。ループ内に判定を設置する場合と比べ、9% 程度の速度向上。
       Switch(L_VelCurve){
           Case(E_CURVE_STRATE_DOWN){
               RetStr = StartVel - L_DefaultVelCurveCoef * Count;
            For(INT I = 1; I < NoteCount; I++){
                Calc = StartVel - L_DefaultVelCurveCoef * Count
                 Count++;
                RetStr = RetStr + "," + Calc;
            }
          }
           Case(E_CURVE_INNER_DOWN){
               RetStr = StartVel * Pow(L_DefaultVelCurveCoef - Count, 2) / Pow(L_DefaultVelCurveCoef, 2);
            For(INT I = 1; I < NoteCount; I++){
                Calc = StartVel * Pow(L_DefaultVelCurveCoef - Count, 2) / Pow(L_DefaultVelCurveCoef, 2);
                 Count++;
                RetStr = RetStr + "," + Calc;
            }
           }
           Case(E_CURVE_OUTER_DOWN){
               RetStr = StartVel - L_DefaultVelCurveCoef * Pow(HalfNoteCount-(Count + HalfNoteCount), 2);
            For(INT I = 1; I < NoteCount; I++){
                Calc = StartVel - L_DefaultVelCurveCoef * Pow(HalfNoteCount-(Count + HalfNoteCount), 2);
                 Count++;
                RetStr = RetStr + "," + Calc;
            }
           }
           Case(E_CURVE_PARABOLA){
               RetStr = StartVel - L_DefaultVelCurveCoef * Pow(HalfNoteCount-Count, 2);
            For(INT I = 1; I < NoteCount; I++){
                Calc = StartVel - L_DefaultVelCurveCoef * Pow(HalfNoteCount-Count, 2);
                 Count++;
                RetStr = RetStr + "," + Calc;
            }
           }
        Default{
               RetStr = StartVel;
            For(INT I = 1; I < NoteCount; I++){
                Calc = StartVel;
                RetStr = RetStr + "," + Calc;
            }
        }
       }
    Result = RetStr;
}

// 時間ごとの値をランダムで生成
FUNCTION CreateRand(INT NoteCount, INT Range = 384){
    STR RetStr = Random(-Range, Range);
    For(INT I = 1; I < NoteCount; I++){
        RetStr = RetStr + "," + Random(-Range, Range);
    }
    Result = RetStr;
}

FUNCTION A(STR S){
    // 開始時の値を保存
    INT Startv = MML(v );
    INT Starto = MML(o );
    INT Startp = MML(p%);
    INT Startq = MML(q );
    INT Startt = MML(t );
    
    INT StrLen  = SizeOf(S) + 1;

    // ヘッダの読み出し
    INT HeaderOffset;
    INT ASCIICode;
    For(INT I = 1; I < StrLen; I++){
        ASCIICode = ASC(MID(S, I, 1));
        If(ASC_0 > ASCIICode || ASC_9 < ASCIICode){
            HeaderOffset = I - 1;
            Exit;
        }
    }
    INT Header = StrToNum(MID(S, 1, HeaderOffset));

    Init(Header); // 値の初期化
    
    // ベースとなる音長を取得
    INT LengthOffset;
    For(INT I = StrLen - 1; I > 0; I--){
        ASCIICode = ASC(MID(S, I, 1));
        If(ASC_ACCENT_CIRCONFLEXE != ASCIICode && (ASC_0 > ASCIICode || ASC_9 < ASCIICode)){
            Exit;
        }
        LengthOffset++;
    }
    STR Length = MID(S, StrLen - LengthOffset, LengthOffset);

    // 音の取得
    INT NoteSum = 0;
    STR CurrChar;// = {}; //初期化の必要がないため。
    STR MainStr;// = {};
    For(INT I = HeaderOffset + 1; I < StrLen - LengthOffset; I++){
        CurrChar = MID(S, I, 1);
        ASCIICode = ASC(CurrChar);
        Switch(ASCIICode){
            Case(ASC_PLUS){
                MainStr = MainStr + {+};
            }
            Case(ASC_MINUS){
                MainStr = MainStr + {-};
            }
            Case(ASC_LESS_THAN_SIGN){
                MainStr = MainStr + CurrChar;
            }
            Case(ASC_GREATER_THAN_SIGN){
                MainStr = MainStr + CurrChar;
            }
            Default{
                If(ASC_A <= ASCIICode && ASC_G >= ASCIICode){
                    MainStr = MainStr + CurrChar;
                    NoteSum++;
                }
            }
        }
    }

    // 音の分散タイミング情報を取得し、音長をコントロール
    STR DelayStr;// = {};
    STR DelaySum = "0";
    STR LengthStr;// = {};
    STR LengthMinus = Length;
    INT NumNotExist = 0;
    For(INT I = HeaderOffset + 1; I < StrLen - LengthOffset; I++){
        CurrChar = MID(S, I, 1);
        ASCIICode = ASC(CurrChar);
        Switch(ASCIICode){
            Case(ASC_PLUS){}
            Case(ASC_MINUS){}
            Case(ASC_LESS_THAN_SIGN){}
            Case(ASC_GREATER_THAN_SIGN){}
            Case(ASC_ACCENT_CIRCONFLEXE){
                DelaySum = DelaySum + "^";
                LengthMinus = LengthMinus + "-";
            }
            Default{
                If(ASC_0 <= ASCIICode && ASC_9 >= ASCIICode){
                    DelaySum = DelaySum + CurrChar;
                    LengthMinus = LengthMinus + CurrChar;
                    NumNotExist = 0;
                }Else{
                    If(NumNotExist){
                        DelaySum = DelaySum + L_DefaultDelay;
                        LengthMinus = LengthMinus + L_DefaultDelay;
                    }
                    If(ASC(DelayStr)){
                           DelayStr = DelayStr + ",!" + DelaySum;
                    }Else{
                        DelayStr = "!0";
                    }
                    DelaySum = DelaySum + "^";
                    If(ASC(LengthStr)){
                        LengthStr = LengthStr + ",!" + LengthMinus;
                    }Else{
                           LengthStr = "!" + Length;
                    }
                    LengthMinus = LengthMinus + "-";
                    NumNotExist = 1;
                }
            }
        }
    }
    
    STR ResultHeader = "t.N(" + DelayStr + ")";
    STR ResultFooter = "v" + Startv + "o" + Starto + "q" + Startq + "t(" + Startt + ")";

    If(L_PitchRand){
        STR PitchStr = CreateRand(NoteSum);                // Pitch のランダム値を取得
        ResultHeader = ResultHeader + "p%.N(" + PitchStr + ")";
        ResultFooter = ResultFooter + "p%(" + Startp + ")";
    }

    STR VelStr   = CreateCurve(Startv, NoteSum, L_VelCurveOffset); // Velocity の減衰曲線を取得
    STR ResultStr;// = {};

    If(L_AutoReverse){
        ResultStr = ResultHeader  + "v.N(" + VelStr + ")" + "'" + MainStr + "'" + Length;
        STR tmpVelCurve = CreateCurve((Startv-5), NoteSum, L_VelCurveOffset);
        If(L_Release){
        }Else{
            ResultHeader = "q%.N(" + LengthStr + ")" + "v.N(" + tmpVelCurve + ")" + ResultHeader;
        }
        // 逆転出力追加
        STR ReverseStr = {};
        INT MainStrLen = SizeOf(MainStr);
        STR DelayChar = {};
        STR DelayBuffer = {};
        For(INT I = MainStrLen; I > 0; I--){
            CurrChar  = DelayChar;
            DelayChar = MID(MainStr, I, 1);
            ASCIICode = ASC(CurrChar);
            Switch(ASCIICode){
                Case(ASC_PLUS){
                    DelayBuffer = DelayBuffer + DelayChar + "+";
                    CurrChar = {};
                    DelayChar = {};
                }
                Case(ASC_MINUS){
                    DelayBuffer = DelayBuffer + DelayChar + "-";
                    CurrChar = {};
                    DelayChar = {};
                }
                Case(ASC_LESS_THAN_SIGN){
                    CurrChar = ">";
                }
                Case(ASC_GREATER_THAN_SIGN){
                    CurrChar = "<";
                }
                Default{
                    DelayBuffer = DelayBuffer + CurrChar;
                    CurrChar = DelayBuffer;
                    DelayBuffer = {};
                }
            }
            ReverseStr = ReverseStr + CurrChar;
        }
        ReverseStr = ReverseStr + DelayBuffer;
        ResultStr = ResultStr + ResultHeader + "'" + ReverseStr + "'" + Length;
    }Else{
        If(L_Release){
        }Else{
            ResultHeader = "q%.N(" + LengthStr + ")" + "v.N(" + VelStr + ")" + ResultHeader;
        }
        ResultStr = ResultHeader + "'" + MainStr + "'" + Length;
    }
    
    ResultStr = ResultStr + ResultFooter;
    
    If(L_DebugPrint){
        Print(ResultStr);
    }
    
    ResultStr;
}

SoundType=0;
拍子4,4 調#()             // C
Tempo(170)

INT Mode   = 1; // TW-MUSIC2 以外では、0 を指定してください。

TR( 1) CH( 1) V(100) EP(127) v(100) q(100) P(  0) REV( 32) @( 25)
TR( 2) CH( 2) V(100) EP(127) v(100) q(100) P(127) REV( 64) @( 27)
TR( 3) CH( 3) V(100) EP(127) v(100) q(100) P( 64) REV( 48) @( 51)
TR( 4) CH( 4) V(100) EP(127) v(100) q(100) P( 56) REV(  0) @( 35)
TR( 5) CH( 5) V(100) EP(127) v(100) q(100) P( 48) REV( 80) @( 27)
TR( 6) CH( 6) V(100) EP(127) v(100) q(100) P(  8) REV(  0) @( 80)
TR( 7) CH( 7) V(100) EP(127) v(100) q(100) P(120) REV(  0) @( 74)
If(Mode){
TR(10) CH(10) V(100) EP(127) v(100) q(100) P( 63) REV(  0) @( 33, 90, 1)
}Else{
TR(10) CH(10) V(100) EP(127) v(100) q(100) P( 63) REV(  0) @(StandardSet)
}
#PH01_A = {o( 6) v( 50) q( 400) [64 f+8<v-10b8v+10>c+8<v-10b8v+10>]};
#PH01_B = {o( 6) v( 40) q( 400) [56 f+8<v-10b8v+10>c+8<v-10b8v+10>]};
#PH01_C = {o( 6) v( 50) q( 400) [8v-3f+8<v-10b8v+10>c+8<v-10b8v+10>]};
#PH02_A = {o( 2) v(100) q( 100) [4 b1^2^8>c+8r8d+1^2^4d+8r8f+1^2^4d+8r8d+1^1^8<]};
#PH03_A = {o( 4) v( 90) q( 100) r1r2r8
[
[a+8&b8A{8f+>f+1^2^8}v-10A{f+<b8}v+10>a+16&b16&a+8<A{c+32>f+1^2^4}A{f+64b>f+b8}A{f+>a+16}:A{d+16f+32a+>f+a+1^1}r1r2r4r16]
:A{d+16f+32a+>f+a+1^2^4^8^16}v-40f+16r16v+40r8r1r2r8]A{d+16f+32a+>f+a+1^1}
};
#PH04_A = {o( 6) v( 50) q( 100) EP.onNoteWaveEx((10, 127, !1),(127, 127, !1),(127, 60, !1)) 'c+f+'1^1r1EP(127)};
#PH05_A = {o( 4) v( 70) q( 100) 
[
[[A{40f+b>f+b8}>v-30A{8bf+<bf+8}v+30<]A{40f+b>f+b8}]
[A{40f+a+>f+a+8}>v-30A{8a+f+<a+f+8}v+30<]
A{40f+a+>f+a+8}
[A{40f+a+>f+a+8}>v-30A{8a+f+<a+f+8}v+30<]
A{40f+a+>f+8}
[[A{40d+g+>d+g+8}>v-30A{8g+d+<g+d+8}v+30<]:A{40d+g+>d+g+8}]
A{40c+f+>c+f+8}
[[A{40f+a+>f+a+8}>v-30A{8a+f+<a+f+8}v+30<]A{40f+a+>f+a+8}]
]
};
#PH06_A = {o( 5) v( 80) q(100) EP.onNoteWaveEx((70, 127, !2),(127, 127, !1),(127, 90, !2)) b1^1a+1^1g+1^1a+1^1b1^1>c+1^1d+1^1f+1^1r1EP(127)};
#PH06_B = {o( 5) v( 50) q(100) EP.onNoteWaveEx((70, 127, !2),(127, 127, !1),(127, 90, !2)) r2b1^1a+1^1g+1^1a+1^1b1^1>c+1^1d+1^1f+1^2r1EP(127)};
#PH07_A = {o( 4) v( 70) q(100) 
[
[A{32d+g+>d+g+8}]r8
A{d+64g+>d+g+8}r8
A{c+f+>c+f+2^4^8}
b8&>c+16r16<A{d+32g+>d+g+>d+4}>c+8
<A{f+b>f+b4}>d+8
<A{c+f>c+f>c+2} b8 A{f+a+>f+4^8} > d+4 <

[A{32d+g+>d+g+8}]r8
A{d+64g+>d+g+8}r8
A{c+f+>c+b2^4^8}
b8&>c+16r16<A{d+32g+>d+g+>d+g+4}>c+8
<A{f+b>f+b>f+4}>d+8
<A{c+f>c+f>c+f2} b8 A{f+a+>d+f+4^8} > d+4<
]
};
#PH08_A = {o( 6) v( 80) q(100) EP.onNoteWaveEx((105, 127, !2),(127, 127, !1),(127,110, !2)) '<g+b>'1'<f+>c+'1'<g+b>'4r8'<g+>d+'4'c+f+'8'<g+>c+'1^4r1EP(127)};
#PH08_B = {o( 6) v( 50) q(100) EP.onNoteWaveEx((105, 127, !2),(127, 127, !1),(127,110, !2)) ['<g+b>'1'<f+>c+'1'<g+b>'4r8'<g+>d+'4'c+f+'8'<g+>c+'1^4]r1EP(127)};
#PH09_A = {};
#PH10_A = {o( 2) v( 90) q( 100) [8g+][8f+][8g+][8f+][4d][4e][8b][6d][e][8f+][[4f+][4e]<[4b]>[4c+]]};
#PH11_A = {o( 3) v( 80) q( 100) 
[[4A{40d+g+>d+g+4}][4A{40c+f+>c+4}]]
[A{40db>d4}]
[A{40eb>e4}]
[4A{40d+b>d+4}]
[A{40db>d4}]
A{40da>da4}
A{40ea>ea4}
[4A{40f+>c+f+4}]
[[3A{40f+b>f+4}]A{40eb>e4}[4A{40c+f+>c+4}]]
};
#PH12_A = {o( 4) v( 90) q( 100)
A{g+16b8>d+1^2^4^8}>f16&f+4<A{d+16f+8a+1^2^4}
A{g+16b8>d+1^2^4^8^16}>f16&f+8^16<A{d+16f+8a+1^1}

>f8&f+8e8d4e4e8&f+8a+8&b8a4f+4<
A{d+f+16b32>f+1^1^8}
>f8&f+8e8d4e4e8&f+8b8&>c+8<a4e4<
A{c+f+16a32>c+a1^1^8}
[
A{c+f+8b4>f+2^8}A{f+b4^8}
A{d+f+8b4>f+2^8}A{b>e4^8}
A{8c+8f+4>f+2^4}A{c+f+>c+1^4}
]
}

PlayFrom(  3:1: 0)
//            Track|0|    1   |    2   |    3   |    4   |    5   |    6   |    7   |
Time(  3:1: 0) Play( , #PH01_A, #PH03_A,        , #PH02_A,        ,        ,        );
Time( 17:1: 0) Play( ,        ,        , #PH04_A,        ,        ,        ,        );
Time( 19:1: 0) Play( ,        ,        ,        ,        , #PH05_A, #PH06_A, #PH06_B);
Time( 35:1: 0) Play( ,        ,        ,        ,        , #PH07_A, #PH08_A,        );
Time( 39:1: 0) Play( ,        ,        ,        ,        ,        ,        , #PH08_B);
Time( 43:1: 0) Play( ,        ,        ,        ,        ,        , #PH08_A,        );
Time( 47:1: 0) Play( ,        ,        , #PH04_A,        ,        ,        ,        );
Time( 51:1: 0) Play( ,        , #PH01_B,        ,        ,        ,        ,        );
Time( 54:4:50) Play( ,        ,        ,        ,        , #PH12_A,        ,        );
Time( 55:1: 0) Play( , #PH11_A,        ,        , #PH10_A,        ,        ,        );
Time( 79:1: 0) Play( , #PH01_A, #PH03_A,        , #PH02_A, #PH05_A, #PH06_A, #PH06_B);
Time(109:1: 0) Play( ,        ,        , #PH04_A,        ,        ,        ,        );
Time(111:1: 0) Play( , #PH01_C,        ,        ,        ,        ,        ,        );

TR(10)
$t{n38,} $g{n40,} $d{n36,} $z{n44,} $s{n46,} $k{n53,} $a{n45,} $b{n43,} $p{n55,} 
$c{n57,} $j{n51,} $u{n54,} $x{n42,} $i{n36,} $f{n59,} $w{n49,} $o{n31,} $h{n39,}
Time( 19:1: 0)v60
Rythm{
[4[3'jd'8r4d8'jtd'r8d8]'jd'8d4d8'jtd'8z8's'8d8]
[
['jd'4j'tj'4'dj'4j8d8j4'tj'4j :'ds'4^8'tp'4^8'df'4^8v-5[t16][d8]v+5[a8]b8d8c0]
'jd'4d8'tf'4t8d4s8k8v-5[d16^64:t16^32]a16^64a16^32a16^64b16^64b16^32b16^64v+5:c0
]
r1^1
[7['jd']'jt''jd'['jd']'fxt''kjd' :[['jd']'jt''jd']]
[8[3'jd'8r4d8'jtd'r8d8]'jd'8d4d8'jtd'8z8's'8d8]
}
