Creator Toolsマニュアル 3 - スクリプトリファレンス(Scripting Reference)

Creator Toolsマニュアル 3 - スクリプトリファレンス(Scripting Reference)

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の再生モード:

  • instrument.group.playbackMode = PlaybackMode.Sampler
  • PlaybackMode.DirectFromDisk
  • PlaybackMode.Wavetable
  • PlaybackMode.ToneMachine
  • PlaybackMode.TimeMachine
  • PlaybackMode.TimeMachine2
  • PlaybackMode.TimeMachinePro
  • PlaybackMode.BeatMachine
  • PlaybackMode.S1200Machine
  • PlaybackMode.MP60Machine

Loopのモード:

  • 0: Oneshot、つまりループなし
  • 1: 終端までループ
  • 2: 終端まで交互にループ
  • 3: リリースまでループ
  • 4: リリースまで交互にループ

Gridのモード:

  • GridMode.Off
  • GridMode.Fix
  • GridMode.Auto

スクリプティングの基礎

スクリプティングは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