ソフト音源でシステムエクスクルーシブを使ってみる

仕様上、DXiはSysxを受け付ける

Windowsユーザーの場合、ソフト音源はVSTiとDXiに大別される。システムエクスクルーシブ(Sysx)*1といえばハードウェア音源で利用するもので、普通、ソフト音源では使わない。
ローランドのサポートページによると
http://www.roland.co.jp/support/faq/index.cfm?recordID=1819680&dsp=1&PRODUCT=VSC-MP1

Q. VSC-MP1(プラグインタイプ) はシステム・エクスクルーシブ・メッセージを受信しますか?
A. DXi版は受信します。VST 版は、VST インストゥルメントの仕様により受信しません。

とあり、実はDXiは規格上Sysxを受けられるようだ。と言っても、対応しているかは音源次第。ソフト音源で対応しているのは、自分はこのVirtualSoundCanvas(通称VSC)しか知らない。VST規格もバージョンアップしてきているので、現在はSysxを受け付ける仕様になっている可能性があるが、対応している音源は知らない。

実際にSONARでVSCにSysxを送ってみる

SONARにはSysxビューがあり、ここにSysxを記述できる。しかし、調べてみると、DXiはここからのSysxは受け付けないらしい。

http://www.roland.co.jp/support/faq/index.cfm?recordID=1825773&dsp=1&PRODUCT=CWS3-SD90

Sysxバンクから直接DXiプラグインに対してメッセージを送ることはできません。

そこでイベントリストに記述する。SysxBankではなく、SysxDataとして記述する。また、VSCはGM2・GS対応音源だが、SysxはGSフォーマットのようだ。例として、スケールチューンを利用してCの音だけ15cent上げる場合は次のようになる。

F0 41 10 42 12 40 11 40 4F 40 40 40 40 40 40 40 40 40 40 40 60 F7

*1:Sysexとも書く。こちらの書き方のほうが多いかも。SONARだとSysxになっている。

SONARで複数のテンポチェンジを2倍にしたり半分にする方法

テンポを細かくエディットしたけど、やっぱり全体を少し速くしたい。どうすればいいのか

テンポ一定の曲を作っている場合は、たった1個のテンポチェンジを変更すれば簡単に曲のテンポが変えられる。しかし、SONARの場合、テンポを細かくエディットした後で困ったことはないだろうか。例えば、全体を10%速くしたい時どうすればいいのか。私はものすごく困った。どうやって複数のテンポチェンジを変更すればいいのか。

まさかの『タイムにフィット』

実は、メニューの「プロセス」-「タイムにフィット」をテンポチェンジに適用することで変更できる。例えば、全体が2分のプロジェクトであれば、テンポチェンジだけを1分にフィットさせることでテンポは2倍になる。時間にフィットさせたい場合は問題ないが、2%速くしたいとか1.75倍速にしたいとなれば電卓なりエクセルなりで計算する。フィットさせる時間はSMPTE表記とM:B:T表記の2種類から選択できる。

もう一つの手段、他のMIDIシーケンサーを使う

SONARからMIDIを書き出して、複数のテンポチェンジを調節できる別のシーケンサーで編集し、それを戻すという方法もある。戻すときはインポートするのではなく、別のプロジェクトとして「ファイルを開く」からMIDIファイルをテンポチェンジと共に読み込み、全体をコピーする。コピーするときはダイアログでテンポチェンジをチェックしておく。あとは元のプロジェクトの同じ場所に入れ替えるようにして貼り付ければいい。

余談 CALで出来ないのか?

結論から言うと出来ない。CALからテンポチェンジを変更する場合にも『タイムにフィット』を使うしかない。しかし、CALからこの機能を利用するためのEditFitToTime40関数にバグがあり、SONARでは使えない。そのため、古いCALファイルにはテンポを変更する目的で書かれたものがあるが、SONARでは利用できない。

余談 MIDIトラックだけの場合、再生スピードを変更できる

あまり知られていないが、実はSONARにはテンポ比を200%にしたり50%にした状態で再生する機能があり、テンポツールバーを表示するとアイコンが出てくる。だが、この機能はプロジェクトがMIDIトラックのみの場合しか使えず、一つでもオーディオトラックがあると使えない。つまり、SONAR上でソフト音源を使っているとアウトだ。これは再生時に変更するだけなので、テンポチェンジを実際に書き込むわけではない。

CALについて書いてあるサイト

海外サイトの方が充実している

自分がCALのことで記事にしてるのは、すでに海外サイトに書いてあることばかり。CALは遺物扱いなので、どこもSONAR2やCakewalk9の話が出てくるくらいに古いので注意が必要。TIPSのいくつかは今でも使える。SONAR8やX1だっていう今頃にCALを使おうとするのは、奇特なことなんだと改めて実感。ほぼサポートやめてるし、致命的と言っていいバグがあるし、使えなくなった関数もある。でも、ちょっとした調整にショートカットキーを使いたいのだからしょうがない。

公式のマニュアルに誤りがある

ほぼ見捨てられた機能のため、マニュアルにも手がつけられていない。海外系のサイトはこの点にも触れ、バグや掲載されていない関数についても書いている。
Cakewalkの日本語マニュアルでわかっている間違いの一例を挙げると

  • いくつか例文が載っているが、doでくくられた例文のすべては、くくられている関数が行頭でスペースを入力していないので、そのままコピーするとどれも作動しない。
  • SetFilterRange関数のnRangeオプションでチャンネルは0となっているが、正しくは10。
  • EditInterpolate関数にはnodialogオプションが存在し、数値を設定しない場合は入力ダイアログが表示される。
  • Trackchannel関数が、誤ってTrackchan関数と記載されている。
  • イベントパラメータ変数のPatch.Bankの適用値が-1...14383となっているが、正しくは-1...16383。

など。

国内

CAL ユーザーマニュアル

http://www.cakewalk.jp/Downloads/
英語でいい人はたぶん見る必要はない。つづりを思い出したい時に見る。記述を信じてはいけない場合がある。

蛞蝓屋敷

http://odasan.s48.xrea.com/index.html
CALファイルと解説がある。マニュアルにある内容は全部書いてある。

ActiveSONAR

http://sonar.web.infoseek.co.jp/tools/tools.htm
実用的なCALファイルがある。

国外

CAL Programming Information

http://www.bikexprt.com/calfiles/index.htm
上記の海外Cakewalkに載っている。こっちを見ろってことなんだろう。

The SONAR MIDI-Kit

http://members.ziggo.nl/t.valkenburgh/CAL.html
マニュアル的な内容とTIPSがPDFにまとめられている。

The Secrets of Cakewalk's CAL Programming feature

http://dgcardenas.fpmit.com/cal/tutorial/cwt-function.htm
日本のマニュアルより詳しい。

Hexachord CAL Script Collection

http://www.hexachord.net/cakewalk-cal/
なんだかCALファイルがたくさんある。参考までに。

イベントフィルタの使い方と、CALから使う場合の違い

メニューからイベントフィルタと置換を使う

イベントフィルタは、Dominoでいうところの「選択範囲の絞り込み」と同じ機能。条件を決めてMIDIイベントの選択ができる。これを利用すれば、4分音符だけを選択したり、1拍目のノートだけを選択したり、特定範囲のベロシティをもったノートを選択することが出来る。置換を利用すれば、選択フィルタで絞り込む設定を決めて、書き換えフィルタで変更を加えられる。どちらもわかりにくい画面が出るせいか、使っていない人が多い気がする。
イベントフィルタはメニューの 「編集」-「選択」-「フィルタで選択」、置換は「プロセス」-「置換」で利用できる。イベントフィルタは奥まったところにあって不便なので、メニューエディタでひとつ上の階層に引っ張り出すか、キーバインド設定からショートカットに登録すると便利。同時に置換の登録も。

プリセットのちょっとした問題

設定はプリセットに登録しておけるが、プリセットを作ったときに設定した最大の拍子よりも小さい拍子に設定されているプロジェクトの場合、プリセットが反映されない。例えば、4拍子でフィルタのプリセットを作ったとき、そのプリセットは3拍子に設定したプロジェクトでは使えない。
なぜこんなことが起こるのか。4拍子の場合、フィルターの設定項目であるBeatの最大値が4なので、ほとんどのプリセットではBeatの範囲設定を1〜4に設定してプリセットを保存する。しかし、3拍子に設定されているプロジェクトでは、Beatの最大値が3なので、このプリセットはオーバーレンジということになり受け付けてくれなくなるようだ。逆に、3拍子のプリセットは4拍子のプロジェクトでも読み込めるが、Beatの範囲が1〜3で保存されているので、手入力で直さずに使うと4拍目は検索・置換に反映されなくなる。
拍子が混在しているプロジェクトでは、最大の拍数がフィルタにおけるBeatの最大値となる。

CALからイベントフィルタと置換を使う

CALでイベントフィルタを利用する場合にはSetFilterKind、SetFilterRange、ResetFilter、置換をしたい場合にはさらにEditInterpolateを利用する。しかし、いくつかバグがあるので、素直にSONARから入力ダイアログを出して使ったほうがいいかもしれない。
CALでイベントフィルタの範囲設定をリセットするにはResetFilter関数を使う。ところがこの関数を実行すると、複数トラックを選択していても、なぜかカレントトラックのみの選択に変更されてしまう。つまり、ResetFilter関数を含むCALファイルは意図しない選択範囲で実行される可能性がある。古いままの仕様なのだろうか。CAL実行時に選択するトラックを入力する作りにすれば回避できるが、ショートカット一発の恩恵は無くなる。
また、SetFilterKind関数にもバグがある。まず、イベントフィルタのShape(オートメーションのノード)をチェックするための定数がたぶん無い。あるのかもしれないが、調べた限りで見つけられなかった。次に、イベントフィルタの入力ダイアログからは、デュレーションの数値を2147483647まで入力できるのに、CALから設定しようとすると最大値が65535。符号無し16bitのまま放置されているらしい。最大にならなくて気持ち悪いけど、65535tick(=68:255)よりも大きいノートはたぶん使わないだろう。そして、致命的なのは、SetFilterRange関数を置換のための検索フィルタで使うと、Beatの範囲設定を4より大きくできない。4より大きい値に設定しても4として処理される。例えば、6拍子に設定しているプロジェクトでCALから置換を行おうとしても、5拍目と6拍目は選べない。この拍子の問題は、SetFilterRange関数をイベントフィルタとして使う場合は起きない。また、EditInterpolate関数のダイアログオプションをオミットして、入力ダイアログを出す設定にした場合も起こらない。ダイアログが出る場合、SetFilterRange関数で設定したBeatの最大値はダイアログに反映されず、自動的にプロジェクトの最大の拍数がセットされる。

参考

バグがあるので利用する可能性は薄いが、SetFilterKind関数のマニュアルにない定数と適用値の参考に。イベントフィルタとして使いたい場合、nFilterは0。置換をするときは1で検索フィルタ、2で書き換えフィルタ。

	; nFilter =	0:"Use Event Filter"
	;		1:the Interpolate Search Filter
	;		2:the Interpolate Replace Filter
	(SetFilterKind nFilter NOTE TRUE)
	(SetFilterKind nFilter KEYAFT TRUE)
	(SetFilterKind nFilter CONTROL TRUE)
	(SetFilterKind nFilter RPN TRUE)
	(SetFilterKind nFilter NRPN TRUE)
	(SetFilterKind nFilter PATCH TRUE)
	(SetFilterKind nFilter CHANAFT TRUE)
	(SetFilterKind nFilter WHEEL TRUE)
	(SetFilterKind nFilter WAVE TRUE)	; Audio
	(SetFilterKind nFilter SYSX TRUE)	; Sysxbank
	(SetFilterKind nFilter SYSXDATA TRUE)
	(SetFilterKind nFilter TEXT TRUE)
	(SetFilterKind nFilter EXPRESSION TRUE)
	(SetFilterKind nFilter CHORD TRUE)
	(SetFilterKind nFilter HAIRPIN TRUE)
	(SetFilterKind nFilter LYRIC TRUE)
	(SetFilterKind nFilter MCI TRUE)

	(SetFilterRange nFilter 0 TRUE 0 127)	; Note Key
	(SetFilterRange nFilter 1 TRUE 0 127)	; Note Velocity
	(SetFilterRange nFilter 2 TRUE 0 65535)	; Note Duration 
	(SetFilterRange nFilter 3 TRUE 0 127)	; Key Aftertouch Key
	(SetFilterRange nFilter 4 TRUE 0 127)	; Key Aftertouch Value
	(SetFilterRange nFilter 5 TRUE 0 127)	; Controller Number
	(SetFilterRange nFilter 6 TRUE 0 127)	; Controller Value
	(SetFilterRange nFilter 7 TRUE 0 127)	; Patch Change Patch Number
	(SetFilterRange nFilter 8 TRUE 0 127)	; Channel Aftertouch Value
	(SetFilterRange nFilter 9 TRUE 0 16383)	; Pitch Wheel Amount -8192...8191
	(SetFilterRange nFilter 10 TRUE 0 15)	; MIDI Channel Number 1...16
	(SetFilterRange nFilter 11 TRUE 1 4)	; Beat Count
	(SetFilterRange nFilter 12 TRUE 0 3839)	; Tick Count
	(SetFilterRange nFilter 13 TRUE 0 16384)	; Patch Change Bank Number -1...16383
	(SetFilterRange nFilter 14 TRUE 0 16383)	; RPN Number
	(SetFilterRange nFilter 15 TRUE 0 16383)	; RPN Value
	(SetFilterRange nFilter 16 TRUE 0 16383)	; NRPN Number
	(SetFilterRange nFilter 17 TRUE 0 16383)	; NRPN Value

EditInterpolate関数とCALのバージョン

マニュアルがおかしかった

ちょっと前にEditInterpolate関数を使ったCALファイルを作ろうとしたら、日本語マニュアル(chmファイル)通りにいかなかったのでメモ。と言っても、少し前の記事で紹介した海外のPDFに書いてあった内容。
日本語マニュアルはバージョンアップされても見直しがされていない様子。

CALのバージョンによって挙動が異なるかもしれない

EditInterpolate関数を使うことで、メニューのプロセスにある置換をCALから実行することができる。マニュアルには次のように書いてある。

(EditInterpolate)

このコマンドはユーザーにダイアログを示しません。
検索(1)および置換(2)フィルタがすでに目的通り設定されていることを前提とします。 

バージョンいくつかまではこの通りの仕様だったのかもしれない。しかし、少なくともCALのver10.0では、この通りに実行すると検索および置換フィルタの入力ダイアログが表示される仕様になっている。本来は次のような説明が正しいはず。

(EditInterpolate [])

プロセス|置換に対応したCAL関数です。 

nodialogに何らかの数値を設定すると、ユーザーにダイアログを示しません。
この場合、検索(1)および置換(2)フィルタがすでに目的通り設定されていることを前提とします。

CALのバージョンを調べる方法

SONARのCALバージョンを知りたい場合は、CALの予約語であるVERSIONを使う。CALは小数が扱えないため数値は10倍されている。ver10.0であればver100と表示される。

(do
 (pause "CAL ver" VERSION)
)

SONARでヒューマナイズ

ヒューマナイズのやり方

SONARでもヒューマナイズ、あるいはランダマイズと呼ばれる手法が一応使える。

  1. MIDI FXである『Quantize』&『Velocity』あるいは『Humanizer』を使う。
  2. CALを使う。

MIDI FXプラグインの場合

『Quantize』でノートタイミング、『Velocity』でベロシティを調節。両者はSONARに付属している。
『Humanizer』はノートタイミングとベロシティの両方を調節できる。下記URLから『Humanizer MFX Plug-in for Cakewalk』をダウンロード。ありがたや。
ソフトウェア - テテのアトリエ http://www1.plala.or.jp/tete009/software.html

CALの場合

CALの場合は自分で書いても良いし、すでにあるのを探すも良し。自分で書く場合は、random関数を使う(リファレンス-数学関数)。CCとピッチベンドに対してランダマイズをしたい場合にはCALを使うしかない。そうでない限りは、前述のMIDIFXで事足りるだろう。

終わりに

DTMの場合はリアルタイム入力があるし、何にしてもランダマイズだけで人間味が出るということはない。プラモでいうところの『ウェザリング(汚し)』に近いものを感じる。と言いつつプラモに詳しくない自分。

Finaleと青く見えるSibelius(1865-1957)

大げさなフィクション

この種のソフトでは、シェアという理由から最初にファイナルを選ぶ人が多いのではないだろうか。だがこいつの本当のウリは、シェアではなく『未知性』だと思う。やりたいことはわかっているのに、どうすればその操作ができるかがわからない。攻略するためには推理を駆使するしかない。操作性が悪いと評価する人もいるが、それを含めてこのソフトなのだ。この独特の操作性と、次の一手を推理していく面白さ!一手間違えただけでアクシデンタルが入り乱れる。ロードでさえ気が抜けない。これが面白いと感じられないならヌルゲーでもやっているがいい。超大作すぎて、私は3年以上かかってもクリアできていない。取説がなければとっくにゲームオーバーしていただろう。
そしてある日、知り合いがそのヌルゲーに浮気してこう言った。「こんなに使いやすかったなんて。もっと早く使ってみればよかった」

楽譜とフォント

国内で出版されている楽譜は、手書きものを除けばほとんどはフィナーレで作られているそうな(いまのところは)。気になる音楽記号用フォントだが、国内のFinaleで作られる出版譜の大半が『Chaconne』を使っているとのこと。『Kousaku』や『Maestro』などを使っているなら変更してみるのもおもしろい。