お役立ち情報 > 初級テクニック > ノートオンに関係なくコントロールチェンジを変化させる方法

ノートオンに関係なくコントロールチェンジを変化させる方法


ノートオンとは、簡単に言うと音が譜面に現れるタイミングのこと。
コントロールチェンジとは、音の味付けのようなもの。

ノートオンとコントロールチェンジ


通常、コントロールチェンジはノートオンのタイミングでしか変化させることが出来ません。
以下のソースを見てください。

 P(0) c P(63) d P(127) e P(63) f P(0) g

鳴らすとわかりますが、ド(左)レ(中央)ミ(右)ファ(中央)ソ(左)と鳴るたびに位置が変化します。
これは、先行指定オプションを使って以下のように書くことも出来ます。

 P.onNote(0,63,127,63,0) cdefg

では、以下のように変化させたいときはどうすればよいでしょうか?

L=左 R=右 C=中央

LCRCLCRCL
ドーーーーーーーー

これは、onTime、onNoteWaveもしくはonNoteWaveExを使うと、解決できる場合もあります。

 @(82)q(99)
 P.onTime((0,0,!4),(63,63,!4),(127,127,!4),(63,63,!4),(0,0,!4),(63,63,!4),(127,127,!4),(63,63,!4),(0,0,!4)) c1^1^4

※@(82)は音色を指定しているだけです。(音の変化がわかりづらいので)
 本項の解説とは直接関係ありません。

しかし、これらはいずれもノートオンのタイミングでしか効果を適用開始できない点が問題になります。
例えば、以下のような状況では適用することが難しくなります。

LCRCLCRCL
ドーレーーーミーー

無論書けないことはありませんが、ソースに起こすと以下のように見づらくなりますし、
何よりそれぞれに微妙に異なる命令を何度も書かなければいけなくなります。

 @(82)q(99)
 P.onTime((0,0,!4),(63,63,!4))
 c2
 P.onTime((127,127,!4),(63,63,!4),(0,0,!4),(63,63,!4),(127,127,!4))
 d1
 P.onTime((127,127,!4),(63,63,!4),(0,0,!4))
 e2^4

ノートオンに関係なくコントロールチェンジを変化させる方法1


Subと組み合わせます。
以下のコードは、Subの中に休符とコントロールチェンジを設置しています。

 @(82)q(99)
 Sub{
  P.onTime((0,0,!4),(63,63,!4),(127,127,!4),(63,63,!4),(0,0,!4),(63,63,!4),(127,127,!4),(63,63,!4),(0,0,!4))
  r1^1^4 // ダミーのノートオン
 }
 c2d1e2^4 // 目当てのノートオン

Subは{}内の演奏を終了後、演奏時刻を元に戻します。
Sub内でダミーのノートオンを発生させることで、目当てのノートオンには関係なく、コントロールチェンジを適用できます。

この例ではあまり恩恵がわからないかもしれませんが、例えばこれを何十行という旋律に付加するとしたら、どうでしょうか。
個々にP.onTimeを記述するとなると、かなり面倒な作業になることがわかると思います。

ところが、上の例を応用すれば、以下のような比較的簡単な記述で、これを実現できます。

 q(99)l8
 Sub{
  [8 // ループで先行指定を繰り返す
  P.onTime((0,31,!4),(95,127,!4),(127,95,!4),(31,0,!4)) // 音の変化を少し滑らかにしてます
  r1 // ダミーのノートオン
  ]
 }
 // 演奏 ここから
 Sub{'c<g>'1}r8^16e8^16g8^16c8^16eg
 Sub{'d<a>'1}r8^16f8^16a8^16d8^16fa
 Sub{'e<b>'1}r8^16g8^16b8^16e8^16gb
 Sub{'d<a>'2^4}r8^16f8^16a8^16d8^16>'dg'4<

 Sub{'cg'1}
 Sub{<cg16egcgc16d16c16d16e16>}
 r8^16
 >gcfe16d16e16f16e16f16g16<

 Sub{'da'1}
 Sub{<da16fadac16d16c16d16e16>}
 r8^16
 >adfe16d16e16f16e16f16g16

 Sub{b8^16a8^16g8^16f8^16ab>c<}
 Sub{g8^16f8^16e8^16d8^16e16f16e16d16'cg'}
 <
 Sub{g8^16f8^16e8^16d8^16fgc}
 <b8^16a8^16g8^16f8^16abg

演奏部は何行にも渡っていますが、P.onTimeは一箇所で済んでいます。

ノートオンに関係なくコントロールチェンジを変化させる方法2


記述中...

コメント

  • 時間がかかりそうなので、一事保存とします。 -- 管理者 (2013-06-11 01:03:18)
名前:
コメント:

タグ:

+ タグ編集
  • タグ:
最終更新:2013年06月12日 01:24