KSPリファレンスマニュアル 14 - ロード/セーブコマンド(Load/Save Commands)

KSPリファレンスマニュアル 14 - ロード/セーブコマンド(Load/Save Commands)


一般情報

ファイル形式

次のファイル形式を読み込み・保存できます。

  • Kontaktの配列(.nkaファイル)

  • KSPのファイルコマンドで使用するMIDIファイル(.mid)

  • KontaktのコンボリューションエフェクトやユーザーZoneで使用するサンプル(.wav、.aif、.aiff、.ncw)(読み込みのみ)

非同期処理の扱い

ファイルの読み込みと保存はリアルタイムでは実行できません。そのため、すべてのロード/セーブコマンドは、動作の完了時に一意の値、すなわち非同期IDを返します。この値を$NI_ASYNC_IDおよび$NI_ASYNC_EXIT_STATUSと組み合わせてon async_completeコールバックの中で使用すると、コマンドが動作を完了したかどうか、読み込みや保存が成功したかどうかを確認できます。

パスの扱い

KSPのすべてのファイルパスは、フォルダーの区切り文字としてスラッシュ(/)を使用します。バックスラッシュはサポートされていません。フルパスもスラッシュ / で始める必要があります。

macOSのファクトリーフォルダー:

/Library/Application Support/Native Instruments/Kontakt 8/

Windowsのファクトリーフォルダー:

C:\Program Files\Common Files\Native Instruments\Kontakt 8\

リソースコンテナから読み込むのではなく絶対パスでファイルを読み込みまたは保存する場合は、必ずパス変数をget_folder()と組み合わせて使用してください。

関連項目

on async_complete

一般$NI_ASYNC_ID$NI_ASYNC_EXIT_STATUS


get_folder()

get_folder(<path-variable>)

ビルトインのパス変数で指定されたパスを返します。

<path-variable>

使用できるパス変数は次のとおりです。

$GET_FOLDER_LIBRARY_DIR

Kontakt Playerでエンコードされたライブラリーに属するパッチで使用した場合:ライブラリーフォルダー。

エンコードされていないパッチで使用した場合:User Contentフォルダー。場所は次のとおりです。

macOS:/Users/<UserName>/Documents/Native Instruments/User Content/

Windows:C:\Users\<UserName>\Documents\Native Instruments\User Content\

$GET_FOLDER_FACTORY_DIR

Kontaktのファクトリーデータフォルダー。主にファクトリーのIRサンプルを読み込むために使用します。

注意:これはKontakt Factory Libraryのフォルダーではありません!

$GET_FOLDER_PATCH_DIR

パッチが保存されているフォルダー。

パッチがまだ保存されていない場合は、空の文字列が返されます。

$GET_FOLDER_RC_DIR

リソースコンテナが保存されているフォルダー。ライブラリー構造の中にある他のファイル(たとえばNKAファイルやMIDIファイル)を参照するときは、一般にこのパスを使用することが推奨されます。リソースコンテナまでのパスは、Kontakt Playerでエンコードされたライブラリーでもエンコードされていないパッチでも同じだからです。

Instrumentにリソースコンテナが設定されていない場合は、空の文字列が返されます。

補足

  • get_folder()を使えば、文字列に../を付け加えることで1つ上の階層(または複数階層上)にあるファイルを相対的に参照できます。

  • Kontaktで絶対ファイルパスを扱うときは、必ずスラッシュ(/)を使用してください。

on init
    message(get_folder($GET_FOLDER_FACTORY_DIR))
end on

Kontaktのファクトリーデータフォルダーのパスを表示します。

on init
    declare %data[5]
    load_array_str(%data, get_folder($GET_FOLDER_PATCH_DIR) & "../Data/my_data.nka")
end on

パッチフォルダーを基点として、絶対ファイルパスを使ってNKAファイルを読み込みます。この例では、パッチがライブラリーのメインフォルダーのサブフォルダーにあり、さらにライブラリーのメインフォルダーにDataという名前の別のフォルダーがあることを前提としています。

関連項目

load_ir_sample()

一般$GET_FOLDER_LIBRARY_DIR$GET_FOLDER_FACTORY_DIR$GET_FOLDER_PATCH_DIR


load_array()

load_array(<array-variable>, <mode>)

外部の.nkaファイルから配列を読み込みます。

<array-variable>

配列変数の名前。この名前は.nkaファイルの1行目に記載されている必要があります。

<mode>

0:ダイアログウィンドウが開き、読み込む.nkaファイルを選択できます。このモードはon persistence_changedon ui_controlon pgs_changedの各コールバックでのみ使用できます(非同期)。

1:配列はDataフォルダーから直接読み込まれます。

ユーザーInstrumentの場合、Dataフォルダーはリソースコンテナと同じ場所にあります。

Kontakt PlayerでエンコードされたライブラリーのInstrumentの場合、Dataフォルダーは次の場所にあります:

macOS:/Users/<UserName>/Library/Application Support/<LibraryName>/

Windows:C:\Users\<UserName>\AppData\Local\<LibraryName>\

このモードはon initコールバックで同期的に、on persistence_changedon ui_controlon pgs_changedの各コールバックで非同期的に使用できます。

2:配列はリソースコンテナ内のdataフォルダーから直接読み込まれます。

このモードはon initコールバックで同期的に、on persistence_changedon ui_controlon pgs_changedの各コールバックで非同期的に使用できます。

補足

  • .nkaファイルからは実数配列や文字列配列を読み込むこともできます。

  • .nkaファイル内の%xyzという名前の配列を配列%abcに読み込むことはできません。変数名は正確に一致している必要があります。

  • load_array()コマンドは非同期で動作するため、コマンドの実行直後に配列データが利用できるわけではありません。値が即座に利用できるのは、on initコールバックの中でモード1またはモード2を使用した場合だけです。

  • モード0を使用した場合、読み込みダイアログが開いたままでもコールバックは続行されます。

  • on initコールバックの中で配列を読み込む場合、その配列は暗黙のうちに永続化される(make_persistent()コマンドを使用したのと同じ状態になる)ため、読み込まれたデータがコールバックの終わりに上書きされる点に注意してください。この問題を避けるには、配列を読み込む前にread_persistent_var()を使用してください。

  • リソースコンテナから読み込む.nkaファイルは、ファイルの末尾に必ず改行文字を入れてください。この最後の改行が無いと、Kontaktはファイルが終わったことを判断できず、リソースコンテナから他のデータを読み込もうとし続けます。save_array()コマンドで生成されたファイルには自動的に改行が入りますが、別の方法でNKAファイルを作成する場合は注意が必要です。

on init
    declare $count
    declare $load_arr_id := -1
    declare $save_arr_id := -1
    declare %preset[8]

    declare ui_button $Load
    declare ui_button $Save
    declare ui_table %table[8] (2,2,100)

    make_persistent(%table)
end on

on ui_control (%table)
    $count := 0
    while ($count < 8)
        %preset[$count] := %table[$count]

        inc($count)
    end while
end on

on ui_control ($Load)
    $load_arr_id := load_array(%preset, 0)
end on

on ui_control ($Save)
    $save_arr_id := save_array(%preset, 0)
end on

on async_complete
    if ($NI_ASYNC_ID = $load_arr_id)
        $load_arr_id := -1
        $Load := 0

        if ($NI_ASYNC_EXIT_STATUS = 1)
            $count := 0
            while($count < 8)
                %table[$count] := %preset[$count]

                inc($count)
            end while
        end if
    end if

    if ($NI_ASYNC_ID = $save_arr_id)
        $save_arr_id := -1
        $Save := 0
    end if
end on

ui_tableウィジェットの内容を書き出して読み込みます。

関連項目

on async_complete

save_array()

一般$NI_ASYNC_ID$NI_ASYNC_EXIT_STATUS


load_array_str()

load_array_str(<array-variable>, <path>)

ファイルへの絶対パスを使って、外部の.nkaファイルから配列を読み込みます。

<array-variable>

配列変数の名前。これは.nkaファイルの1行目に記載されている必要があります。

<path>

.nkaファイルの絶対パス。

補足

  • 動作はモードを0に設定したload_array()と似ていますが、.nkaファイルを手動で選択する代わりに絶対パスで指定できます。

  • このコマンドはon initコールバックで同期的に、on persistence_changedon ui_controlon pgs_changedの各コールバックで非同期的に使用できます。

  • load_array_str()には、load_array()のような暗黙の永続化の動作はありません。

  • Kontaktで絶対ファイルパスを扱うときは、必ずスラッシュ(/)を使用してください。

on init
    message("")
    set_ui_height(2)

    declare $count
    declare $load_arr_id := -1
    declare %preset[8]
    declare @file_path
    declare @basepath_browser
    { set browser path here, for example:
    @basepath_browser := "/Users/<username>/Desktop/Arrays" }

    declare ui_file_selector $file_browser
    declare ui_table %table[8] (2, 2, 100)

    declare $browser_id
    $browser_id := get_ui_id($file_browser)

    set_control_par_str($browser_id, $CONTROL_PAR_BASEPATH, @basepath_browser)
    set_control_par($browser_id, $CONTROL_PAR_WIDTH, 112)
    set_control_par($browser_id, $CONTROL_PAR_HEIGHT, 68)
    set_control_par($browser_id, $CONTROL_PAR_COLUMN_WIDTH, 110)
    set_control_par($browser_id, $CONTROL_PAR_FILE_TYPE, $NI_FILE_TYPE_ARRAY)

    make_persistent(@file_path)
    make_persistent(%table)

    move_control_px($file_browser, 66, 2)
    move_control(%table, 3, 1)
end on

on async_complete
    if ($NI_ASYNC_ID = $load_arr_id)
        $load_arr_id := -1

        if ($NI_ASYNC_EXIT_STATUS = 0)
            message("Array not found!")
        else
            message("")

            $count := 0
            while ($count < num_elements(%preset))
                %table[$count] := %preset[$count]

                inc($count)
            end while
        end if
    end if
end on

on ui_control ($file_browser)
    @file_path := fs_get_filename($browser_id, 2)
    $load_arr_id := load_array_str(%preset, @file_path)
end on

ブラウザーを使ってさまざまなテーブルプリセットを読み込みます。まず、ファイルセレクターのブラウザーパスが、互換性のある.nkaファイルの入ったフォルダーを指すように設定してください。


load_ir_sample()

load_ir_sample(<path-or-filename>, <slot>, <generic>)

Kontaktのコンボリューションエフェクトにインパルスレスポンスサンプルを読み込みます。

<path-or-filename>

IRサンプルの絶対ファイルパス。

パスを指定しない場合、コマンドはリソースコンテナのir_samplesフォルダー内で指定されたサンプルを探します。

リソースコンテナが無い場合は、Kontaktユーザーフォルダー内のir_samplesフォルダーが検索されます。

Kontaktユーザーフォルダーは次の場所にあります:

macOS:/Users/<username>/Documents/Native Instruments/Kontakt 8/

Windows:C:\Users\<username>\Documents\Native Instruments\Kontakt 8\

<slot>

コンボリューションエフェクトのスロットインデックス(0始まり)。

<generic>

コンボリューションエフェクトをどのように使用するかを指定します:

$NI_SEND_BUS:Sendエフェクト

$NI_INSERT_BUS:Insertエフェクト

$NI_MAIN_BUS:Mainエフェクト

バスの場合、このパラメーターは実際のバスを指定します:

$NI_BUS_OFFSET + [0 ... 15]:16本のバスのいずれか

補足

  • リソースコンテナのir_samplesフォルダー内のサブフォルダーはスキャンされないので注意してください。テキスト文字列で手動で追加することも推奨されません。リソースコンテナのMonolithを作成するときにサブフォルダーは無視されるため、問題につながる可能性があります。

  • リソースコンテナからインパルスレスポンスサンプルを読み込む場合、ファイル拡張子を含める必要はありません。

  • Kontaktで絶対ファイルパスを扱うときは、必ずスラッシュ(/)を使用してください。

on init
    declare $load_ir_id := -1
    declare ui_button $Load
end on

on ui_control ($Load)
    $load_ir_id := load_ir_sample("Small Ambience.wav", 0, $NI_SEND_BUS)
    $Load := 0
end on

on async_complete
    if ($NI_ASYNC_ID = $load_ir_id)
        $load_ir_id := -1

        if ($NI_ASYNC_EXIT_STATUS = 0)
            message("IR sample not found!")
        else
            message("IR sample loaded!")
        end if
    end if
end on

Sendエフェクトチェーンの最初のスロットに配置したコンボリューションリバーブにIRサンプルを読み込みます。

関連項目

get_folder()

on async_complete

一般$NI_ASYNC_ID


save_array()

save_array(<array-variable>, <mode>)

配列を外部の.nkaファイルに保存します。

<array-variable>

保存する配列変数の名前です。

<mode>

0:ダイアログウィンドウが開き、.nkaファイルを保存できます。このモードはon persistence_changedon ui_controlon pgs_changedの各コールバックでのみ使用できます。

1:配列はDataフォルダーに直接保存されます。

ユーザーInstrumentの場合、Dataフォルダーはリソースコンテナと同じ場所にあります。

Kontakt PlayerでエンコードされたライブラリーのInstrumentの場合、Dataフォルダーは次の場所にあります:

macOS:/Users/<UserName>/Library/Application Support/<LibraryName>/

Windows:C:\Users\<UserName>\AppData\Local\<LibraryName>\

このモードはon initコールバックで同期的に、on persistence_changedon ui_controlon pgs_changedの各コールバックで非同期的に使用できます。

補足

  • 実数配列や文字列配列を.nkaファイルに保存することもできます。

  • 書き出された.nkaファイルは、配列の名前に続いてそのすべての値が1行に1つずつ並んだ形になります。

  • モード0を使用した場合、読み込みダイアログが開いたままでもコールバックは続行されます。

関連項目

on async_complete

load_array()

一般$NI_ASYNC_ID$NI_ASYNC_EXIT_STATUS


save_array_str()

save_array_str(<array-variable>, <path>)

指定した絶対パスで外部の.nkaファイルに配列を保存します。

<array-variable>

保存する配列変数の名前です。

<path>

保存する.nkaファイルの絶対パス。

補足

  • 動作はsave_array()と似ていますが、保存場所を手動で選択する代わりに、指定した場所へ直接ファイルを保存できます。

  • ファイルが存在せずフォルダーだけが存在する場合は、新しい.nkaファイルが作成されます。

  • このコマンドはon initコールバックで同期的に、on persistence_changedon ui_controlon pgs_changedの各コールバックで非同期的に使用できます。

  • Kontaktで絶対ファイルパスを扱うときは、必ずスラッシュ(/)を使用してください。

on init
    message("")
    set_ui_height(2)

    declare $count
    declare $save_arr_id := -1
    declare %preset[8]
    declare @path
    { set save path here, for example:
    @path := "/Users/<username>/Desktop/Arrays/" }

    declare ui_button $Save
    declare ui_label $pattern_lbl (1, 1)
    declare ui_text_edit @preset_name
    declare ui_table %table[8] (2, 2, 100)

    make_persistent(%table)
    make_persistent(@preset_name)

    set_control_par(get_ui_id(@preset_name), $CONTROL_PAR_FONT_TYPE, 10)

    move_control_px(@preset_name, 73 + (3 * 92), 2)
    move_control_px($pattern_lbl, 66 + (3 * 92), 2)

    set_control_par_str(get_ui_id(@preset_name), $CONTROL_PAR_TEXT, "<empty>")
    set_text($pattern_lbl, "")
end on

on ui_control (%table)
    $count := 0
    while ($count < num_elements(%preset))
        %preset[$count] := %table[$count]

        inc($count)
    end while
end on

on ui_control ($Save)
    $save_arr_id := save_array_str(%preset, @path & @preset_name & ".nka")
end on

on async_complete
    if ($NI_ASYNC_ID = $save_arr_id)
        $save_arr_id := -1
        $Save := 0
    end if
end on

テーブルプリセットに好きな名前を付けて保存します。.nkaファイルを保存するパスを必ず設定してください。

関連項目

save_array()

load_array_str()


save_midi_file()

save_midi_file(<path>)

mf_set_export_area()コマンドで指定した範囲のMIDIファイルを保存します。

<path>

保存するMIDIファイルの絶対パス。

補足

  • Kontaktで絶対ファイルパスを扱うときは、必ずスラッシュ(/)を使用してください。

on init
    message("")

    declare $save_mf_id := -1
    declare @path
    { set save path here, for example
    @path := "/Users/<username>/Desktop/MIDI Files/" }

    declare ui_text_edit @file_name
    declare ui_label $file_name_lbl (1, 1)
    declare ui_button $Save

    make_persistent(@file_name)

    set_control_par(get_ui_id(@file_name), $CONTROL_PAR_FONT_TYPE, 10)
    set_control_par_str(get_ui_id(@file_name), $CONTROL_PAR_TEXT, "<empty>")

    set_text($file_name_lbl, "")

    move_control($Save, 2, 1)
    move_control_px(@file_name, 73, 2)
    move_control_px($file_name_lbl, 66, 2)
end on

on ui_control ($Save)
    $save_mf_id := save_midi_file(@path & @file_name & ".mid")
end on

on async_complete
    if ($NI_ASYNC_ID = $save_mf_id)
        $save_mf_id := -1
        $Save := 0
    end if
end on

MIDIファイルを保存します。

関連項目

mf_insert_file()

mf_set_export_area()


参照元情報:Load/Save Commands
https://docs.native-instruments.com/online-guides/ksp-manual/en/load-save-commands