Yggdrasil Seeds : Software Works : DualMusik : TIPS3[逸般的な機能]
PV[205530]

逸般的な機能

ソフトウェアホールド

MIDI標準のホールド機能は、ノートオフ後の余韻でホールドをかけた場合はサスティン動作に戻るようになっています。これを厳密に実装している音源では、あまりフレクシブルな使い方ができない代物となってしまっています。さらに、SC-8850では動作自体も怪しいというオマケまでついています。
で、その代替となる機能を = コマンドの機能のひとつとして用意しました。 =6,1 でホールドon, =6,0 でホールドoff, =7,1 でソステヌートon, =7,0 でソステヌートoff となります。
これらの機能はトラック毎に指定可能で、同じMIDIチャネルを使っている他のトラックにも影響しません。

トラック同期

トラックの動作を休止したい場合、普通は R コマンドでステップ数を指定する必要があります。この場合、再開するまでの間隔をいちいち数える必要があるため、長い間を空けるときは面倒です。
それを簡略化するため、H コマンドで自トラックの動作を一時停止し、必要時に他のトラックから W コマンドでウェイクコールをかけて復帰できるようにしました。
ただし、仕様上の都合(要するに手抜き)で実際の復帰は W コマンド実行から1ステップ遅れます。この遅れは次回のウェイトにて相殺されますので、後々までズレ続けるようなことはありません。

#1,3,4 :0 V127 U100 L2
#1 C ?6"sig" W4 C C
#3 E E E
#4 ?6"halt" H ?6"wake" G G

上の例では解かり易いように ? コマンドでマークを入れています。
まず、いきなりトラック4が H コマンドで停止(halt)します。これを解除するのはトラック1にある W コマンドで、C の再生後に W コマンドでトラック4にウェイクコール(wake)をかけて復帰(wake)させます。
ただし、実際のウェイクアップは次回のステップとなるため、直後の G はトラック1の C やトラック3の E より 1ステップ遅れて再生されます。ただし、この遅れは次のステップで相殺されるため、最後の G は他のトラックと同時に再生されるようになります。

#1,3,4 :0 V127 U100 L2
#1 ?6"halt" H ?6"wake" ?6"sig" W3 C C
#3 ?6"halt" H ?6"wake" E E
#4 G ?6"sig" W1 G G

上の例は、もう1ランクこんがらかっています。
まずトラック1,3が停止し、トラック4で G が再生されます。その後、トラック4はトラック1を復帰させます。ここまでは同様。
さて、ここで復帰して1ステップ遅れている状態のトラック1がトラック3を復帰させようとしています。トラック3の復帰はさらに1ステップ遅れ、次の和音 CEG は G → C → E の順に1ステップずつズレて再生されます。このズレも続く2ステップの間に相殺され、最後の CEG はちゃんと同時に再生されるようになります。

拡張コントロール

DualMusikでは多数の拡張コントロールチャネルを持ち、それぞれを通じていくつかのエフェクトをかけることができます。
これらは全てある程度独立しており複数のエフェクトを同時に利用できるが、全てがトラック毎に用意されているわけではないため、複数のトラックから同一の拡張コントロールチャネルを操作しようと競合して正常に動作しない場合もあります。
また、一部のエフェクトは性質上無意味なものや共存できないものもあります。
この他、一度に多種のエフェクトを濫用すると処理が重くなることにも注意。

動作詳細はデータテーブルを参照。

スキッピング

再生を部分的に省略する機能です。=255,1 でon, =255,0 でoffとなります。
厳密には、ノートオンとウェイトだけを省略します。その他の処理はノンウェイトで一度に実行されますので、かなりの負荷がかかります。
V0.30以降では =255,2 で最適化スキップを行います。一部のコントロールは最後のものだけが実行対象となり、残りは省略されます。これにより、スキップ時にかかる負荷が大幅に緩和されました。
デバッグ用なので、公表対象のデータには使わないでください。

コントロールチェンジマスキング

指定したコントロールチェンジの送信を抑制する機能です。
コントロールナンバー毎に設定できるようになっていて、 = コマンドのレジスタ 16~23 に16bitずつ割り当てられています。

スウィッチング

フラグの状態により、反映させるMMLを切り替える機能です。
フラグは16本用意されており、dumc のオプションか = コマンドで設定できます。
パラメータを2進数で書くと右端をフラグ0として列記できて解かり易いでしょう。

スウィッチングは \ コマンドで設定します。パラメータは1になっている位置のフラグをチェック対象にすることを表します。
以下の例では、3つのフラグをGM,GS,XGに割り当てGSの設定を選択しています。

#1 :0 =268,.010 / f0=GM,f1=GS,f2=XG
\.001 $4,1 / GM1 on
\.010 =8,&41 =9,&10 =10,&42 $5,1 / GS reset
\.100 =8,&43 =9,&10 =10,&4C $6,0 / XG on
\,.001 i0,0

2~4行目はGM,GS,XGそれぞれの初期設定で、チェック対象のフラグが1になっている場合のみ行末までのMMLを反映させるようにしています。(この例では、2,4行目のMMLが無視される)
5行目は、逆にチェック対象のフラグが0になっている場合のみ有効とする条件指定です。(この例では、反映される)
\ とパラメータの間にある , はパラメータの区切りで、1番目のパラメータが省略されていることを示しています。省略されたパラメータは 0 と見なされるので、このコマンドは \.000,.001 と等価です。つまり、どのフラグも1であるかどうかのチェック対象としないことを意味します。

ステップカウンタ

DualMusikには小節の概念がありませんが、分解能,拡張コマンド#88(SMFのメタイヴェント#88と等価),ステップカウンタを参照して擬似的に小節を表現できるようにしました。
基本的にはステップ毎に余りステップ数がカウントアップされ、分解能の値に達したら小節数をカウントアップして余りステップ数を0に戻します。拡張コマンド#88は余りステップ数から拍数を計算するために参照されるほか、拡張コマンド#88が設定される時点を新しい小節の始まりと解釈し、余りステップ数があった場合は小節数をカウントアップして余りステップ数を0に戻します。
(ここまではSMFの仕様と同じだと思う、たぶん)
また、 = コマンドを使ってステップカウンタに特殊な動作を要求するシグナルを送ることができます。ただし、これらの機能はSMFに影響されないため、使うとエクスポートしたSMFの小節線位置が怪しくなり得ます。これを回避するためには、修正用に拡張コマンド#88を配置するなどの工夫が必要となります。

カウント停止
=25,1でカウントアップ停止,=25,0で再開となります。
MIDI機器初期化用のプリギャップ前後に配置してその部分を勘定から外すとか。

小節カウントアップ抑制
=25,2を送ると、余りステップ数が分解能の値に達しても小節数のカウントアップを行わなくなります。この状態で=25,0を送ると抑制が解かれ、余りステップ数が分解能の値以上の場合は小節数をカウントアップして余りステップ数を0に戻します。
(たとえ2小節ぶん以上貯まっていたとしても、カウントアップは1つだけ)
これはテンポを使わずステップ数を延長させてリタルダンドやフェルマータなどを表現した場合に起こる小節線のズレを修正するためにあります。
余りステップ数リセット
=25,3を送ると余りステップ数を0に戻します。
小節数のカウントアップは行いません。

強制カウントアップ
=25,4を送ると小節数を強制的にカウントアップし、余りステップ数を0に戻します。
既に余りステップ数が0であっても、カウントアップされます。

完全リセット
=25,5を送るとステップカウンタをリセットします。
また、バックアップされた内容もリセットされます。

バックアップ,リストア
=25,6でステップカウンタの現在値を記憶し、=25,7で記憶された値に戻します。
記憶できる容量は1回ぶんのみで、=25,6が送られると以前記憶した内容は上書きされます。
ループなどでカウンタを戻したいときに使います。

強制加算
=26,n(nは0~65535)を送ると、余りステップ数にnが加算されます。
小節のカウントアップは行われません。
弱起の曲などで余りステップ数の初期設定を行いたい場合に使います。


[表紙] [前] [次]