language : Japanese | English
ホーム サンプル リファレンス ダウンロード 購入 FAQ フォーラム 作者
ここでは、SALのスクリプトファイル(*.sal)のサンプルを展示します。サンプルは自由にコピーしてご使用になれます。以下のサンプルは、zipファイルの中salファイルとして含まれております。SALを実行するには、「編集(E)」-「SAL(Sekaiju Application Language)...」から、salファイルを選択してください。
以下に簡単なSALスクリプトの例を示します。まずは単純なHello Worldの表示からです。pauseコマンドはメッセージボックスを表示させます。
(do (pause "Hello World!") )
次のスクリプトは、選択されているすべてのノートイベントのベロシティを10だけ上げます。forEachEventは、選択されているすべてのイベントを評価します。SALでは、MIDIの規則に反しない限り、あらゆる種類のイベントのあらゆる値を変更することができます。
(do (forEachEvent (if (== Event.Kind NOTE) (do (+= Note.Vel 10) ) ) ) )
CALでは困難なトラック移動もSALでは簡単です。次のスクリプトは、Event.Trackを用いて、選択されたピッチベンドイベントを次のトラックに移動します。
(do (forEachEvent (if (== Event.Kind WHEEL) (+= Event.Track 1) ) ) )
ノート発音開始から29ティック後にCC#1-モジュレーション=32が挿入されます。ノートオン毎に0に戻って解除されます。単調に打ち込まれたフルート・オーボエやトロンボーン等の管楽器の表現力が向上します。insertは、新たにイベントを挿入します。SALでは、MIDIの規則に反しない限り、あらゆる種類のイベントを挿入することができます。
(do (forEachEvent (if (== Event.Kind NOTE) (do (int nTime Event.Time) (int nCh Event.Chan) (int nDur Note.Dur) (insert (+ nTime -1) nCh CONTROL 1 0) (if (>= nDur 29) (insert (+ nTime 29) nCh CONTROL 1 32) ) ) ) ) )
CALでは困難なシステムエクスクルーシヴイベントの挿入も簡単です。次のスクリプトは、選択されたCC#7-Volumeイベントを、マスターボリュームに変換します。
(do (forEachEvent (if (== Event.Kind CONTROL) (if (== Control.Num 7) (do (int nTime Event.Time) (int nVal Control.Val) (insert nTime -1 SYSXDATA 240 127 127 4 1 0 nVal 247) (delete) ) ) ) ) )
ユーザー定義のアルペジエーターを作ることも可能です。次のスクリプトは、major系の16分音符に分散和音化するもので、ドの単音はドミソドミソドミ…、レの単音はレファ#ラレファ#ラレファ#…へと自動的に一括変更します。
(do (int nTime 0) (int nCh 0) (int nInterval (/ TIMEBASE 4)) (int nPos 0) (int nKey 0) (int nVel 0) (int nDur 0) (forEachEvent (if (== Event.Kind NOTE) (do (= nCh Event.Chan) (= nTime Event.Time) (= nDur Note.Dur) (= nKey Note.Key) (= nVel Note.Vel) (= nPos nTime) (while (< nPos (+ nTime nDur)) (do (if (< nPos (+ nTime nDur)) (insert nPos nCh NOTE (+ nKey 0) nVel nInterval) ) (+= nPos nInterval) (if (< nPos (+ nTime nDur)) (insert nPos nCh NOTE (+ nKey 4) nVel nInterval) ) (+= nPos nInterval) (if (< nPos (+ nTime nDur)) (insert nPos nCh NOTE (+ nKey 7) nVel nInterval) ) (+= nPos nInterval) (if (< nPos (+ nTime nDur)) (insert nPos nCh NOTE (+ nKey 12) nVel nInterval) ) (+= nPos nInterval) (if (< nPos (+ nTime nDur)) (insert nPos nCh NOTE (+ nKey 16) nVel nInterval) ) (+= nPos nInterval) (if (< nPos (+ nTime nDur)) (insert nPos nCh NOTE (+ nKey 7) nVel nInterval) ) (+= nPos nInterval) (if (< nPos (+ nTime nDur)) (insert nPos nCh NOTE (+ nKey 12) nVel nInterval) ) (+= nPos nInterval) (if (< nPos (+ nTime nDur)) (insert nPos nCh NOTE (+ nKey 16) nVel nInterval) ) (+= nPos nInterval) ) ) (delete) ) ) ) )
Bavi_H (Robert Hart)様が、重なっている音符を一括トリムするSALスクリプトを書いておられます。詳しくは、こちらのサイトをご覧くださいませ。本当にありがたい限りです。
(C)2017-2022 くず All rights reserved.