//------------------------------------------------------------------------------
// ドラムマクロ
//------------------------------------------------------------------------------
// 引数付きマクロを使った変則MML。
// 以下のような特徴を持つ。
//
// -ドラム演奏の俯瞰性を高める
// -手軽に強弱をつける
// -Time,Sub,r0などの面倒な記述を避ける
//
// ◆基本記述
//
// [ドラムマクロ名]で演奏楽器を指定、[ドラムマクロ制御文字]で譜面を記述する。
//
// #ドラムマクロ名({ドラムマクロ制御文字})
// ※ドラムマクロ名については、[ドラムマクロ一覧]を参照
//
// ■ドラムマクロ制御文字
//
// ドラムマクロ制御文字は、Velocityを制御する。
// Velocity制御には相対指定を用いるので、元のVelocityが変化することは無い。
//
// 弱<--------通 常------>強
// a b c d e f * g h i j k (通常打)
// A B C D E F + G H I J K (2 連打)
// _ (休符)
//
// ※アルファベットで制御するのは、Velocityである点に注意する。
// 通常のMMLのように、音程を制御するわけではない。
//
// ◆Expressionの操作
//
// [EP制御文字]でExpressionを操作する。
//
// #EP_CONTROL({EP制御文字})
//
// ■EP制御文字
// EP制御文字は、Expressionを制御する。
//
// . Expression を半分のところで切る
// < Expression の立ち上りを弱くする
// > Expression の立ち下りを弱くする
// ^ Expression の立ち上りと立ち下りを弱く (中間を強く) する
// v Expression の立ち上りと立ち下りを強く (中間を弱く) する
//
// ◆記述例
//
// 以下の例は、キックとスネアによる演奏を行い、Velocityによる緩急と
// Expressionの立ち上がり操作によるゴーストノートを発生させる。
//
// Include(DrumMacro.h)
// TR(10)CH(10) l16
// Time(3:1:0)
// #EP_CONTROL({____ ____ ____ __<_ ____ ___< _^__ ____})
// #SNARE1 ({____ *___ ____ f_d_ ____ *__d _e__ *___})
// #KICK2 ({e_d_ *_d_ e_d_ *_*_ e_d_ *_e_ e_d_ *_e_})
//
//------------------------------------------------------------------------------
$_{r}
#VELOC_LIST = {
$a{v_(-70) #?1 } $b{v_(-60) #?1 } $c{v_(-50) #?1 } $d{v_(-40) #?1 } $e{v_(-30) #?1 } $f{v_(-20) #?1 }
$*{v_( 0) #?1 } $g{v_( 10) #?1 } $h{v_( 20) #?1 } $i{v_( 30) #?1 } $j{v_( 40) #?1 } $k{v_( 50) #?1 }
$A{v_(-70) [#?1 !(MML(l) / 2)] } $B{v_(-60) [#?1 !(MML(l) / 2)] } $C{v_(-50) [#?1 !(MML(l) / 2)] }
$D{v_(-40) [#?1 !(MML(l) / 2)] } $E{v_(-30) [#?1 !(MML(l) / 2)] } $F{v_(-20) [#?1 !(MML(l) / 2)] }
$+{v_( 0) [#?1 !(MML(l) / 2)] } $G{v_( 10) [#?1 !(MML(l) / 2)] } $H{v_( 20) [#?1 !(MML(l) / 2)] }
$I{v_( 30) [#?1 !(MML(l) / 2)] } $J{v_( 40) [#?1 !(MML(l) / 2)] } $K{v_( 50) [#?1 !(MML(l) / 2)] }
}
//- ドラムマクロ一覧 -----------------------------------------------------------
#CONSERT_SNARE = {#VELOC_LIST({n24,}) Rhythm{{#?1}} v_(0)}
#SNARE_ROLL = {#VELOC_LIST({n25,}) Rhythm{{#?1}} v_(0)}
#FINGER_SNAP = {#VELOC_LIST({n26,}) Rhythm{{#?1}} v_(0)}
#HIGH_Q = {#VELOC_LIST({n27,}) Rhythm{{#?1}} v_(0)}
#SLAP = {#VELOC_LIST({n28,}) Rhythm{{#?1}} v_(0)}
#SCRATCH_PUSH = {#VELOC_LIST({n29,}) Rhythm{{#?1}} v_(0)}
#SCRATCH_PULL = {#VELOC_LIST({n30,}) Rhythm{{#?1}} v_(0)}
#STICKS = {#VELOC_LIST({n31,}) Rhythm{{#?1}} v_(0)}
#SQURARE_CLICK = {#VELOC_LIST({n32,}) Rhythm{{#?1}} v_(0)}
#METRONOME_CLICK = {#VELOC_LIST({n33,}) Rhythm{{#?1}} v_(0)}
#METRONOME_BELL = {#VELOC_LIST({n34,}) Rhythm{{#?1}} v_(0)}
#KICK2 = {#VELOC_LIST({n35,}) Rhythm{{#?1}} v_(0)}
#KICK1 = {#VELOC_LIST({n36,}) Rhythm{{#?1}} v_(0)}
#SIDE_STICK = {#VELOC_LIST({n37,}) Rhythm{{#?1}} v_(0)}
#SNARE1 = {#VELOC_LIST({n38,}) Rhythm{{#?1}} v_(0)}
#HAND_CLAP = {#VELOC_LIST({n39,}) Rhythm{{#?1}} v_(0)}
#SNARE2 = {#VELOC_LIST({n40,}) Rhythm{{#?1}} v_(0)}
#LOW_TOM2 = {#VELOC_LIST({n41,}) Rhythm{{#?1}} v_(0)}
#CLOSED_HI_HAT = {#VELOC_LIST({n42,}) Rhythm{{#?1}} v_(0)}
#LOW_TOM1 = {#VELOC_LIST({n43,}) Rhythm{{#?1}} v_(0)}
#PEDAL_HI_HAT = {#VELOC_LIST({n44,}) Rhythm{{#?1}} v_(0)}
#MID_TOM2 = {#VELOC_LIST({n45,}) Rhythm{{#?1}} v_(0)}
#OPEN_HI_HAT = {#VELOC_LIST({n46,}) Rhythm{{#?1}} v_(0)}
#MID_TOM1 = {#VELOC_LIST({n47,}) Rhythm{{#?1}} v_(0)}
#HIGH_TOM2 = {#VELOC_LIST({n48,}) Rhythm{{#?1}} v_(0)}
#CRASH1 = {#VELOC_LIST({n49,}) Rhythm{{#?1}} v_(0)}
#HIGH_TOM1 = {#VELOC_LIST({n50,}) Rhythm{{#?1}} v_(0)}
#RIDE_CYMBAL1 = {#VELOC_LIST({n51,}) Rhythm{{#?1}} v_(0)}
#CHINESE_CYMBAL = {#VELOC_LIST({n52,}) Rhythm{{#?1}} v_(0)}
#RIDE_BELL = {#VELOC_LIST({n53,}) Rhythm{{#?1}} v_(0)}
#TAMBOURINE = {#VELOC_LIST({n54,}) Rhythm{{#?1}} v_(0)}
#SPLASH = {#VELOC_LIST({n55,}) Rhythm{{#?1}} v_(0)}
#COWBELL = {#VELOC_LIST({n56,}) Rhythm{{#?1}} v_(0)}
#CRASH2 = {#VELOC_LIST({n57,}) Rhythm{{#?1}} v_(0)}
#VIBRA_SLAP = {#VELOC_LIST({n58,}) Rhythm{{#?1}} v_(0)}
#RIDE_CYMBAL2 = {#VELOC_LIST({n59,}) Rhythm{{#?1}} v_(0)}
#HIGH_BONGO = {#VELOC_LIST({n60,}) Rhythm{{#?1}} v_(0)}
#LOW_BONGO = {#VELOC_LIST({n61,}) Rhythm{{#?1}} v_(0)}
#MUTE_HIGH_CONGA = {#VELOC_LIST({n62,}) Rhythm{{#?1}} v_(0)}
#OPEN_HIGH_CONGA = {#VELOC_LIST({n63,}) Rhythm{{#?1}} v_(0)}
#LOW_CONGA = {#VELOC_LIST({n64,}) Rhythm{{#?1}} v_(0)}
#HIGH_TIMBALE = {#VELOC_LIST({n65,}) Rhythm{{#?1}} v_(0)}
#LOW_TIMBALE = {#VELOC_LIST({n66,}) Rhythm{{#?1}} v_(0)}
#HIGH_AGOGO = {#VELOC_LIST({n67,}) Rhythm{{#?1}} v_(0)}
#LOW_AGOGO = {#VELOC_LIST({n68,}) Rhythm{{#?1}} v_(0)}
#CABASA = {#VELOC_LIST({n69,}) Rhythm{{#?1}} v_(0)}
#MARACAS = {#VELOC_LIST({n70,}) Rhythm{{#?1}} v_(0)}
#SHORT_HI_WHISTLE= {#VELOC_LIST({n71,}) Rhythm{{#?1}} v_(0)}
#LONG_LOW_WHISTLE= {#VELOC_LIST({n72,}) Rhythm{{#?1}} v_(0)}
#SHORT_GUIRO = {#VELOC_LIST({n73,}) Rhythm{{#?1}} v_(0)}
#LONG_GUIRO = {#VELOC_LIST({n74,}) Rhythm{{#?1}} v_(0)}
#CLAVES = {#VELOC_LIST({n75,}) Rhythm{{#?1}} v_(0)}
#HIGH_WOOD_BLOCK = {#VELOC_LIST({n76,}) Rhythm{{#?1}} v_(0)}
#LOW_WOOD_BLOCK = {#VELOC_LIST({n77,}) Rhythm{{#?1}} v_(0)}
#MUTE_CUICA = {#VELOC_LIST({n78,}) Rhythm{{#?1}} v_(0)}
#OPEN_CUICA = {#VELOC_LIST({n79,}) Rhythm{{#?1}} v_(0)}
#MUTE_TRIANGLE = {#VELOC_LIST({n80,}) Rhythm{{#?1}} v_(0)}
#OPEN_TRIANGLE = {#VELOC_LIST({n81,}) Rhythm{{#?1}} v_(0)}
#SHAKER = {#VELOC_LIST({n82,}) Rhythm{{#?1}} v_(0)}
#JINGLE_BELL = {#VELOC_LIST({n83,}) Rhythm{{#?1}} v_(0)}
#BELL_TREE = {#VELOC_LIST({n84,}) Rhythm{{#?1}} v_(0)}
#CASTANETS = {#VELOC_LIST({n85,}) Rhythm{{#?1}} v_(0)}
#MUTE_SURDO = {#VELOC_LIST({n86,}) Rhythm{{#?1}} v_(0)}
#OPEN_SURDO = {#VELOC_LIST({n87,}) Rhythm{{#?1}} v_(0)}
//------------------------------------------------------------------------------
#EP_CONTROL = {
$.{EP.WE((127,127,!1),( 0, 0,!1)) r? EP(127)}
$<{EP.WE(( 71,127,!1),(127,127,!1)) r? EP(127)}
$>{EP.WE((127,127,!1),(127, 71,!1)) r? EP(127)}
$^{EP.WE(( 79,127,!1),(127, 79,!1)) r? EP(127)}
$v{EP.WE((127, 79,!1),( 79,127,!1)) r? EP(127)}
Rhythm{{#?1}}
}
//------------------------------------------------------------------------------