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.