Synthesizer V Studio スクリプトマニュアル
Synthesizer V Studio 2 Pro にはスクリプト機能が備わっています。ユーザーは、自身でスクリプトを作ることでエディタに新機能を追加できます。
スクリプトの考え方はプラグインシステムに似ていますが、動的にリンクされたオブジェクト(例えば
.dll
)をロードする代わりに、Synthesizer V Studio
はソースコード形式でスクリプトをロードします。そのため、スクリプト開発に必要なのはテキストエディタだけです。一度記述したスクリプトは、Synthesizer
V Studio がサポートするすべてのプラットフォーム(Windows、macOS)に移植可能です。
対応言語
機能
スクリプトで何が可能なのか?
- ノート/グループ/パラメータ/トラックの読み取り、追加、編集、削除 ...
- 現在の選択範囲(ノートとグループ)へのアクセスと変更
- プロジェクトのナビゲーション(例:特定の範囲をスクロール、ズーム)
- プレイバックの制御
- カスタマイズ可能なダイアログを通したユーザーとのインタラクション
- 非同期コールバック機能 (例:
SV#setTimeout
を呼び出して関数の実行を遅らせる)
はじめに
- 基本的な例 を見てみましょう。
- より高度な例 も見てみましょう。
- テストスクリプト を見て学びましょう。
- 不明点については、クラスリファレンスを確認してください。
- ローカライゼーション を使用して国際化しましょう。
- 上級者の方は メモリ管理 を理解しましょう。
プログラミングの考え方
Synthesizer V Studio のスクリプト API はオブジェクト指向です。JavaScript と Lua スクリプトは呼び出し方法が若干異なりますが、同じ API を共有しています(下記セクション参照)。
ユーザーが操作できるオブジェクトには、データオブジェクトと UI 状態オブジェクトの 2 種類があります。
- データオブジェクトは、トラック、ノート、パラメータ ... など、プロジェクトの一部です。同様のスクリプト可能なソフトウェアで作業したことがあれば、すでにこれらに精通しているかもしれません。
- UI 状態オブジェクトはユーザーインターフェースの抽象化です。例えば、
PlaybackControl
オブジェクトは、再生、一時停止、ループ、シーク動作を管理します。
他のプラグインとの違い
他の多くのプラグインやDAWにおいても、Synthesizer V Studio と同様にスクリプト機能を提供しています。例えば、VOCALOID は Job Plugin をサポートとし、 REAPER には ReaScript が組み込まれています。 これらのプラットフォームにおいてスクリプティングの経験があれば、 Synthesizer V Studio のスクリプト機能の利用も比較的容易に始められます。 正し、プログラミングモデルに重要な違いがあります。
- 多くのスクリプト環境では、API はグローバル関数として公開されています。 これに対して Synthesizer V
Studio では
SV
という単一のグローバルオブジェクトのみが公開され、ほとんどのプロジェクトデータとのやり取りは専用のデータ型オブジェクトのメソッドを通じて行われます。 - VOCALOID の Job Plugin は MIDI イベントの概念に基づいているのに対して、 Synthesizer V Studio ではノート、パラメータ、 グループ、 トラックがオブジェクトして表現され、プロジェクトファイル内の構造を忠実に反映しています。
JavaScript と Lua の重要な違い
添え字
JavaScript の添え字は 0 から始まります。Lua の添え字は 1 から始まります。スクリプト API
においてももちろん同様です。 例えば JavaScript における
NoteGroup.getNote(0)
は Lua においては
NoteGroup:getNote(1)
となります。
メソッドの呼び出し
JavaScript API でのオブジェクト指向はプロトタイプベースです。呼び出しは
Class.Method(...)
という形を取ります。 Lua API
ではメタテーブルベースとなっており、呼び出しは Class:Method(...)
という形を取ります。
ただし、メンバオブジェクトについては Lua でもドットでアクセスされます(例:SV#QUARTER
)。