/**
 * 楽曲情報を定義した関数。
 * 関数を定義化していないので楽曲情報をコード上部に記載するための記法。
 */
Function Main() {

    /** 全体設定 ============================================================ */
    TR=00;  Copyright={"AK-I"};
            TrackName={"No Name(J-POP)"};
            TimeBase = 96;
            KeyFlag+();
            Tempo(156);
            SetTimeSignature(4, 4);
    /** 歌詞 ================================================================ */
    /** スコア ============================================================== */
    /** Score : ボイスパート    --------------------------------------------- */
    #MT_SCOR_VOICE = {
      r1 // DrumFillIn
      [16 r1] // イントロ
	/* Aメロ */
      o6v110 c4c8<b16>c16^8<b8>c8d8    c4r8c8d8c8<b8>c8    <b4b8>c16<b16^4>r4  r1
      o6v110 c4c8<b16>c16^8<b8>c8d8    c4r8c8d8e8 c8 c8     e1                 f2d2
      o6v110 c4c8<b16>c16^8<b8>c8d8    c4r8c8d8c8<b8>c8    <b4b8>c16<b16^4>r4  r1
      o6v110 c4c8<b16>c16^8<b8>c8d8    c4r8c8d8e8 c8 c8     e1                 f4e4d4c4
	/* Bメロ */
      o6v110 c4c8c16c16c16c16<b8b8>c16d16 c4c8c16c16c16c16<b8b8>c16d16 c4c8c16c16c16c16<b8b8>c16d16 c4.c4d8e4
      o6v110 c4c8c16c16c16c16<b8b8>c16d16 c4c8c16c16c16c16<b8b8>c16d16 c4c8c16c16c16c16<b8b8>c16c16 d4.e4.f4
	/* サビ */
      o6v116 e8e8e8d16e16^8d4.  r8e8f8g8f8e4d8  e4.d16e16^8f8g8a8  e2d2
      o6v116 c4.d16e16^8c8d8e8  ^4.d16d16^8c8f8e8 a4.g8c2^1
      o6v116 e8e8e8d16e16^8d4.  r8e8f8g8f8e4d8  e4.d16e16^8f8g8a8  e2d4.r8
      o6v116 c4c8d16e16^8c8d8e8  ^4.d16d16^8c8f8e8 d4c8c2.^2.r8
    }
    /** Score : ピアノパート ------------------------------------------------ */
    #MT_P_SCOR = {
      r1 // DrumFillIn
      /* イントロ */
	[8r1]
      o6v116 e8e8e8d16e16^8d4.  r8e8f8g8f8e4d8  e4.d16e16^8f8g8a8  e2d4.r8
      o6v116 c4c8d16e16^8c8d8e8  ^4.d16d16^8c8f8e8 d4c8c2.^2.r8
	/* Aメロ */
	/* Bメロ */
	/* サビ */
	/* 間奏 */
    }
    /** Score : ギターIパート(1) ストロークスコア --------------------------- */
    /* イントロ用(1) */
    #MT_G_Stroke01 = {
        GuitarStroke(GUITAR_DOWN_STROKE,  !4,  2, 97,  2);
	  GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE, !16,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE, !16,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE, !16,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE, !16,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE, !16,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE, !16,  2, 97,  2);
    }
    /* イントロ用(2) FillIn */
    #MT_G_Stroke02 = {
        GuitarStroke(GUITAR_DOWN_STROKE,  !4,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE, !16,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE, !16,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE, !16,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE, !16,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE, !16,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE, !16,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE, !16,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE, !16,  2, 97,  2);
    }
    /* Aメロ用(1) */
    #MT_G_Stroke03 = {
        GuitarStroke(GUITAR_DOWN_STROKE,  !4,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !4,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE, !16,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE, !16,  2, 97,  2);
    }
    /* Aメロ用(2) FillIn */
    #MT_G_Stroke04 = {
        GuitarStroke(GUITAR_DOWN_STROKE,  !4,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !4,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !4,  2, 97,  2);
    }
    /* サビ(1) */
    #MT_G_Stroke05 = {
        GuitarStroke(GUITAR_DOWN_STROKE,  !4,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !4,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
    }
    /* サビ(2) */
    #MT_G_Stroke06 = {
        GuitarStroke(GUITAR_DOWN_STROKE,  !4,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
    }
    /* サビ(3) */
    #MT_G_Stroke07 = {
        GuitarStroke(GUITAR_DOWN_STROKE, !4.,  6, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
    }
    /* サビ(4) */
    #MT_G_Stroke08 = {
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
    }
    /* サビ(5) */
    #MT_G_Stroke10 = {
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
    }
    /* 間奏 */
    #MT_G_Stroke09 = {
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
    }
    /** Score : ギターIパート(1) -------------------------------------------- */
    #MT_G1_SCOR = {
        /* イントロ */
        [
            GuitarPutHand(-1,-1, 3, 2, 1, 1); #MT_G_Stroke01;
            GuitarPutHand( 3, 2, 0, 0, 0, 3); #MT_G_Stroke01;
            GuitarPutHand( 0, 2, 2, 0, 0, 0); #MT_G_Stroke01;
            GuitarPutHand( 0, 0, 2, 2, 1, 0); #MT_G_Stroke01;
            GuitarPutHand(-1,-1, 3, 2, 1, 1); #MT_G_Stroke01;
            GuitarPutHand( 3, 2, 0, 0, 0, 3); #MT_G_Stroke01;
            GuitarPutHand(-1, 0, 2, 2, 3, 0); #MT_G_Stroke01;
        :   GuitarPutHand( 0, 0, 2, 2, 1, 0); #MT_G_Stroke01;
        ]
            GuitarPutHand(-1, 0, 2, 2, 3, 0); #MT_G_Stroke02;
        /* Aメロ */
        [
            GuitarPutHand( 0, 0, 2, 2, 1, 0); #MT_G_Stroke03;
            GuitarPutHand( 0, 0, 2, 2, 1, 0); #MT_G_Stroke03;
            GuitarPutHand( 3, 2, 0, 0, 0, 3); #MT_G_Stroke03;
            GuitarPutHand( 3, 2, 0, 0, 0, 3); #MT_G_Stroke03;
            GuitarPutHand(-1,-1, 3, 2, 1, 1); #MT_G_Stroke03;
            GuitarPutHand( 3, 2, 0, 0, 0, 3); #MT_G_Stroke03;
            GuitarPutHand( 0, 3, 2, 0, 1, 0); #MT_G_Stroke03;
        :   GuitarPutHand( 0, 2, 2, 1, 0, 0); #MT_G_Stroke04;
        ]
            GuitarPutHand( 0, 3, 2, 0, 1, 0); #MT_G_Stroke04;
	  /* Bメロ */
            GuitarPutHand(-1,-1, 3, 2, 1, 0); #MT_G_Stroke05;
                                              #MT_G_Stroke05;
            GuitarPutHand( 0, 0, 2, 0, 0, 0); #MT_G_Stroke05;
                                              #MT_G_Stroke05;
            GuitarPutHand(-1,-1, 3, 2, 1, 0); #MT_G_Stroke05;
                                              #MT_G_Stroke05;
            GuitarPutHand( 0, 0, 2, 0, 0, 0); #MT_G_Stroke05;
                                              #MT_G_Stroke05;
        /* サビ */
        [
            GuitarPutHand(-1,-1, 3, 2, 1, 0); #MT_G_Stroke06;
            GuitarPutHand( 3, 2, 0, 0, 0, 3); #MT_G_Stroke06;
            GuitarPutHand( 0, 2, 0, 0, 0, 0); #MT_G_Stroke06;
            GuitarPutHand( 0, 0, 2, 0, 1, 0); #MT_G_Stroke06;
            GuitarPutHand(-1, 0, 0, 2, 1, 1); #MT_G_Stroke06;
            GuitarPutHand( 0, 2, 0, 0, 0, 0); #MT_G_Stroke06;
        :   GuitarPutHand( 0, 0, 2, 0, 1, 0); #MT_G_Stroke06;
            GuitarPutHand(-1,-1, 3, 3, 3, 3); #MT_G_Stroke07; GuitarPutHand( 0, 3, 2, 3, 1, 0); #MT_G_Stroke08; GuitarPutHand( 1, 4, 3, 4, 2, 1); #MT_G_Stroke10; GuitarPutHand( 0, 3, 2, 3, 1, 0); #MT_G_Stroke10;
        ]
        GuitarPutHand(-1,-1, 3, 2, 1, 1); #MT_G_Stroke06;
        GuitarPutHand( 3, 2, 0, 0, 0, 3); #MT_G_Stroke06;
        /* ***** */
        GuitarPutHand(-1, 0, 2, 2, 3, 0); #MT_G_Stroke09;
        GuitarPutHand( 0, 0, 2, 2, 2, 0); #MT_G_Stroke09;
        GuitarPutHand(-1, 0, 2, 2, 3, 0); #MT_G_Stroke09;
        GuitarPutHand( 0, 0, 2, 2, 2, 0); #MT_G_Stroke09;
    }
    /** Score : ギターIIパート(1) ストロークスコア -------------------------- */
    /* */
    #MT_G_Picking01 = {
        GuitarPicking(1, !8, 97);
        GuitarPicking(2, !8, 97);
        GuitarPicking(3, !8, 97);
        GuitarPicking(1, !4, 97);
        GuitarPicking(2, !8, 97);
        GuitarPicking(3, !8, 97);
        GuitarPicking(1, !8, 97);
    }
    /* Aメロ用 */
    #MT_G_Picking02 = {
        GuitarPicking(1, !2., 97);
	  r8
	  GuitarPicking(3, !8, 97);
    }
    /* Bメロ用 */
    #MT_G_Stroke11 = {
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
	  r2.
    }
    /* サビ用 (1) */
    #MT_G_Stroke12 = {
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2); r8r8
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2); r8r8
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2);
    }
    /* サビ用 (2) */
    #MT_G_Stroke13 = {
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2); r8
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2); r8
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2); r8
        GuitarStroke(GUITAR_DOWN_STROKE,  !8,  2, 97,  2); r8
    }
    /** Score : ギターIIパート(1) ------------------------------------------- */
    #MT_G2_SCOR = {
        /* イントロ */
        SetGuitarDelay(TRUE, !8, 6, 4);
        [
            GuitarPutHand(-1,-1, 3, 2, 1, 1); #MT_G_Picking01;
            GuitarPutHand( 3, 2, 0, 0, 0, 3); #MT_G_Picking01;
            GuitarPutHand( 0, 2, 2, 0, 0, 0); #MT_G_Picking01;
            GuitarPutHand( 0, 0, 2, 2, 1, 0); #MT_G_Picking01;
            GuitarPutHand(-1,-1, 3, 2, 1, 1); #MT_G_Picking01;
            GuitarPutHand( 3, 2, 0, 0, 0, 3); #MT_G_Picking01;
            GuitarPutHand(-1, 0, 2, 2, 3, 0); #MT_G_Picking01;
        :   GuitarPutHand( 0, 0, 2, 2, 1, 0); #MT_G_Picking01;
        ]
            GuitarPutHand(-1, 0, 2, 2, 3, 0); #MT_G_Picking01
        /* Aメロ */
        [
            GuitarPutHand( 0, 0, 2, 2, 1, 0); #MT_G_Picking02;
            GuitarPutHand( 0, 0, 2, 2, 1, 0); #MT_G_Picking02;
            GuitarPutHand( 3, 2, 0, 0, 0, 3); #MT_G_Picking02;
            GuitarPutHand( 3, 2, 0, 0, 0, 3); #MT_G_Picking02;
            GuitarPutHand(-1,-1, 3, 2, 1, 1); #MT_G_Picking02;
            GuitarPutHand( 3, 2, 0, 0, 0, 3); #MT_G_Picking02;
            GuitarPutHand( 0, 3, 2, 0, 1, 0); #MT_G_Picking02;
        :   GuitarPutHand( 0, 2, 2, 1, 0, 0); #MT_G_Picking02;
        ]
            GuitarPutHand( 0, 3, 2, 0, 1, 0); #MT_G_Picking02;
        SetGuitarDelay(FALSE, !8, 6, 4); // ディレイをオフにしてパワーコードで演奏
        /* Bメロ */
            GuitarPutHand(-1,-1,-1, 2, 1, 0); #MT_G_Stroke11;
                                              #MT_G_Stroke11;
            GuitarPutHand(-1,-1,-1, 0, 0, 0); #MT_G_Stroke11;
                                              #MT_G_Stroke11;
            GuitarPutHand(-1,-1,-1, 2, 1, 0); #MT_G_Stroke11;
                                              #MT_G_Stroke11;
            GuitarPutHand(-1,-1,-1, 0, 0, 0); #MT_G_Stroke11;
                                              #MT_G_Stroke11;
        /* サビ */
        [
            GuitarPutHand(-1,-1,-1, 2, 1, 0); #MT_G_Stroke12;
            GuitarPutHand(-1,-1,-1, 0, 0, 3); #MT_G_Stroke12;
            GuitarPutHand(-1,-1,-1, 0, 0, 0); #MT_G_Stroke12;
            GuitarPutHand(-1,-1,-1, 0, 1, 0); #MT_G_Stroke12;
            GuitarPutHand(-1,-1,-1, 2, 1, 1); #MT_G_Stroke12;
            GuitarPutHand(-1,-1,-1, 0, 0, 0); #MT_G_Stroke12;
        :   GuitarPutHand(-1,-1,-1, 0, 1, 0); #MT_G_Stroke12;
            GuitarPutHand(-1,-1,-1, 3, 3, 3); #MT_G_Stroke12;
        ]
            GuitarPutHand(-1,-1,-1, 2, 1, 1); #MT_G_Stroke12;
            GuitarPutHand(-1,-1,-1, 0, 0, 3); #MT_G_Stroke13;
        /* **** */
        SetGuitarDelay(TRUE, !8, 6, 10);
            GuitarPutHand(-1,-1,-1,14,15,12); #MT_G_Picking01;
            GuitarPutHand(-1,-1,-1,14,14,12); #MT_G_Picking01;
            GuitarPutHand(-1,-1,-1,14,15,12); #MT_G_Picking01;
            GuitarPutHand(-1,-1,-1,14,14,12); #MT_G_Picking01;
    }
    /** Score : ベースパート チップス --------------------------------------- */
    #MT_B_Picking01 = {
	  GuitarPicking(2, !4, 97);
	  GuitarPicking(2, !8, 97);
	  GuitarPicking(2, !4., 97);
	  GuitarPicking(2, !8, 97);
	  GuitarPicking(1, !8, 97);
    }
    #MT_B_Picking02 = {
	  GuitarPicking(2, !4, 97);
	  GuitarPicking(2, !8, 97);
	  GuitarPicking(2, !4., 97);
	  GuitarPicking(2, !8, 97);
	  GuitarPicking(1, !8, 97);
    }
    #MT_B_Picking03 = {
	  GuitarPicking(2, !4, 97);
	  GuitarPicking(2, !8, 97);
	  GuitarPicking(2,!16, 97);
	  GuitarPicking(2,!16, 97);
	  GuitarPicking(2,!16, 97);
	  GuitarPicking(2,!16, 97);
	  GuitarPicking(2, !8, 97);
	  GuitarPicking(2, !8, 97);
	  GuitarPicking(2,!16, 97);
	  GuitarPicking(2,!16, 97);
    }
    #MT_B_Picking04 = {
	  GuitarPicking(2, !4, 97);
	  GuitarPicking(2, !8, 97);
	  GuitarPicking(2, !4., 97);
	  GuitarPicking(2, !8, 97);
	  GuitarPicking(1, !8, 97);
    }
    /** Score : ベースパート ------------------------------------------------ */
    #MT_B_SCOR = {
        [
            GuitarPutHand(-1,-1, 3, 2); #MT_B_Picking01;
            GuitarPutHand( 3, 2, 0, 0); #MT_B_Picking01;
            GuitarPutHand( 0, 2, 2, 0); #MT_B_Picking01;
            GuitarPutHand( 0, 0, 2, 2); #MT_B_Picking01;
            GuitarPutHand(-1,-1, 3, 2); #MT_B_Picking01;
            GuitarPutHand( 3, 2, 0, 0); #MT_B_Picking01;
            GuitarPutHand(-1, 0, 2, 2); #MT_B_Picking01;
        :   GuitarPutHand( 0, 0, 2, 2); #MT_B_Picking01;
        ]
            GuitarPutHand(-1, 0, 2, 2); #MT_B_Picking01
        /* Aメロ */
        [
            GuitarPutHand( 0, 0, 2, 2); #MT_B_Picking02;
            GuitarPutHand( 0, 0, 2, 2); #MT_B_Picking02;
            GuitarPutHand( 3, 2, 0, 0); #MT_B_Picking02;
            GuitarPutHand( 3, 2, 0, 0); #MT_B_Picking02;
            GuitarPutHand(-1,-1, 3, 2); #MT_B_Picking02;
            GuitarPutHand( 3, 2, 0, 0); #MT_B_Picking02;
            GuitarPutHand( 0, 3, 2, 0); #MT_B_Picking02;
        :   GuitarPutHand( 0, 2, 2, 1); #MT_B_Picking02;
        ]
            GuitarPutHand( 0, 3, 2, 0); #MT_B_Picking02;
        /* Bメロ */
            GuitarPutHand(-1,-1, 3, 2); #MT_B_Picking03;
                                        #MT_B_Picking03;
            GuitarPutHand( 9, 0, 2, 0); #MT_B_Picking03;
                                        #MT_B_Picking03;
            GuitarPutHand(-1,-1, 3, 2); #MT_B_Picking03;
                                        #MT_B_Picking03;
            GuitarPutHand( 9, 0, 2, 0); #MT_B_Picking03;
                                        #MT_B_Picking03;
        /* サビ */
        [
            GuitarPutHand(-1,-1, 3, 2); #MT_B_Picking04;
            GuitarPutHand( 3, 2, 0, 0); #MT_B_Picking04;
            GuitarPutHand( 0, 2, 0, 0); #MT_B_Picking04;
            GuitarPutHand( 0, 0, 2, 0); #MT_B_Picking04;
            GuitarPutHand(-1, 0, 0, 2); #MT_B_Picking04;
            GuitarPutHand( 0, 2, 0, 0); #MT_B_Picking04;
        :   GuitarPutHand( 0, 0, 2, 0); #MT_B_Picking04;
            GuitarPutHand(-1,-1, 3, 3); #MT_B_Picking04;
        ]
            GuitarPutHand(-1,-1, 3, 2); #MT_B_Picking04;
            GuitarPutHand( 3, 2, 0, 0); #MT_B_Picking04;
        /* **** */
            GuitarPutHand(-1, 0, 2, 2); #MT_B_Picking01;
            GuitarPutHand( 0, 0, 2, 2); #MT_B_Picking01;
            GuitarPutHand(-1, 0, 2, 2); #MT_B_Picking01;
            GuitarPutHand( 0, 0, 2, 2); #MT_B_Picking01;
		
    }
    /** Score : ドラムパート チップス --------------------------------------- */
    #MT_D_01 = {
        WriteRithmWithoutShift(OpenHiHat,   {□□□□■□□□□□■□□□□□}, 000, 000, 000, 000, 100, 000, 000, 000, 000, 000, 100, 000, 000, 000, 000, 000);
        WriteRithmWithoutShift(ClosedHiHat, {■□■□□□■□■□□□■■■□}, 100, 000, 100, 000, 000, 000, 100, 000, 100, 000, 000, 000, 100, 100, 100, 000);
        WriteRithmWithoutShift(Snare1,      {□□□□■□□□□□□□■□□□}, 000, 000, 000, 000, 100, 000, 000, 000, 000, 100, 100, 000, 100, 000, 000, 000);
        WriteRithmWithoutShift(Kick1,       {■□□□□□■□■□□□□□■□}, 100, 000, 000, 000, 000, 000, 100, 000, 100, 000, 000, 000, 000, 000, 100, 000);
        RithmTimeShift();
    }
    #MT_D_03 = {
        WriteRithmWithoutShift(OpenHiHat,   {□□□□■□□□□□■□□□□□}, 000, 000, 000, 000, 100, 000, 000, 000, 000, 000, 100, 000, 000, 000, 000, 000);
        WriteRithmWithoutShift(ClosedHiHat, {■□■□□□■□■□□□■■■□}, 100, 000, 100, 000, 000, 000, 100, 000, 100, 000, 000, 000, 100, 100, 100, 000);
        WriteRithmWithoutShift(Snare1,      {□□□□■□□□□□□□■□■□}, 000, 000, 000, 000, 100, 000, 100, 000, 000, 000, 000, 000, 100, 000, 100, 000);
        WriteRithmWithoutShift(Kick1,       {■□□□□□□□■□■□□□□□}, 100, 000, 000, 000, 000, 000, 000, 000, 100, 000, 100, 000, 000, 000, 000, 000);
        RithmTimeShift();
    }
    #MT_D_02 = {
        WriteRithmWithoutShift(OpenHiHat,   {■□□□■□□□■□□□■□□□}, 060, 000, 000, 000, 060, 000, 000, 000, 060, 000, 000, 000, 060, 000, 000, 000);
        RithmTimeShift();
    }
    /** Score : ドラムパート ------------------------------------------------ */
    #MT_D_SCORE = {
        #MT_D_02;
        [ [8 :#MT_D_01;] #MT_D_03;  ]
        [ [8 :#MT_D_01;] #MT_D_03;  ]
        [8   :#MT_D_01;] #MT_D_01;
        [ [8 :#MT_D_01;] #MT_D_03; ]
        [4    #MT_D_01;]
    }
    
    
    
    TR(01)  CH(01)  @(088) CHO(110); REV(110); V(110) q98      #MT_SCOR_VOICE;
    TR(02)  CH(02)  @(017) CHO(070); REV(030); V(100) q105 r64 #MT_SCOR_VOICE;
    TR(03)  CH(03)  @(101) CHO(110); REV(110); V(090) q98      #MT_P_SCOR
    TR(04)  CH(04)  @(086) CHO(110); REV(110); V(070) q98      #MT_P_SCOR
    CreateGuitar(5, 5, 26); P(23); CHO(110); REV(110); V(76)     r1 #MT_G1_SCOR;
    CreateGuitar(6, 6, 27); P(98); CHO(110); REV(110); V(50) r36 r1 #MT_G1_SCOR;
    CreateGuitar(7, 7, 31); P(87); CHO(110); REV(110); V(82)     r1 #MT_G2_SCOR;
    CreateBase(8, 8, 34);          CHO(110); REV(110); V(72)     r1 #MT_B_SCOR;
    TR(10); CH(10) CHO(110); REV(110); V(128) CreateRithmBox(PowerSet, !16); #MT_D_SCORE;



}
/* -------------------------------------------------------------------------- */
// 基礎関数群(システム関連)
/* -------------------------------------------------------------------------- */
/** Boolean値が存在しない為、定義:Fale=0なのは存在しない場合の初期値=0の為。 */
Int FALSE = 0;
/** Boolean値が存在しない為、定義 */
Int TRUE  = 1;
/** TimeSignatureを参照できないため別変数として保持する */
Int SYSTEM_TIME_SIGNATURE_COMMON_TIME = 4;
/** TimeSignatureを参照できないため別変数として保持する */
Int SYSTEM_TIME_SIGNATURE_TIME = 4;
/** スクリプトのメッセージ出力モード:エラー */
Int MODE_ERROR = 3;
/** スクリプトのメッセージ出力モード:ワーニング */
Int MODE_WARNING = 2;
/** スクリプトのメッセージ出力モード:インフォメーション */
Int MODE_INFO  = 1;
/** スクリプトのメッセージ出力モード:デバッグ */
Int MODE_DEBUG  = 0;
/** スクリプトのモード */
Int ScriptMode = MODE_DEBUG;
/** 
 * TimeSignatureをScript側が参照できないため
 * 関数を通して設定する
 * @V_CommonTime V_CommonTime/V_Time
 * @V_Time       V_CommonTime/V_Time
 */
Function SetTimeSignature(Int V_CommonTime, Int V_Time) {
    SYSTEM_TIME_SIGNATURE_COMMON_TIME = V_CommonTime;
    SYSTEM_TIME_SIGNATURE_TIME = V_Time;
    TimeSignature = SYSTEM_TIME_SIGNATURE_COMMON_TIME, SYSTEM_TIME_SIGNATURE_TIME;
}
/**
 * TimeBaseの値を取得する。
 * @Signature         拍数(4分音符なら4)
 * @ApplyingPointBool 付点有りの場合にTRUE
 */
Function ConvertTimeStep(Int Signature, Int ApplyingPointBool) {
    Int Length = ((TimeBase * SYSTEM_TIME_SIGNATURE_COMMON_TIME) / Signature);
    If (ApplyingPointBool == TRUE) {
        Length = Length + (((TimeBase * SYSTEM_TIME_SIGNATURE_COMMON_TIME) / Signature) / 2);
    }
    Result = Length;
}
/**
 * エラーメッセージを出力する
 * @Message 出力を行うメッセージ
 */
Function Error(Str Message) {
    If (ScriptMode <= MODE_INFO) {
        Print({ERROR:} + Message);
    }
}
/**
 * ワーニングメッセージを出力する
 * @Message 出力を行うメッセージ
 */
Function Warning(Str Message) {
    If (ScriptMode <= MODE_INFO) {
        Print({WARNING:} + Message);
    }
}
/**
 * インフォメーションメッセージを出力する
 * @Message 出力を行うメッセージ
 */
Function Info(Str Message) {
    If (ScriptMode <= MODE_INFO) {
        Print({INFO:} + Message);
    }
}
/**
 * デバッグメッセージを出力する
 * @Message 出力を行うメッセージ
 */
Function Debug(Str Message) {
    If (ScriptMode <= MODE_INFO) {
        Print({DEBUG:} + Message);
    }
}
/* -------------------------------------------------------------------------- */
// RithmData関数群
/* -------------------------------------------------------------------------- */
/*
 *  本来下記のようになれば見やすいのだが、SAKURAが引数の間の改行を誤認識してしまっている。
 *  [3
 *    WriteRithm(
 *        CLOSE_HIHAT, "■■■■■■■■", 120,120,120,120,120,120,120,120,
 *  	    SNARE1,      "□□■□□□■□", 120,120,120,120,120,120,120,120,
 *	    KICK,        "■□□□■■□□", 120,120,120,120,120,120,120,120
 *    );
 *  ]
 *    WriteRithm(
 *        CLOSE_HIHAT, "■■■■■■■■", 120,120,120,120,120,120,120,120,
 *  	    SNARE1,      "□□■■□□■■", 120,120,120,120,120,120,120,120,
 *	    KICK,        "■□□□■■□□", 120,120,120,120,120,120,120,120
 *    );
 *  上記だと引数は開業後の為、渡されない。
 *
 *  注意:
 *  関数MID の Indexは(1)Origin
 */
/* リズムボックスで使用するトラック */
Int RithmTrackTrack = 10;
/* リズムボックス用タイムシグネィチャー */
Int RithmSignatureTimeBase = 48;
/* リズムボックス用タイムシグネィチャー */
Int RithmSignatureCount = 8;
/**
 * リズムボックスを作成する
 * @DrumSetNumber     ドラムセット番号
 * @SignatureTimeBase 1小節を分割するStep数
 */
Function CreateRithmBox(Int DrumSetNumber, Int SignatureTimeBase) {
    Int PreTrackNumber = Track;
    RithmSignatureTimeBase = SignatureTimeBase;
    RithmSignatureCount = (ConvertTimeStep(SYSTEM_TIME_SIGNATURE_COMMON_TIME) * SYSTEM_TIME_SIGNATURE_TIME) / SignatureTimeBase;
    Track(10); Channel(10); Voice(DrumSetNumber);
    Track(PreTrackNumber);
}
/**
 * リズムを書き込む
 * @RithmData リズムデータ(ノート番号, 文字列データ, ベロシティ値....)
 */
Function WriteRithm(Array RithmData) {
    WriteRithmWithoutShift(RithmData);
    RithmTimeShift();
}
/**
 * リズムを書き込む。ただしTimeはずらさない
 * @RithmData リズムデータ(ノート番号, 文字列データ, ベロシティ値....)
 */
Function WriteRithmWithoutShift(Array RithmData) {
    Int PreTrackNumber = Track;
    Track(10);
    Int StartTime = Time;
    Int BlockCount = SizeOf(RithmData) / (1 + 1 + RithmSignatureCount);
    Int RithmItemNoteNumber = 0;
    Str RithmItem = {};
    For (Int I = 0; I < BlockCount; I++) {
        Time(StartTime);
        For (Int J = 0; J < RithmSignatureCount; J++) {
	      Time(StartTime + (RithmSignatureTimeBase * J));
	      RithmItem = MID(RithmData((I * BlockCount) + 1), J + 1, 1);
		If (RithmItem == {■}) {
		    NoteOn(RithmData(I * BlockCount), RithmData((I * BlockCount) + 2 + J));
		}
	      Time(StartTime + (RithmSignatureTimeBase * (J + 1)));
            NoteOff(RithmData(I * BlockCount), 0);
	  }
    }
    Time(StartTime);
    Track(PreTrackNumber);
}
/**
 * 1小節分時間をずらす
 */
Function RithmTimeShift() {
    Int PreTrackNumber = Track;
    Track(10);
    Time(Time + (TimeBase * SYSTEM_TIME_SIGNATURE_TIME));
    Track(PreTrackNumber);
}
/* -------------------------------------------------------------------------- */
// Guitar関数群
/* -------------------------------------------------------------------------- */
/** 値:ギター奏法 アップストローク */
Int GUITAR_UP_STROKE = 1;
/** 値:ギター奏法 ダウンストローク */
Int GUITAR_DOWN_STROKE = 0;
/** 音を出さない値 */
Int GUITAR_SOUND_NONE = -1;
/**
 * ギター情報 ギター(ベース)の数分だけ下記値を繰り返す(最大12弦)
 *  0:MasterTrackNumber                    基礎となるトラック番号
 *  1:HoldStatus                           ホールド設定(TRUE, FALSE) デフォルト:FALSE
 *  2:DelayStatus                          ディレイ設定(TRUE, FALSE) デフォルト:FALSE
 *  3:DelayInfo.DelayStep                  ディレイで使用する遅延ステップ値
 *  4:DelayInfo.DelayMaxCount              ディレイで使用する遅延ステップ値
 *  5:DelayInfo.DelayVelosity              ディレイで使用する遅延ステップ値
 *  6:StringthInfo[ 0].OpenNoteNumber      構えたときに一番上に来るストリングスの開放時のノート番号
 *  7:StringthInfo[ 0].SelectedFletNumber  構えたときに一番上に来るストリングスの押さえているフレットの値
 *  8:StringthInfo[ 1].OpenNoteNumber
 *  9:StringthInfo[ 1].SelectedFletNumber
 * 10:StringthInfo[ 2].OpenNoteNumber
 * 11:StringthInfo[ 2].SelectedFletNumber
 * 12:StringthInfo[ 3].OpenNoteNumber
 * 13:StringthInfo[ 3].SelectedFletNumber
 * 14:StringthInfo[ 4].OpenNoteNumber
 * 15:StringthInfo[ 4].SelectedFletNumber
 * 16:StringthInfo[ 5].OpenNoteNumber
 * 17:StringthInfo[ 5].SelectedFletNumber
 * 18:StringthInfo[ 6].OpenNoteNumber
 * 19:StringthInfo[ 6].SelectedFletNumber
 * 20:StringthInfo[ 7].OpenNoteNumber
 * 21:StringthInfo[ 7].SelectedFletNumber
 * 22:StringthInfo[ 8].OpenNoteNumber
 * 23:StringthInfo[ 8].SelectedFletNumber
 * 24:StringthInfo[ 9].OpenNoteNumber
 * 25:StringthInfo[ 9].SelectedFletNumber
 * 26:StringthInfo[10].OpenNoteNumber
 * 27:StringthInfo[10].SelectedFletNumber
 * 28:StringthInfo[11].OpenNoteNumber
 * 29:StringthInfo[11].SelectedFletNumber
 */
Array GuitarInfo = ();
/** ギター1つ分の情報量 */
Int GUITAR_PACKAGE_DATA_COUNT = 30;
/** ギター情報セット 6弦  低音側(6弦)の弦から「E-A-D-G-B-E 」とする「スタンダード・チューニング」 */
Array GUITAR_DEFAULT_GUITAR_OFFSET      = (FALSE, FALSE, 0, 0, 0,40, 0,45, 0,50, 0,55, 0,59, 0,64, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1);
/** ベース情報セット 4弦基本チューニング */
Array GUITAR_DEFAULT_BASE_OFFSET        = (FALSE, FALSE,-1, 0, 0,28, 0,33, 0,38, 0,42, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1);
/** 現在選択中のギター番号 */
Int SelectionGuitarNumber = 0;
/**
 * ギター情報を作成する 低音側(6弦)の弦から「E-A-D-G-B-E 」とする「スタンダード・チューニング」
 * @TrackNumber 使用するTrack番号
 * @Return ギター番号
 */
Function CreateGuitar(Int TrackNumber, Int ChannelNumber, Int VoiceNumber) {
    GuitarInfo = (GuitarInfo, TrackNumber, GUITAR_DEFAULT_GUITAR_OFFSET);
    Track(TrackNumber); Channel(ChannelNumber); Voice(VoiceNumber);
    SetSelectionGuitarNumber(SizeOf(GuitarInfo) / GUITAR_PACKAGE_DATA_COUNT);
    Result = GuitarNumber;
}
/**
 * ベース情報を作成する
 * @TrackNumber 使用するTrack番号
 * @Return ギター番号
 */
Function CreateBase(Int TrackNumber, Int ChannelNumber, Int VoiceNumber) {
    GuitarInfo = (GuitarInfo, TrackNumber, GUITAR_DEFAULT_BASE_OFFSET);
    Track(TrackNumber); Channel(ChannelNumber); Voice(VoiceNumber);
    SetSelectionGuitarNumber(SizeOf(GuitarInfo) / GUITAR_PACKAGE_DATA_COUNT);
    Result = GuitarNumber;
}
Function GuiterTuning(Array TuneData) {
    Int Length = GetStringthLength(GetSelectionGuitarNumber());
    For (Int I = 0; I < SizeOf(TuneData); I++) {
        SetGuitarStringthOpenNoteNumber(GetSelectionGuitarNumber(), Length - I, GetGuitarStringthOpenNoteNumber(GetSelectionGuitarNumber(), Length - I) + TuneData(I));
    }
}
/**
 * 指定されたギターの弦数を返却する
 * @GuitarNumber ギター番号
 */
Function GetStringthLength(Int GuitarNumber) {
    Int N = 0;
    For (Int I = GetGuitarDataPositionDelayVelosity(GuitarNumber) + 1; I < GetGuitarDataPositionTrack(GuitarNumber + 1); I += 2) {
        If (GuitarInfo(I) != -1) {
	      N++;
	  } Else {
	      Exit;
	  }
    }
    Result = N;
}
/**
 * ギターの押さえるフレットを指定する
 * -1は音を鳴らさない指定
 * @FNums フレット番号(構えた場合に上になる弦から、弦の本数分指定)
 */
Function GuitarPutHand(Array FNums) {
    For (Int I = GetStringthLength(GetSelectionGuitarNumber()); I > 0; I--) {
        GuitarPutFingar(I, FNums(SizeOf(FNums) - I));
    }
}
/**
 * ギターの押さえるフレットを指定する
 * -1は音を鳴らさない指定
 * @SNum ストリングス番号
 * @FNum フレット番号
 */
Function GuitarPutFingar(Int SNum, Int FNum) {
    If (GetGuitarHoldStatus(SelectionGuitarNumber) == TRUE) {
        NoteOff(GetGuitarStringthNoteNumber(GetSelectionGuitarNumber(), SNum), 0);
    }
    SetGuitarStringthFletNumber(GetSelectionGuitarNumber(), SNum, FNum);
}
/**
 * 音を出したままフレットを移動するスライド
 * @SlideData 弦, 強さ, フレット, 待ち時間, 移動時間, フレット, 待ち時間...
 */
Function GuitarSlide(Array SlideData) {
    
    Int PreTime    = Time;
    Int SNum       = SlideData(0);
    Int MaxNote    = AnalyzeMaximumNoteNumber(SlideData);
    Int MinNote    = AnalyzeMinimumNoteNumber(SlideData);
    Int AllStep    = AnalyzeAllStep(SlideData);
    Int StepCursor = Time;
    Int NotePoint  = 0;
    Int BaseNote   = 0;
    Int SPitch     = 0;
    Int EPitch     = 0;
    Int F  = GetGuitarStringthFletNumber(GetSelectionGuitarNumber(), SNum);
    
    If (F >= 0) {
        GuitarPutFingar(SlideData(0), SlideData(2));
        BaseNote = GetGuitarStringthNoteNumber(GetSelectionGuitarNumber(), SNum);
    
        BR(MaxNote - MinNote);
        NoteOn(BaseNote, SlideData(1));
        For (Int I1 = 2; I1 + 3 < SizeOf(SlideData); I1 += 3) {
            StepCursor += SlideData(I1 + 1);
            Time(StepCursor);
	      // (1) Slide前のPitchPointを求める
            GuitarPutFingar(SlideData(0), SlideData(I1));
	      NotePoint = GetGuitarStringthNoteNumber(GetSelectionGuitarNumber(), SNum);
	      SPitch = AnalyzePitchPoint(MinNote, MaxNote, NotePoint);
	      // (2) Slide後のPitchPointを求める
            GuitarPutFingar(SlideData(0), SlideData(I1 + 3));
	      NotePoint = GetGuitarStringthNoteNumber(GetSelectionGuitarNumber(), SNum);
	      EPitch = AnalyzePitchPoint(MinNote, MaxNote, NotePoint);
	      For (Int I2 = 0; I2 < SlideData(I1 + 2); I2++) {
                StepCursor++;
                Time(StepCursor);
                PitchBend(((EPitch - SPitch) / SlideData(I1 + 2)) * I2);
	      }
        }
        Time(PreTime + AllStep);
        NoteOff(BaseNote, 0);
        PitchBend(0);
    }
}
/** 
 * ピッチの値を判定する
 */
Function AnalyzePitchPoint(Int Min, Int Max, Int P) {
    Result = ( 8191 / (Max - Min) ) * (P - Min);
}
/** 
 * 総ステップ数を判定する
 */
Function AnalyzeAllStep(Array SlideData) {
    Int N = 0;
    For (Int I = 2; I < SizeOf(SlideData); I += 3) {
        N += SlideData(I + 1);
	  If (I + 2 < SizeOf(SlideData)) {
            N += SlideData(I + 2);
	  }
    }
    Result = N;
}
/** 
 * 最大Note番号を判定する
 */
Function AnalyzeMaximumNoteNumber(Array SlideData) {
    Int N = 0;
    For (Int I = 2; I < SizeOf(SlideData); I += 3) {
        GuitarPutFingar(SlideData(0), SlideData(I));
	  If (N < GetGuitarStringthNoteNumber(GetSelectionGuitarNumber(), SlideData(0))) {
	      N = GetGuitarStringthNoteNumber(GetSelectionGuitarNumber(), SlideData(0));
	  }
    }
    Result = N;
}
/** 
 * 最小Note番号を判定する
 */
Function AnalyzeMinimumNoteNumber(Array SlideData) {
    Int N = 128;
    For (Int I = 2; I < SizeOf(SlideData); I += 3) {
        GuitarPutFingar(SlideData(0), SlideData(I));
	  If (N > GetGuitarStringthNoteNumber(GetSelectionGuitarNumber(), SlideData(0))) {
	      N = GetGuitarStringthNoteNumber(GetSelectionGuitarNumber(), SlideData(0));
	  }
    }
    Result = N;
}
/**
 * ストローク奏法
 * @Direction     方向(GUITAR_DOWN_STROKE:上から下, GUITAR_UP_STROKE:下から上)
 * @TimeStep      長さ
 * @StrokeSpeed   速さ(0:同時)
 * @VelosityValue 強さ
 * @Attenuation   強さの減衰値
 */
Function GuitarStroke(Int Direction, Int TimeStep, Int StrokeSpeed, Int VelosityValue, Int Attenuation) {
    Int TempTime = Time;
    For (Int I = 0; I < 6; I++) {
	  Time(TempTime + (StrokeSpeed * I));
        If (Direction == GUITAR_UP_STROKE) {
	      GuitarPickingWithoutTimeShift(I + 1, TimeStep - (StokeSpeed * I), VelosityValue - (Attenuation * I));
	  }
        If (Direction == GUITAR_DOWN_STROKE) {
	      GuitarPickingWithoutTimeShift(6 - I, TimeStep - (StokeSpeed * I), VelosityValue - (Attenuation * I));
	  }
    }
    Time(TempTime + TimeStep);
}
/**
 * タイムポインタを移動しながら演奏するピッキング奏法
 * @StringthNumber 弦番号
 * @TimeBaseLength 全体の長さ(TimeBase値)
 * @VelosityValue  強さ
 */
Function GuitarPicking(Int StringthNumber, Int TimeBaseLength, Int VelosityValue) {
    GuitarPickingWithoutTimeShift(StringthNumber, TimeBaseLength, VelosityValue);
    Time(Time + TimeBaseLength);
}
/**
 * タイムポインタを移動せずに演奏するピッキング
 * @StringthNumber 弦番号
 * @TimeBaseLength 全体の長さ(TimeBase値)
 * @VelosityValue  強さ
 */
Function GuitarPickingWithoutTimeShift(Int StringthNumber, Int TimeBaseLength, Int VelosityValue) {
    Int TempTime = Time;
    Track(GetGuitarTrack(SelectionGuitarNumber));
    Int I1 = GetGuitarStringthNoteNumber(SelectionGuitarNumber, StringthNumber);
    Int F  = GetGuitarStringthFletNumber(SelectionGuitarNumber, StringthNumber);
    If (I1 >= 0 && F >= 0) {
        If (GetGuitarDelayStatus(SelectionGuitarNumber) == TRUE) {
	      Int TempV = VelosityValue;
            NoteOn(I1, VelosityValue);
		v = VelosityValue;
	      For (Int I2 = 0; I2 < GetGuitarDelayMaxCount(SelectionGuitarNumber); I2++) {
                Time(Time + GetGuitarDelayStep(SelectionGuitarNumber));
		    If (Time > (TempTime + TimeBaseLength)) {
		        Exit;
		    }
		    v(MML(v) - GetGuitarDelayVelosity(SelectionGuitarNumber));
                NoteOff(I1, 0);
                NoteOn(I1, MML(v));
		}
            If (GetGuitarHoldStatus(SelectionGuitarNumber) == FALSE) {
                Time(Time + TimeBaseLength);
                NoteOff(I1, 0);
            }
	  } Else {
            If (GetGuitarHoldStatus(SelectionGuitarNumber) == TRUE) {
                NoteOff(I1, 0);
            }
            NoteOn(I1, VelosityValue);
            If (GetGuitarHoldStatus(SelectionGuitarNumber) == FALSE) {
                Time(Time + TimeBaseLength);
                NoteOff(I1, 0);
            }
	  }
    }
    Time(TempTime);
}
/* データ保存位置取得関数群 */
Function GetGuitarDataPositionTrack(Int GuitarNumber) {
    Result = (GuitarNumber - 1) * GUITAR_PACKAGE_DATA_COUNT;
}
Function GetGuitarDataPositionHoldStatus(Int GuitarNumber) {
    Result = GetGuitarDataPositionTrack(GuitarNumber) + 1;
}
Function GetGuitarDataPositionDelayStatus(Int GuitarNumber) {
    Result = GetGuitarDataPositionHoldStatus(GuitarNumber) + 1;
}
Function GetGuitarDataPositionDelayStep(Int GuitarNumber) {
    Result = GetGuitarDataPositionDelayStatus(GuitarNumber) + 1;
}
Function GetGuitarDataPositionDelayMaxCount(Int GuitarNumber) {
    Result = GetGuitarDataPositionDelayStep(GuitarNumber) + 1;
}
Function GetGuitarDataPositionDelayVelosity(Int GuitarNumber) {
    Result = GetGuitarDataPositionDelayMaxCount(GuitarNumber) + 1;
}
Function GetGuitarDataPositionStringthOpenNoteNumber(Int GuitarNumber, Int StringthNumber) {
    Result = GetGuitarDataPositionDelayVelosity(GuitarNumber) + 1 + ((GetStringthLength(GuitarNumber) - StringthNumber) * 2);
}
Function GetGuitarDataPositionStringthFletNumber(Int GuitarNumber, Int StringthNumber) {
    Result = GetGuitarDataPositionStringthOpenNoteNumber(GuitarNumber, StringthNumber) + 1;
}

/* Getter関数 */
Function GetGuitarTrack(Int GuitarNumber) {
    Result = GuitarInfo(GetGuitarDataPositionTrack(GuitarNumber));
}
Function GetGuitarHoldStatus(Int GuitarNumber) {
    Result = GuitarInfo(GetGuitarDataPositionHoldStatus(GuitarNumber));
}
Function GetGuitarDelayStatus(Int GuitarNumber) {
    Result = GuitarInfo(GetGuitarDataPositionDelayStatus(GuitarNumber));
}
Function GetGuitarDelayStep(Int GuitarNumber) {
    Result = GuitarInfo(GetGuitarDataPositionDelayStep(GuitarNumber));
}
Function GetGuitarDelayMaxCount(Int GuitarNumber) {
    Result = GuitarInfo(GetGuitarDataPositionDelayMaxCount(GuitarNumber));
}
Function GetGuitarDelayVelosity(Int GuitarNumber) {
    Result = GuitarInfo(GetGuitarDataPositionDelayVelosity(GuitarNumber));
}
Function GetGuitarStringthOpenNoteNumber(Int GuitarNumber, Int StringthNumber) {
    Result = GuitarInfo(GetGuitarDataPositionStringthOpenNoteNumber(GuitarNumber, StringthNumber));
}
Function GetGuitarStringthFletNumber(Int GuitarNumber, Int StringthNumber) {
    Result = GuitarInfo(GetGuitarDataPositionStringthFletNumber(GuitarNumber, StringthNumber));
}
Function GetGuitarStringthNoteNumber(Int GuitarNumber, Int StringthNumber) {
    Int I1 = GetGuitarStringthOpenNoteNumber(GuitarNumber, StringthNumber);
    Int I2 = GetGuitarStringthFletNumber(GuitarNumber, StringthNumber);
    Result = I1 + I2;
}
Function GetSelectionGuitarNumber() {
    Result = SelectionGuitarNumber;
}
/* Setter関数 */
Function SetGuitarTrack(Int GNum, Int TNum) {
    GuitarInfo(GetGuitarDataPositionTrack(GNum)) = TNum;
}
Function SetGuitarHoldStatus(Int GNum, Int Status) {
    GuitarInfo(GetGuitarDataPositionHoldStatus(GNum)) = Status;
}
Function SetGuitarDelayStatus(Int GNum, Int Status) {
    GuitarInfo(GetGuitarDataPositionDelayStatus(GNum)) = Status;
}
Function SetGuitarDelayStep(Int GNum, Int Step) {
    GuitarInfo(GetGuitarDataPositionDelayStep(GNum)) = Step;
}
Function SetGuitarDelayMaxCount(Int GNum, Int MCnt) {
    GuitarInfo(GetGuitarDataPositionDelayMaxCount(GNum)) = MCnt;
}
Function SetGuitarDelayVelosity(Int GNum, Int VValue) {
    GuitarInfo(GetGuitarDataPositionDelayVelosity(GNum)) = VValue;
}
Function SetGuitarStringthOpenNoteNumber(Int GNum, Int SNum, Int NNum) {
    GuitarInfo(GetGuitarDataPositionStringthOpenNoteNumber(GNum, SNum)) = NNum;
}
Function SetGuitarStringthFletNumber(Int GNum, Int SNum, Int FNum) {
    GuitarInfo(GetGuitarDataPositionStringthFletNumber(GNum, SNum)) = FNum;
}
Function SetSelectionGuitarNumber(Int GNum) {
    SelectionGuitarNumber = GNum;
    Track(GetGuitarTrack(GNum));
}
Function SetGuitarDelay(Int DelayStatus, Int DelayStep, Int DelayMaxCnt, Int DelayVelosity) {
    SetGuitarDelayStatus(GetSelectionGuitarNumber(), DelayStatus);
    SetGuitarDelayStep(GetSelectionGuitarNumber(), DelayStep);
    SetGuitarDelayMaxCount(GetSelectionGuitarNumber(), DelayMaxCnt);
    SetGuitarDelayVelosity(GetSelectionGuitarNumber(), DelayVelosity);
}

/* -------------------------------------------------------------------------- */
/* 
 * ソースコードを全て読み込んでから楽曲の実行を行う
 * Sakuraは順次実行型。
 */
Main();