//------------------------------------------------------------------------------ // CyclicControlChange.h //------------------------------------------------------------------------------ // ノートオンに関係なくコントロールチェンジを変化させる関数のセット //------------------------------------------------------------------------------ FUNCTION DivRound(INT Value, INT Div){ RESULT = (Value * 10 / Div + 5) / 10; } //------------------------------------------------------------------------------ // 関数本体 //------------------------------------------------------------------------------ // // 【書式】 // CyclicControlChange({コントロールチェンジ[V,EP,P,p,p%,M,CHO]),効果時間(小節), 変化周期(),開始値,中間値1,中間値2,終端値) // // ex) パンポットを回す // TR(1)CH(1) Voice(30) CyclicControlChange({P},4,!8,63,127,63,0) c1^1^1^1 // //------------------------------------------------------------------------------ FUNCTION CyclicControlChange(STR ControlChange, INT NoteLength, INT Cycle, INT StartValue, INT IntermediateValue1, INT IntermediateValue2, INT EndValue){ INT Div4 = Cycle / 4; STR Ret = "[" + DivRound(NoteLength * (!1), Cycle); Ret = Ret + ControlChange + ".T(" + StartValue + "," + IntermediateValue1 + "," + Div4 + ")r" + !(Div4); Ret = Ret + ControlChange + ".T(" + IntermediateValue1 + "," + IntermediateValue2 + "," + Div4 + ")r" + !(Div4); Ret = Ret + ControlChange + ".T(" + IntermediateValue2 + "," + EndValue + "," + Div4 + ")r" + !(Div4); Ret = Ret + ControlChange + ".T(" + EndValue + "," + StartValue + "," + Div4 + ")r" + !(Div4); Ret = Ret + "]"; Sub{Ret}; } //------------------------------------------------------------------------------ // すぐに使える関数サンプル //------------------------------------------------------------------------------ // // 【書式】 // [各エフェクト名](効果時間(小節)) // // ex) エフェクト hoge をかける // TR(1)CH(1) @(30) hoge(4) c1^1^1^1 // //------------------------------------------------------------------------------ // オートパン //------------------------------------------------------------------------------ FUNCTION AutoPan2 (INT NoteLength = 1){CyclicControlChange({P},NoteLength,!2,63,127,63,0)} FUNCTION AutoPan4 (INT NoteLength = 1){CyclicControlChange({P},NoteLength,!4,63,127,63,0)} FUNCTION AutoPan8 (INT NoteLength = 1){CyclicControlChange({P},NoteLength,!8,63,127,63,0)} FUNCTION AutoPan8M(INT NoteLength = 1){CyclicControlChange({P},NoteLength,!8,63,103,63,24)} FUNCTION AutoPanL (INT NoteLength = 1){CyclicControlChange({P},NoteLength,!8,31,63,31,0)} FUNCTION AutoPanR (INT NoteLength = 1){CyclicControlChange({P},NoteLength,!8,95,127,95,63)} //------------------------------------------------------------------------------ // トレモロ //------------------------------------------------------------------------------ FUNCTION Tremolo4 (INT NoteLength = 1){CyclicControlChange({V},NoteLength,!4,127,127,99,99)} FUNCTION Tremolo8 (INT NoteLength = 1){CyclicControlChange({V},NoteLength,!8,127,127,99,99)} FUNCTION Tremolo16(INT NoteLength = 1){CyclicControlChange({V},NoteLength,!16,127,127,99,99)} FUNCTION TremoloEX(INT NoteLength = 1){CyclicControlChange({V},NoteLength,!8,99,107,127,107)} //------------------------------------------------------------------------------ // 特殊 // 2 つのチャネルを使用して、音色特性が時間変化していくように見せかける // ex)Overdriven ⇔ Distoriton の変化 // TR(1)CH(1) @(30) TransformA(4) c1^1^1^1 // TR(2)CH(2) @(31) TransformB(4) c1^1^1^1 //------------------------------------------------------------------------------ FUNCTION TransformA(INT NoteLength = 1){CyclicControlChange({EP},NoteLength,!1^1^1^1,127,87,47,87)} FUNCTION TransformB(INT NoteLength = 1){CyclicControlChange({EP},NoteLength,!1^1^1^1,47,87,127,87)} //------------------------------------------------------------------------------ // フランジャー(原音 1 、遅延波 1 で 計 2 チャネル使用。ベンド使用不可) // ex) // TR(1)CH(1) @(31) c1^1^1^1 // TR(2)CH(2) @(31) Flanger(4) c1^1^1^1 //------------------------------------------------------------------------------ FUNCTION Flanger(INT NoteLength = 1, INT Ratio = 1){CyclicControlChange({p%},NoteLength,!(Ratio),0,767,0,-767)} //------------------------------------------------------------------------------ // リセット命令 //------------------------------------------------------------------------------ FUNCTION ResetEffect(INT Pan = 63, INT Vol = 127, Exp = 127){P(Pan) V(Vol) EP(Exp) p%(0)} //------------------------------------------------------------------------------