Creator Toolsマニュアル 4 - バインディングリファレンス(Binding Reference)

Creator Toolsマニュアル 4 - バインディングリファレンス(Binding Reference)


Type

すべてのオブジェクト型の基底となる型です。派生したすべての型のオブジェクトには、次のアクセサーが定義されています。

演算子
tostring オブジェクトを説明する文字列表現を返します。
プロパティ
object.typeinfo 型情報を Type‘Tag という形式の文字列で返します。
object.parent 親オブジェクト、または nil を返します。
関数
object:equals(other) object の値が other の値と等しい場合に true を返します。
object:instanceOf(type) object が type のインスタンスである場合に true を返します。つまり object.type == type です。
object:instanceOf(name) object が name という名前の型のインスタンスである場合に true を返します。つまり object.type.name = name です。
object:childOf(other) object が other の直接の子である場合に true を返します。つまり object.parent == other です。
object:childOf(type) object が type の型を持つオブジェクトの直接の子である場合に true を返します。つまり object.parent and object.parent.type == type です。
object:childOf(name) object が name という名前の型を持つオブジェクトの直接の子である場合に true を返します。つまり object.parent and object.parent.type.name == name です。

Scalars

単一の値を保持する基本型です。

Bool ブール値、true または false
Int 64ビット符号付き整数(負の値も扱えます)
Real 64ビット浮動小数点数
String テキスト

これらの型のスカラーオブジェクトには、次のアクセサーが定義されています。

プロパティ
scalar.type 値の型を返します。
scalar.initial 値が初期状態である場合に true を返します。
scalar.value 値を返します。
関数
scalar:reset() 値を初期状態にリセットします。
scalar:assign(other) other の値オブジェクトのコピーを代入します。

Vector

型安全で、サイズが動的に変わり、インデックスが0から始まる、ランダムアクセス可能なコンテナです。

vector オブジェクトには、次のアクセサーが定義されています。

コンストラクター
vector() 新しい vector を返します。
vector(other) other の vector のコピーを返します。
vector(size) size 個の要素を持つ新しい vector を返します。
vector(args) 可変長引数 args で初期化した新しい vector を返します。
演算子
# 要素数、つまり vector のサイズを返します。
pairs すべての要素を反復処理するためのイテレーター関数を返します。
value/object = vector[index] vector の型がスカラーの場合は値を返し、それ以外の場合はオブジェクトを返します。
vector[index] = value index の位置に値を設定します。
vector[index] = object index に object を代入します。
プロパティ
vector.type vector の型を返します。
vector.empty vector に要素が無い場合に true を返します。
vector.initial vector が初期状態である場合に true を返します。
関数
vector:set(index, object) index の要素を object に設定します。
vector:get(index) index にあるオブジェクトを返します。
vector:reset() vector を初期状態にリセットします。
vector:resize(size) vector のサイズを size 個の要素に変更します。
vector:resolve(path) path のオブジェクト、または nil を返します。
vector:assign(other) other の vector のコピーを代入します。
vector:add(object) 末尾に object を挿入します。
vector:add(value) 末尾に値を挿入します。
vector:insert(index, object) index の直前に object を挿入します。
vector:insert(index, value) index の直前に値を挿入します。
vector:remove(index) index にある要素を削除します。

Struct

名前付きフィールドを持つ型安全なレコードです。

struct オブジェクトには、次のアクセサーが定義されています。

コンストラクター
struct() 新しい struct を返します。
struct(other) other の struct のコピーを返します。
演算子
# 使用されているフィールドの数を返します。
pairs 使用されているフィールドを反復処理するためのイテレーター関数を返します。
value/object = struct.field field がスカラーを保持している場合は値を返し、それ以外の場合はオブジェクトを返します。
struct.field = value field の要素の値を設定します。
struct.field = object field に object を代入します。
プロパティ
Struct.type struct の型を返します。
struct.empty struct に使用されているフィールドが無い場合に true を返します。
struct.initial struct が初期状態である場合に true を返します。
関数
struct:set(index, object) index に object を代入します。
struct:get(index) index にあるオブジェクトを返します。
struct:reset() struct を初期状態にリセットします。
struct:reset(index) index のフィールドをリセットします。
struct:reset(field) field をリセットします。
struct:used(field) field が使用されている場合に true を返します。
struct:resolve(path) path のオブジェクトを返します。
struct:assign(other) other の struct のコピーを代入します。

アルゴリズム

次に挙げるのは、任意の Type に対して動作するフリー関数です。

path(object) object へのパスを返します。
resolve(path) path のオブジェクト、または nil を返します。
traverse(object, function(key, object, [level])) object を再帰的にたどり、function を呼び出します。key は、親の中でのそのオブジェクトのインデックスまたはフィールド名です。
string = json(object, [indent]) オブジェクトを json 文字列に変換して返します。
object = json(type, string) 文字列を type のオブジェクトに変換して返します。

ファイルシステム

Luaのバインディングは、C++のライブラリである boost filesystem をベースにしています。元のC++の設計とは異なり、Luaのバインディングは path の抽象化を定義していません。その代わり、path は常にLuaの文字列を指します。

以下の章では、前述のライブラリの関数と、それぞれが返すデータ型を一覧します。各関数の詳しい説明については、リファレンスドキュメントを参照してください。

for _,p in filesystem.directory(path) do
    print(p)
end

ディレクトリ内のパスを一覧します。

for _,p in filesystem.directoryRecursive(path) do
    print(p)
end

ディレクトリとすべてのサブディレクトリ内のパスを一覧します。

関数

すべての関数はグローバルの filesystem に属していることに注意してください。

イテレーター
関数 返されるデータ型
filesystem.directory(path) iterator
filesystem.directoryRecursive(path) iterator
パス
これらの関数は、変更後のパスを含む文字列を返します。
filesystem.native(path) string
filesystem.rootName(path) string
filesystem.rootDirectory(path) string
filesystem.rootPath(path) string
filesystem.relativePath(path) string
filesystem.parentPath(path) string
filesystem.filename(path) string
filesystem.stem(path) string
filesystem.replaceExtension(path, newExtension) string
filesystem.extension(path) string
filesystem.preferred(path) string
クエリー
これらの関数は、指定したパスを調べます。
filesystem.empty(path) bool
filesystem.isDot(path) bool
filesystem.isDotDot(path) bool
filesystem.hasRootPath(path) bool
filesystem.hasRootName(path) bool
filesystem.hasRootDirectory(path) bool
filesystem.hasRelativePath(path) bool
filesystem.hasParentPath(path) bool
filesystem.hasFilename(path) bool
filesystem.hasStem(path) bool
filesystem.hasExtension(path) bool
filesystem.isAbsolute(path) bool
filesystem.isRelative(path) bool
操作
これらの関数では、実際のファイルシステムに対して問い合わせを行えます。
パス
filesystem.exists(path) bool
filesystem.equivalent(path1, path2) bool
filesystem.fileSize(path) int
filesystem.currentPath() string
filesystem.initialPath() string
filesystem.absolute(path, [base]) string
filesystem.canonical(path, [base]) string
filesystem.systemComplete(path) string
テスト
filesystem.isDirectory(path) bool
filesystem.isEmpty(path) bool
filesystem.isRegularFile(path) bool
filesystem.isSymLink(path) bool
filesystem.isOther(path) bool
最終書き込み時刻
filesystem.lastWriteTime(path) int
リンク
filesystem.readSymLink(path) string
filesystem.hardLinkCount(path) int

利便性のため、fs = filesystem と宣言して、すべての filesystem の関数を fs という接頭辞で呼び出すこともできます。次の例のとおりです。

fs = filesystem
iterator fs.directory(path)
iterator fs.directoryRecursive(path)

PosixTime

日付と時刻に関するユーティリティ関数です。

関数
string posixTime.toString(int) posix-time をISO形式の文字列に変換します。
ℹ️

すべての関数はグローバルのテーブル posixTime に属していることに注意してください。

print(posixTime.toString(filesystem.lastWriteTime(...)))

filesystem の lastWriteTime を文字列に変換します。


MIR関数

Music Information Retrieval(MIR)は、音楽から情報を取り出す学問分野です。とりわけ、サンプルのピッチやベロシティといった、意味のある特徴をオーディオファイルから抽出することができます。Creator Tools には、インストゥルメント制作の工程の一部を補助または自動化するための MIR関数が一式用意されています。

単体の関数は単一のファイルから情報を取得し、引数として絶対ファイル名(サンプルファイルへのフルパス)を取ります。バッチ処理の関数はフォルダーから情報を取得し、引数として絶対フォルダー名(サンプルフォルダーへのフルパス)を取ります。

ℹ️

すべての関数はグローバルの MIR テーブルに属していることに注意してください。


ピッチ検出

ピッチ検出は、モノフォニックまたは単音のサンプルの基本周波数を検出しようとします。これはMIDIスケール(69 = 440 Hz)に対応し、半音15(約20Hz)から半音120(約8.4 kHz)までの範囲を扱います。

関数
mir.detectPitch('fullPathToSample') 'fullPathToSample' の絶対ファイルパスで指定したオーディオサンプルの、MIDIピッチ値に対応する浮動小数点数を返します。検出に失敗した場合は kDetectPitchInvalid を返します。
mir.detectPitchBatch('fullPathToFolder') samplePath をテーブルのキーとし、検出されたピッチに対応する浮動小数点数を値とするLuaのテーブルを返します。検出に失敗した場合は kDetectPitchInvalid を返します
pitchVal = mir.detectPitch('fullPathToSample')

'fullPathToSample' のファイルパスにあるサンプルのピッチを pitchVal に設定します。

pitchBatchData = mir.detectPitchBatch('fullPathToFolder')
pitchValue = pitchBatchData['fullPathToSample']

'fullPathToFolder' ディレクトリ内のサンプルのピッチを検出し、Luaのテーブル pitchBatchData に格納します。続いてキー 'fullPathToSample' を使って pitchBatchData にアクセスし、得られた値を pitchValue に格納します


ピーク、RMS、ラウドネスの検出

Loudness、Peak、RMS の各関数は、最大値を0dBとするdB単位の値を返します。

RMS と Loudness の関数は、オーディオの小さなブロック単位で計算されます。それらのブロックの長さは frame size と呼ばれ、秒単位で表されます。この処理は hop size(こちらも秒単位で表されます)と同じ間隔で、サンプルの終端に達するまで繰り返されます。これらの関数は、それぞれのブロックの中で最も大きい、あるいは最も高い値を全体の結果として返します。

frame size と hop size を指定しなかった場合は、それぞれデフォルト値の0.4(frame size、秒単位)と0.1(hop size、秒単位)が適用されます。

Loudness、Peak、RMS の検出が失敗した場合は、定数 kDetectLoudnessInvalid、kDetectPeakInvalid、kDetectRMSInvalid が返され、これらはいずれも 1000000.0f として解決されます。Peak、RMS、Loudness の値をログに出力する際、無効な検出結果は数値の形でログに記録されます。

ℹ️

数値が変わらないことは保証されていないため、スクリプト内ではそれぞれの <k-type-invald> 定数と比較することをおすすめします。

関数
ピーク検出
mir.detectPeak('fullPathToSample') 'fullPathToSample' の絶対ファイルパスにあるオーディオサンプルの、dB単位のPeak値に対応する浮動小数点数を返します。検出に失敗した場合は定数 kDetectPeakInvalid が返されます。
mir.detectPeakBatch('fullPathToFolder') samplePath をテーブルのキーとし、'fullPathToFolder' ディレクトリ内のすべてのサンプルについて、dB単位のピーク値に対応する浮動小数点数を値とするLuaのテーブルを返します。検出に失敗した場合は定数 kDetectPeakInvalid が返されます
RMS検出
mir.detectRMS('fullPathToSample',frameSizeInSeconds, hopSizeInSeconds) 'fullPathToSample' の絶対ファイルパスにあるオーディオサンプルの、dB単位のRMS値に対応する浮動小数点数を返します。frame size と hop size は省略可能な引数で、指定しない場合はそれぞれ0.4と0.1がデフォルトとして使われます。検出に失敗した場合は定数 kDetectRMSInvalid が返されます。
mir.detectRMSBatch(‘fullPathToFolder’, frameSizeInSeconds, hopSizeInSeconds) samplePath をテーブルのキーとし、'fullPathToFolder' ディレクトリ内のすべてのサンプルについて、dB単位のRMS値に対応する浮動小数点数を値とするLuaのテーブルを返します。frame size と hop size は省略可能な引数で、指定しない場合はそれぞれ0.4と0.1がデフォルトとして使われます。検出に失敗した場合は定数 kDetectRMSInvalid が返されます。
ラウドネス検出
mir.detectLoudness('fullPathToSample', frameSizeInSeconds, hopSizeInSeconds) 'fullPathToSample' の絶対ファイルパスにあるオーディオサンプルの、dB単位のLoudness値に対応する浮動小数点数を返します。frame size と hop size は省略可能な引数で、指定しない場合はそれぞれ0.4と0.1がデフォルトとして使われます。検出に失敗した場合は定数 kDetectLoudnessInvalid が返されます。
mir.detectLoudnessBatch(‘fullPathToFolder’, frameSizeInSeconds, hopSizeInSeconds) samplePath をテーブルのキーとし、'fullPathToFolder' ディレクトリ内のすべてのサンプルについて、dB単位のLoudness値に対応する浮動小数点数を値とするLuaのテーブルを返します。frame size と hop size は省略可能な引数で、指定しない場合はそれぞれ0.4と0.1がデフォルトとして使われます。検出に失敗した場合は定数 kDetectLoudnessInvalid が返されます。
 
peakVal = mir.detectPeak('fullPathToSample')

'fullPathToSample' の絶対ファイルパスにあるオーディオサンプルを解析し、得られたPeak値を peakVal に格納します。

rmsBatchData = mir.detectRMSBatch(‘fullPathToFolder', 0.02, 0.01)

'fullPathToFolder' ディレクトリ内のすべてのオーディオサンプルを解析し、得られたRMS値をLuaのテーブル rmsBatchData に格納します。この計算では、Frame size と Hop size をそれぞれ0.02と0.01に指定しています。


タイプ検出

タイプ検出は、あるオーディオサンプルがどのカテゴリーに属するかを判定する手段です。現在 Creator Tools は、Sample Type、Drum Type、Instrument Type という3つの異なるタイプの検出に対応しています。Sample Type は、サンプルがドラムなのかインストゥルメントなのかを判定するために使われます。Drum Type と Instrument Type はどちらも、サンプルがどのドラムまたはインストゥルメントのカテゴリーに属するかを判定します。それぞれのタイプには、デフォルトの初期化に使う補助として INVALID カテゴリーが定義されています。

さらに、Sample Type、Drum Type、Instrument Type の検出が失敗した場合は、それぞれの INVALID タイプが返され、これらはいずれも -1 として解決されます。Sample Type、Drum Type、Instrument Type の値をログに出力する際、無効な検出結果は数値の形でログに記録されます。ただし、数値が変わらないことは保証されていないため、スクリプト内ではそれぞれの <type.INVALID> 定数と比較することをおすすめします。

ℹ️

これらのタイプ検出の関数は、ワンショットのオーディオサンプルを処理することを想定して設計されていることに注意してください。

関数
サンプルタイプの検出
mir.detectSampleType('fullPathToSample')

'fullPathToSample' の絶対ファイルパスにあるオーディオサンプルのサンプルタイプを返します。返される値は次のいずれかです。

DetectSampleType.INVALID

DetectSampleType.INSTRUMENT

DetectSampleType.DRUM

mir.detectSampleTypeBatch(‘fullPathToFolder’) 'fullPathToFolder' の絶対パスで指定したフォルダー内のオーディオサンプルをバッチ処理します。samplePath をキーとし、対応するサンプルタイプを値とするLuaのテーブルを返します。返されるタイプは、上記の単体の関数呼び出しと同じです。
ドラムタイプの検出
mir.detectDrumType('fullPathToSample')

'fullPathToSample' の絶対ファイルパスにあるオーディオサンプルのドラムタイプを返します。返される値は次のいずれかです。

DetectDrumType.INVALID

DetectDrumType.KICK

DetectDrumType.SNARE

DetectDrumType.CLOSED_HH

DetectDrumType.OPEN_HH

DetectDrumType.TOM

DetectDrumType.CYMBAL

DetectDrumType.CLAP

DetectDrumType.SHAKER

DetectDrumType.PERC_DRUM

DetectDrumType.OTHER

mir.detectDrumTypeBatch(‘fullPathToFolder’) 'fullPathToFolder' の絶対パスで指定したフォルダー内のオーディオサンプルをバッチ処理します。samplePath をキーとし、対応するドラムタイプを値とするLuaのテーブルを返します。返されるタイプは、上記の単体の関数呼び出しと同じです。
インストゥルメントタイプの検出
mir.detectInstrumentType('fullPathToSample')

'fullPathToSample' の絶対ファイルパスにあるオーディオサンプルのインストゥルメントタイプを返します。返される値は次のいずれかです。

DetectInstrumentType.INVALID

DetectInstrumentType.BASS

DetectInstrumentType.BOWED_STRING

DetectInstrumentType.BRASS

DetectInstrumentType.FLUTE

DetectInstrumentType.GUITAR

DetectInstrumentType.KEYBOARD

DetectInstrumentType.MALLET

DetectInstrumentType.ORGAN

DetectInstrumentType.PLUCKED_STRING

DetectInstrumentType.REED

DetectInstrumentType.SYNTH

DetectInstrumentType.VOCAL

mir.detectInstrumentTypeBatch(‘fullPathToFolder’) 'fullPathToFolder' の絶対パスで指定したフォルダー内のオーディオサンプルをバッチ処理します。samplePath をキーとし、対応するインストゥルメントタイプを値とするLuaのテーブルを返します。返されるタイプは、上記の単体の関数呼び出しと同じです。
sampleType = mir.detectSampleType('fullPathToSample')

'fullPathToSample' の絶対ファイルパスにあるオーディオサンプルを解析し、得られたサンプルタイプのカテゴリーを sampleType に格納します。

drumType = mir.detectDrumType('fullPathToSample')

'fullPathToSample' の絶対ファイルパスにあるオーディオサンプルを解析し、得られたドラムタイプのカテゴリーを drumType に格納します。

instType = mir.detectInstrumentType('fullPathToSample')

'fullPathToSample' の絶対ファイルパスにあるオーディオサンプルを解析し、得られたインストゥルメントタイプのカテゴリーを instType に格納します。

sampleTypeBatchData = mir.detectSampleTypeBatch(‘fullPathToFolder’)

'fullPathToFolder' ディレクトリ内のオーディオサンプルを解析し、得られたサンプルタイプをLuaのテーブル sampleTypeBatchData に格納します。


ループ検出

新しい findLoop() というMIR関数は、サンプルのループポイントを解析して提案します。この関数はループ開始とループ終了の2つの変数を返し、それらを使って対象の zone のループポイントを設定できます。

この関数の完全な構文は findLoop(filePath, minStart, maxEnd, minLength) です。パス以外の引数はすべて省略可能です。パスだけを指定した場合、残りの引数はアルゴリズムによって算出されます。

💡

Creator Tools の既存のMIR関数を使って、さまざまなサンプルの特徴に応じて findLoop() の挙動を変えることもできます。

local loop_start, loop_end = mir.findLoop(file)
local loop_length = loop_end - loop_start
z.loops[0].start = loop_start
z.loops[0].length = loop_length

参照元情報:Binding Reference
https://docs.native-instruments.com/online-guides/creator-tools-manual/en/binding-reference