Luaスクリプトは、Instrument Editorツールに読み込んで実行でき、インストゥルメント制作の工程における作業の補助や自動化に利用できます。このドキュメントのこの章では、Lua言語によるスクリプティングの基礎に加え、Kontaktインストゥルメントの構造に対する拡張バインディングについて説明します。
インストゥルメントは、プロパティと値を持つ入れ子のツリーとして表示されます。groupやzoneのようなコンテナは、ベクター(インデックス付きのリスト)として表現されます。プロパティの値には型があり、値のチェックが行われます。これにより変更内容が検証され、データが不正な場合はその変更は無視されます。
プロパティ名、型、値の範囲を含む構造は、次のようになっています。
Instrument -- Struct
name -- String
script -- Struct
name -- String
linked -- Bool
sourceCode -- String
linkedFileName -- String
bypass -- Bool
groups -- Vector of Group
name -- String
playbackMode -- Enum (see below)
volume -- Real, -inf..12
pan -- Real, -100..100
tune -- Real, -36..36
zones -- Vector of Zone
file -- String
volume -- Real, -inf..12
pan -- Real, -100..100
tune -- Real, -36..36
rootKey -- Int, 0..127
keyRange -- Struct
low -- Int, 0..127
high -- Int, 0..127
velocityRange -- Struct
low -- Int, 0..127
high -- Int, 0..127
sampleStart -- Int, 0..inf
sampleStartModRange -- Int, 0..inf
sampleEnd -- Int, 4..inf
loops -- Vector of Loop
mode -- Int, 0..4 (see below)
start -- Int, 0..inf
length -- Int, 4..inf
xfade -- Int, 0..1000000
count -- Int, 0..1000000
tune -- Real, -12..12
grid -- Vector of Gridmode
mode -- Enum (see below)
bpm -- Real, 0.10..400 |
Groupの再生モード:
Loopのモード:
Gridのモード:
スクリプティングはLua言語をもとにしています。オンラインで利用できる資料もあります。例えばwww.lua.orgなどです。コア言語は、インストゥルメントの構造へのバインディングによって拡張されています。インストゥルメントが接続されてツリービューが表示されている間は、スクリプトは変数instrumentを介してそのインストゥルメントにアクセスできます。
グローバル変数scriptPathは、実行されたスクリプトが置かれているディレクトリを指します。これはファイルの入出力に関わるワークフローで役立ちます。
スクリプトはコンソールに出力できます。例えば次のとおりです。
print(instrument) |
インストゥルメントが接続されていれば「Instrument」と出力し、接続されていなければ「nil」、つまり何も無いことを示す値を出力します。
print(scriptPath) |
実行中のスクリプトのディレクトリを出力します。
すべてのプロパティはドットを使って参照できます。例えば次のとおりです。
print(instrument.groups[0].name) |
最初のgroupの名前を出力します。インストゥルメントが接続されていない場合は、エラーメッセージを出力します。
print(instrument.groups[0].zones[0].keyRange.high) |
最初のgroupに含まれる最初のzoneについて、keyRangeの上限値を出力します。
角かっこ [ ] は、groupまたはzoneのベクターのn番目の要素を指します。要素数はLuaの長さ演算子で読み取れます。
print(#instrument.groups) |
これにより、groupやzoneを順に処理できます。
for n=0,#instrument.groups-1 do
print(instrument.groups[n].name)
end |
| ℹ️ | ベクターのインデックスは0から始まることに注意してください。インデックスを使わずにコンテナを反復処理する方法もほかにあります。Binding Referenceの章では、VectorとStructについてpairsを使った反復処理を説明しており、traverse関数を使った反復処理はAlgorithmsの項で説明しています。 |
値の変更は、そのまま自然な書き方で行えます。
instrument.groups[0].name = "Release" |
ループの中で使う場合:
for n=0,#instrument.groups-1 do
instrument.groups[n].name = 'grp_'..n
end |
Group() |
Group型の新しいオブジェクトを作成します。
print(scriptPath) |
実行中のスクリプトのディレクトリを出力します。
add、remove、insertのような構造の変更も行えます。
instrument.groups:add(Group()) |
末尾に新しい空のgroupを追加します。
instrument.groups:insert(0, instrument.groups[3]) |
4番目のgroupのディープコピーを、インデックス0の位置、つまり先頭に挿入します。
参照元情報:Scripting Reference
https://docs.native-instruments.com/online-guides/creator-tools-manual/en/scripting-reference