---
url: /lua.md
description: AviUtl ExEdit2のLuaスクリプトについて説明しています。
---

# Luaスクリプト

## Luaスクリプトについて

スクリプト制御、スクリプトファイル（\*.anm2,\*.obj2,\*.cam2,\*.scn2,\*.tra2）、テキストのスクリプト制御文字で利用可能なスクリプトにはLua言語が使用出来ます。
また幾つかの変数と関数が拡張されています。
※旧スクリプトファイル（\*.anm,\*.obj,\*.cam,\*.scn,\*.tra）も利用できますが、一部の機能が非対応となっています。

## 注意点

* スクリプトの文字コードはUTF-8になります。※旧スクリプトファイルはSJISです。
* スクリプトの配置場所はProgramData\aviutl2\Script\フォルダ（及び一つ下のフォルダ）になります。
* スクリプトからスクリプトを呼び出した場合は上手く動作しない場合があります。
* 「キャッシュを破棄」の操作でスクリプト（シェーダー含む）が再読み込みされますが、設定項目の変更は反映されません。
* 旧スクリプトファイル形式と一部仕様が異なる場合があります。※pixel入出力系の引数等
* スクリプト制御ではtable,string,mathライブラリのみ利用出来ます。os,debug,ffi.Cは共通で外しています。

## 設定項目

スクリプトファイルの先頭で以下を指定することで設定項目が追加出来ます。
※項目名を`yyy::xxx`のように指定すると最後の`::`以降の`xxx`の部分のみ設定画面で表示される形に出来ます。

### トラックバー項目を定義

スクリプトファイルの先頭で`--track@変数名:項目名,最小値,最大値,デフォルト値,移動単位,ゼロ値名称,操作倍率`のように指定するとトラックバーが有効になります。
移動単位、ゼロ値名称、操作倍率は省略できます。
移動単位は設定値の最小単位で`1`、`0.1`、`0.01`、`0.001`を指定できます。
※0.000000001まで指定出来ますが最大最小値の範囲に応じて調整されます。（内部は32bit整数で保持されます）
ゼロ値名称は設定値が0の時にトラックバーに表示する文字列を指定できます。
操作倍率は設定値の範囲に対してのトラックバー操作範囲の倍率で1.0以下を指定できます。
※旧スクリプトファイル形式の`--track0:項目名,最小値,最大値,デフォルト値,移動単位`も利用できます。（互換対応）

```aulua
--track@vx:X速度,-10,10,0
obj.ox = obj.ox + vx * obj.time
```

### トラックバー項目のグループを定義

スクリプトファイルの先頭で`--trackgroup@変数名1,変数名2,変数名3:項目名`のように指定するとトラックバー項目のグループ化が有効になります。
変数名には先に定義されているトラックバー項目の変数名を2か3項目列挙します。
※項目名は表示されませんが保存データのキー名として利用されます。

```aulua
--track@x:X座標,-100000,100000,0
--track@y:Y座標,-100000,100000,0
--track@z:Z座標,-100000,100000,0
--trackgroup@x,y,z:Group
```

### チェックボックス項目を定義

スクリプトファイルの先頭で`--check@変数名:項目名,デフォルト値（0か1またはtrueかfalse）`のように指定するとチェックボックスが有効になります。
デフォルト値が`0`か`1`の場合は変数がnumber型（`0`/`1`）になります。
デフォルト値が`true`か`false`の場合は変数がboolean型（`true`/`false`）になります。
※旧スクリプトファイル形式の`--check0:項目名,デフォルト値（0か1）`も利用できます。（変数はboolean型）（互換対応）
スクリプトファイルの先頭で`--checksection@変数名:項目名,デフォルト値（trueかfalse）,セクション毎設定の初期値（trueかfalse）`のように指定するとセクション毎のチェックボックスが有効になります。

```aulua noformat
--check@grav:重力,0
--check@speed:速度,false
if grav == 1 then ...
if speed then ...
```

### 色設定項目を定義

スクリプトファイルの先頭で`--color@変数名:項目名,デフォルト値`のように指定すると色設定項目が有効になります。
デフォルト値にnilを指定すると透明色の選択が出来るようになります。
※旧スクリプトファイル形式の`--color:デフォルト値`も利用できます。（互換対応）

```aulua
--color@col:図形色,0xffffff
obj.load("figure", "四角形", col, 100)
```

### ファイル選択項目を定義

スクリプトファイルの先頭で`--file@変数名:項目名`のように指定するとファイル選択項目が有効になります。
※旧スクリプトファイル形式の`--file:`も利用できます。（互換対応）

```aulua
--file@path:画像ファイル
obj.load("image", path)
```

### フォルダ選択項目を定義

スクリプトファイルの先頭で`--folder@変数名:項目名`のように指定すると
フォルダ選択項目が有効になります。

```aulua
--folder@path:フォルダ
```

### フォント設定項目を定義

スクリプトファイルの先頭で`--font@変数名:項目名,デフォルト値`のように指定するとフォント設定項目が有効になります。

```aulua
--font@font:フォント名,MS UI Gothic
obj.setfont(font, 50, deco, col1, col2)
```

### 図形設定項目を定義

スクリプトファイルの先頭で`--figure@変数名:項目名,デフォルト値`のように指定すると図形設定項目が有効になります。

```aulua
--figure@fig:先端図形,三角形
obj.load("figure", fig, col, 100)
```

### リスト選択項目を定義

スクリプトファイルの先頭で`--select@変数名:項目名=デフォルト値,選択肢=値,選択肢=値,選択肢=値`のように指定するとリスト選択項目が有効になります。デフォルト値は省略できます。

```aulua
--select@deco:装飾タイプ,標準文字=0,影付き文字=1,影付き文字（薄）=2,縁取り文字=3,縁取り文字（細）=4,縁取り文字（太）=5,縁取り文字（角）=6
obj.setfont(font, obj.track2, deco, col1, col2)
```

### テキスト設定項目を定義

スクリプトファイルの先頭で`--text@変数名:項目名,デフォルト値`のように指定するとテキスト設定項目が有効になります。
`--string@変数名:項目名,デフォルト値`のように指定すると1行のテキスト設定項目が定義できます。

```aulua
--text@txt:テキスト,デフォルト文字\n次の行
--string@str:文字列,デフォルト文字
obj.load("text", txt)
```

### 変数項目を定義

スクリプトファイルの先頭で`--value@変数名:項目名,デフォルト値`のように指定すると変数項目が有効になります。
変数項目はテキスト入力項目となり数値、文字列、配列を定義できます。
※デフォルト値の内容で種別が切り替わります。

```aulua
--value@num:数値,0
--value@text:文字列,"0"
--value@table:配列,{0,0,0}
```

### 汎用データ領域を定義

スクリプトファイルの先頭で`--data@登録名:サイズ(1024バイト以下)`のように指定すると汎用データ領域が有効になります。※スクリプトモジュールやDLL向けになります。
`obj.data("登録名")`で汎用データ領域のポインタ(ユーザーデータ)が取得できます。
デフォルト値はユーザーデータの領域を0クリアした値になります。
※保存済みの汎用データのサイズが異なる場合はデフォルト値に初期化されます。

```aulua
--data@pos:8
local pos = obj.data("pos")
```

### 設定グループを定義

スクリプトファイルの先頭で`--group:グループ名,デフォルト表示状態(true/false)`のように指定すると
以降の設定項目がグループ化されます。デフォルト表示状態は省略できます。
※`--group`（グループ名未指定）の指定でグループの終端を定義することが出来ます。

```aulua
--group:座標
```

### セパレーターを定義

スクリプトファイルの先頭で`--separator:セパレーター名`のように指定するとセパレーターを追加できます。

```aulua
--separator:中心座標
```

### オブジェクト追加メニューのラベルを定義

スクリプトファイルの先頭で`--label:ラベル名`のように指定するとオブジェクト追加メニューの階層のラベルの初期値を設定できます。

```aulua
--label:加工
```

### フィルタオブジェクト対応

スクリプトファイル（\*.anm2）の先頭で`--filter`のように指定するとフィルタオブジェクトに対応することが出来ます。
※`obj.getinfo("filter")`を利用してフィルタオブジェクト処理を分けることが出来ます。

フィルタオブジェクトではオブジェクトにフレームバッファの画像が入っています。
※フレームバッファのデータは不定です。一時バッファとして利用出来ます。

フィルタオブジェクトでは下記の制限があります。

* オブジェクトのサイズを変更しないこと ※終了時に変わっていなければ大丈夫
* オブジェクトの変数を変更しないこと ※終了時に変わっていなければ大丈夫
* `obj.draw()`以降のフィルタが継続する
* 引数無しの`obj.effect()`は処理されない

※その他もあると思います。。

### スクリプト種別を指定

スクリプトファイルの先頭で`--script:種別`のように指定するとスクリプトの種別（luaJIT,lua）を指定できます。
未指定の場合はluaJITになります。※旧スクリプトファイルではluaになります

```aulua
--script:lua
```

### スクリプトの情報を指定

スクリプトファイルの先頭で`--information:ラベル名`のように指定するとスクリプトの情報を設定できます。

```aulua
--information:テストスクリプト ver2.00 by Kenkun
```

### スクリプトが必要な本体のバージョン番号を指定

スクリプトファイルの先頭で`--require:必要な本体のバージョン番号`のように指定すると
スクリプトが必要な本体のバージョンを設定できます。

```aulua
--require:2003500
```

### ピクセルシェーダーを定義

スクリプトファイルの先頭で`--[[pixelshader@登録名:`のような複数行コメントにピクセルシェーダーをHLSLで記述できます。
※登録名がエントリーポイントになります。
ピクセルシェーダーの入力は下記が利用できます。

```hlsl
float4 psmain(float4 pos : SV_Position) : SV_Target
```

```hlsl
float4 psmain(float4 pos : SV_Position, float2 uv : TEXCOORD) : SV_Target
```

※シェーダーリフレクションを利用してシグネチャから判別しています。
※uvは描画範囲が0.0～1.0になるように設定されます。

```aulua
--[[pixelshader@psmain:
    float4 psmain(float4 pos: SV_Position): SV_Target {
        ...
    }
]]
```

### コンピュートシェーダーを定義

スクリプトファイルの先頭で`--[[computeshader@登録名:`のような複数行コメントにコンピュートシェーダーをHLSLで記述できます。
※登録名がエントリーポイントになります。

```aulua
--[[computeshader@csmain:
    [numthreads(1, 1, 1)]
    void csmain(uint2 id: SV_DispatchThreadID) {
        ...
    }
]]
```

### その他

※旧スクリプトファイル形式の`--dialog`、`--param`も利用できます。個々の設定項目が作成されます。（互換対応）

## 変数

対象オブジェクトの情報が以下の変数に入ります。

| 変数名                      | 説明                                                                                                           | ReadOnly |
| :-------------------------- | :------------------------------------------------------------------------------------------------------------- | -------- |
| `obj.ox`1        | 基準座標からの相対座標X                                                                                        |          |
| `obj.oy`1        | 基準座標からの相対座標Y                                                                                        |          |
| `obj.oz`1        | 基準座標からの相対座標Z                                                                                        |          |
| `obj.rx`1        | X軸回転角度（360.0で一回転）                                                                                   |          |
| `obj.ry`1        | Y軸回転角度（360.0で一回転）                                                                                   |          |
| `obj.rz`1        | Z軸回転角度（360.0で一回転）                                                                                   |          |
| `obj.cx`1        | 中心の相対座標X                                                                                                |          |
| `obj.cy`1        | 中心の相対座標Y                                                                                                |          |
| `obj.cz`1        | 中心の相対座標Z                                                                                                |          |
| `obj.sx`1        | X座標の拡大率（1.0=等倍）                                                                                      |          |
| `obj.sy`1        | Y座標の拡大率（1.0=等倍）                                                                                      |          |
| `obj.sz`1        | Z座標の拡大率（1.0=等倍）                                                                                      |          |
| `obj.zoom`1、2   | 拡大率（1.0=等倍）                                                                                             |          |
| `obj.aspect`1、2 | アスペクト比（-1.0～1.0/プラス=横縮小/マイナス縦縮小）                                                         |          |
| `obj.alpha`1     | 不透明度（0.0～1.0/0.0=透明/1.0=不透明）                                                                       |          |
| `obj.x`                     | 表示基準座標X                                                                                                  | ○        |
| `obj.y`                     | 表示基準座標Y                                                                                                  | ○        |
| `obj.z`                     | 表示基準座標Z                                                                                                  | ○        |
| `obj.w`3         | 画像サイズW                                                                                                    | ○        |
| `obj.h`3         | 画像サイズH                                                                                                    | ○        |
| `obj.screen_w`              | スクリーンサイズW                                                                                              | ○        |
| `obj.screen_h`              | スクリーンサイズH                                                                                              | ○        |
| `obj.framerate`             | フレームレート                                                                                                 | ○        |
| `obj.frame`4     | オブジェクト基準での現在のフレーム番号                                                                         | ○        |
| `obj.time`4      | オブジェクト基準での現在の時間（秒）                                                                           | ○        |
| `obj.totalframe`            | オブジェクトの総フレーム数                                                                                     | ○        |
| `obj.totaltime`             | オブジェクトの総時間（秒）                                                                                     | ○        |
| `obj.layer`                 | オブジェクトが配置されているレイヤー ※描画対象のオブジェクトのレイヤー位置                                     | ○        |
| `obj.index`5     | 複数オブジェクト時の番号 ※個別オブジェクト用                                                                   | ○        |
| `obj.num`5       | 複数オブジェクト時の数（1=単体オブジェクト/0=不定） ※個別オブジェクト用                                        | ○        |
| `obj.id`                    | オブジェクトのID ※アプリ起動毎の固有ID ※描画対象のオブジェクトの固有ID                                         | ○        |
| `obj.effect_id`             | オブジェクトの内の対象エフェクトのID ※アプリ起動毎の固有ID ※処理対象のフィルタ効果、オブジェクト入出力の固有ID | ○        |
| `global.xxx`                | スクリプトで共用のテーブル変数（xxxは任意のキー名） ※値はバイナリセーフな文字列型で保持されます                |          |

1. 現時点のオブジェクトの設定値になります。出力項目(標準描画等)の設定値とは別のものになります。
2. zoom、aspectは旧スクリプトファイルの利用かで算出反映処理が異なります
3. w、hは常にオブジェクトのピクセル数になります
4. オブジェクトがシーンチェンジ対象の場合は`frame`、`time`が`totalframe`、`totaltime`を超える場合があります
5. `index`、`num`はテキストオブジェクト等で個別オブジェクトを設定した場合に複数オブジェクトの値が設定されます ※スクリプトで個別オブジェクトとして描画させる場合はobj.multiobject()を利用します

例：

```aulua
global.test = 123
print(global.test)
```

## 関数

スクリプトには以下の関数が追加されています。

### obj.mes(text)

テキストオブジェクトの中で指定のテキストを追加します。
テキストオブジェクトのテキスト内のみ使用出来ます。
※obj.を省略してmes()のみでも使用出来ます。

* `text`：表示するテキストを指定します。

例：

```aulua
obj.mes("この文字が挿入されて表示されます")
```

### obj.effect(\[name,param1,value1,param2,value2,...])

指定のフィルタ効果を実行します。メディアオブジェクトのみ使用出来ます。
引数なしで呼ぶとスクリプト以降のフィルタ効果を実行します。

* `name`：エフェクトの名前を指定します。
* `param1`：エフェクトのパラメータの名前を指定します。
* `value1`：エフェクトのパラメータの値を指定します。
* `param?`,`value?`の組み合わせは必要な分だけ指定できます。

※トラックバー、チェックボックス以外の設定のparam,valueはエイリアスファイル等で出力された時の名前や値になります。
※旧スクリプトファイルのパラメータは`effect.conf`の定義を参照して読み替えを行います。足りない定義は適宜追加します。

例：

```aulua
obj.effect("色調補正", "明るさ", 150, "色相", 180)
```

### obj.draw(\[ox,oy,oz,zoom,alpha,rx,ry,rz])

現在のオブジェクトを描画します。
通常何もしなくても最後に描画されますがobj.draw()を使うことによりオブジェクトを複数回描画することが出来ます。
※obj.draw()を使用した場合スクリプト以降のフィルタ効果は実行されません。
※obj.effect()を引数なしで呼ぶことで事前にスクリプト以降のフィルタ効果を実行出来ます。

* `ox`：相対座標X
* `oy`：相対座標Y
* `oz`：相対座標Z
* `zoom`：拡大率（1.0=等倍）
* `alpha`：不透明度（0.0=透明/1.0=不透明）
* `rx`：X軸回転角度（360.0で一回転）
* `ry`：Y軸回転角度（360.0で一回転）
* `rz`：Z軸回転角度（360.0で一回転）

例：

```aulua
obj.draw(2, 10, 0)
```

### obj.drawpoly(x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3\[,u0,v0,u1,v1,u2,v2,u3,v3,alpha])

現在のオブジェクトの任意部分を任意の四角形で描画します。
※内角が全て180度以下の平面以外は正しく描画されません。
※頂点0から3が時計回りになる面が表面になります。
※obj.drawpoly()を使用した場合スクリプト以降のフィルタ効果は実行されません。

* `x0,y0,z0`：四角形の頂点0の座標
* `x1,y1,z1`：四角形の頂点1の座標
* `x2,y2,z2`：四角形の頂点2の座標
* `x3,y3,z3`：四角形の頂点3の座標
* `u0,v0`：頂点0に対応するオブジェクトの画像の座標
* `u1,v1`：頂点1に対応するオブジェクトの画像の座標
* `u2,v2`：頂点2に対応するオブジェクトの画像の座標
* `u3,v3`：頂点3に対応するオブジェクトの画像の座標

例：

```aulua
obj.drawpoly(-50, -50, 0, 50, -50, 0, 50, 50, 0, -50, 50, 0, 0, 0, obj.w, 0, obj.w, obj.h, 0, obj.h)
```

> \[!NOTE]
> AviUtl1と違い、この座標はオブジェクトのローカル座標になります。
> （1では実際に描画する座標でした）

### obj.drawpoly({table}\[,alpha])

複数分のobj.drawpoly()の引数をテーブルで指定することが出来ます。
obj.drawpoly()を複数回呼び出すより描画が速くなります。
テーブルの形式は下記が対応しています。※異なる形式を混在させる事はできません

* `{x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3,u0,v0,u1,v1,u2,v2,u3,v3}`
* `{x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3,u0,v0,u1,v1,u2,v2,u3,v3,vx0,vy0,vz0,vx1,vy1,vz1,vx2,vy2,vz2,vx3,vy3,vz3}`
* `{x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3,r0,g0,b0,a0,r1,g1,b1,a1,r2,g2,b2,a2,r3,g3,b3,a3}`
* `{x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3,r0,g0,b0,a0,r1,g1,b1,a1,r2,g2,b2,a2,r3,g3,b3,a3,vx0,vy0,vz0,vx1,vy1,vz1,vx2,vy2,vz2,vx3,vy3,vz3}`

※vx,vy,vzは法線ベクトル
※r,g,b,aは描画色(0.0～1.0の乗算済みα) ※色の指定時はオブジェクトの画像は利用されません

例：

```aulua
table.insert(vertex, { x0, y0, 0, x1, y1, 0, x2, y2, 0, x3, y3, 0, u0, v0, u1, v1, u2, v2, u3, v3 })
table.insert(vertex, { x0, y0, 100, x1, y1, 100, x2, y2, 100, x3, y3, 100, u0, v0, u1, v1, u2, v2, u3, v3 })
obj.drawpoly(vertex)
```

### obj.drawpoly({table}\[,vertex\_num,alpha])

頂点リストのテーブルを指定して四角形、三角形を描画することが出来ます。
テーブルの形式は下記が対応しています。※異なる形式を混在させる事はできません

* `{x,y,z,u,v}`：頂点座標 + テクスチャ座標
* `{x,y,z,u,v,vx,vy,vz}`：頂点座標 + テクスチャ座標 + 法線ベクトル
* `{x,y,z,r,g,b,a}`：頂点座標 + 頂点の色
* `{x,y,z,r,g,b,a,vx,vy,vz}`：頂点座標 + 頂点の色 + 法線ベクトル
* `vertex_num`：面の頂点数( 4<デフォルト>：四角形 / 3：三角形 )

※テーブルは面の頂点数で割り切れる数になります
※u,vはオブジェクトの正規化座標(0.0～1.0)
※vx,vy,vzは法線ベクトル
※r,g,b,aは描画色(0.0～1.0の乗算済みα) ※色の指定時はオブジェクトの画像は利用されません
例：

```aulua
vertex = {}
table.insert(vertex, { 0, 0, 0, 0, 0 })
table.insert(vertex, { 100, 0, 0, 1, 0 })
table.insert(vertex, { 100, 100, 0, 1, 1 })
table.insert(vertex, { 0, 100, 0, 0, 1 })
obj.drawpoly(vertex)
```

```aulua
vertex = {}
for z = 100, 1000, 100 do
    table.insert(vertex, { 0, 0, z, 1, 1, 1, 1 })
    table.insert(vertex, { 100, 0, z, 1, 1, 1, 1 })
    table.insert(vertex, { 100, 100, z, 1, 1, 1, 1 })
end
obj.drawpoly(vertex, 3)
```

### obj.load(\[type],...)

現在のオブジェクトの画像を読み込みます。
typeを省略した場合は自動的に判別します。
※読み込まれていた画像は破棄されます。

#### 動画ファイル

`obj.load("movie",file[,time])`
`obj.load("movie.frame",file[,frame])`

動画ファイルから指定時間の画像を読み込みます。
※`"movie.frame"`はフレーム番号を指定して総フレーム数を返却します。

* `file`：動画ファイル名
* `time`：取得する時間（秒）（省略時はオブジェクトの現時間）
* 戻り値：動画の総時間（秒） ※読み込み失敗時は0を返却

例：

```aulua
obj.load("movie", "c:\\test.avi")
```

#### 動画ファイル情報

`obj.load("movie.info",file)`

動画ファイルの情報を取得します。
現在のオブジェクト情報を更新しないで情報の返却のみをします。

* `file`：動画ファイル名
* 戻り値：動画のフレーム数、フレームレート（rate）、フレームレート（scale） ※読み込み失敗時は全て0を返却

例：

```aulua
obj.load("movie.info", "c:\\test.avi")
```

#### 画像ファイル

`obj.load("image",file)`
画像ファイルを読み込みます。

* `file`：画像ファイル名
* 戻り値：`true`=成功 / `false`=読み込み失敗

例：

```aulua
obj.load("image", "c:\\test.bmp")
```

#### テキスト

`obj.load("text",text[,speed,time,align])`
テキストを読み込みます。
色とサイズ、フォントの制御文字が使用出来ます。
speed,timeを設定すると表示する文字数を変更出来ます。
※テキストオブジェクトには使用出来ません。

* `text`：読み込むテキスト
* `speed`：timeパラメータの1秒間で表示する文字数
* `time`：speedパラメータに対する経過時間
* `align`：文字揃え種別 ※文字揃え種別を指定すると中心座標が設定されます。
  * 横書：
    * `0`：左寄\[上]
    * `1`：中央\[上]
    * `2`：右寄\[上]
    * `3`：左寄\[中]
    * `4`：中央\[中]
    * `5`：右寄\[中]
    * `6`：左寄\[下]
    * `7`：中央\[下]
    * `8`：右寄\[下]
  * 縦書：
    * `9`：上段\[右]
    * `10`：中段\[右]
    * `11`：下段\[右]
    * `12`：上段\[中]
    * `13`：中段\[中]
    * `14`：下段\[中]
    * `15`：上段\[左]
    * `16`：中段\[左]
    * `17`：下段\[左]
* 戻り値：`true`=成功 / `false`=読み込み失敗

例：

```aulua
obj.load("text", "この文字が画像として読み込まれます")
```

#### テキストレイアウト

`obj.load("text.layout",text[,speed,time,align])`

※`"textlayout"`の指定も利用できます

`obj.load("text")`で読み込むテキストの画像サイズを取得します。※引数は同じです
現在のオブジェクト情報を更新しないでサイズの返却のみをします。
※文字揃え種別を指定すると中心座標も返却されます。

* 戻り値：横、縦のピクセル数

例：

```aulua
w, h = obj.load("text.layout", "この文字を画像として読み込んだ時のサイズ")
w, h, cx, cy = obj.load("text.layout", "中心座標付き", 0, 0, 0)
```

#### 図形

図形を読み込みます。
`obj.load("figure",name[,color,size,line,round])`

* `name`：図形名、SVGファイル名
* `color`：色（0x000000～0xffffff）
* `size`：図形のサイズ
* `line`：図形のライン幅
* `round`：角を丸くするか？（ `true`：する / `false`<デフォルト>：しない ）
* 戻り値：`true`=成功 / `false`=読み込み失敗

例：

```aulua
obj.load("figure", "円", 0xffffff, 100, true)
```

#### フレームバッファ

フレームバッファから読み込みます。
`load("framebuffer"[,x,y,w,h][,alpha])`

* `x,y,w,h`：フレームバッファから取得する範囲（省略時は全体）
* `alpha`：アルファチャンネルを維持（ `true`：する / `false`<デフォルト>：しない ）
* 戻り値：`true`=成功 / `false`=読み込み失敗

#### 仮想バッファ

仮想バッファから読み込みます。
※仮想バッファはobj.copybuffer(),obj.setoption()で作成することが出来ます。
`load("tempbuffer"[,x,y,w,h])`

* `x,y,w,h`：仮想バッファから取得する範囲（省略時は全体）
* 戻り値：`true`=成功 / `false`=読み込み失敗

#### レイヤー上のオブジェクト

指定のレイヤー上のオブジェクトを読み込みます。
※個別オブジェクト等のエフェクト側で描画処理が入る場合は上手く動作しないです。
`obj.load("layer",no[,effect])`

* `no`：レイヤー番号（1～）
* `effect`：追加エフェクトの実行（ `true`：する / `false`<デフォルト>：しない ）
* 戻り値：`true`=成功 / `false`=読み込み失敗

#### 直前オブジェクト

直前オブジェクトを読み込みます。
`obj.load("before");`
カスタムオブジェクトで他のオブジェクトを読み込む前の時のみ使えます。

* 戻り値：`true`=成功 / `false`=読み込み失敗

### obj.setfont(name,size\[,type,col1,col2,bold,italic,charspacing,linespacing])

obj.load()のテキストで使うフォントを指定します。
※スクリプトの呼び出し毎に指定する必要があります。

* `name`：フォント名
* `size`：フォントサイズ
* `type`：文字の装飾（0～6）
  * 0=標準文字 / 1=影付き文字 / 2=影付き文字（薄）
  * 3=縁取り文字 / 4=縁取り文字（細） / 5=縁取り文字（太） / 6=縁取り文字（角）
* `col1`：文字の色（0x000000～0xffffff）
* `col2`：影・縁の色（0x000000～0xffffff）
* `bold`：太文字か？（`true` / `false`<デフォルト>）
* `italic`：斜体か？（`true` / `false`<デフォルト>）
* `charspacing`：文字間隔
* `linespacing`：行間隔

### obj.getfont()

obj.load()のテキストで使うフォント設定を取得します。

* 戻り値：各種フォント設定 ※obj.setfont()の引数と同じ並びで返却されます
  ※フォント名の初期値は空（デフォルト指定）になります

例：

```aulua
name, size, type = obj.getfont()
```

### obj.rand(st\_num,ed\_num\[,seed,frame])

乱数を発生させます。通常の乱数と異なり同一時間のフレームで
常に同じ値が出るように乱数を発生させます。
※obj.を省略してrand()のみでも使用出来ます。

* `st_num`：乱数の最小値
* `ed_num`：乱数の最大値
* `seed`：乱数の種（省略時はオブジェクト毎に異なる乱数になります。プラスの値を指定すると種が同じでもオブジェクト毎に異なる乱数になり、マイナスの値では種が同じならば全てのオブジェクトで同じ乱数になります）
* `frame`：フレーム番号（省略時は現在のフレームになります）

例：

```aulua
obj.rand(10, 20)
```

### obj.rand1(\[seed,frame])

0.0以上1.0未満の乱数を発生させます。通常の乱数と異なり同一時間のフレームで常に同じ値が出るように乱数を発生させます。
※obj.を省略してrand1()のみでも使用出来ます。

* `seed`：乱数の種（省略時はオブジェクト毎に異なる乱数になります。プラスの値を指定すると種が同じでもオブジェクト毎に異なる乱数になり、マイナスの値では種が同じならば全てのオブジェクトで同じ乱数になります）
* `frame`：フレーム番号（省略時は現在のフレームになります）

例：

```aulua
obj.rand1()
```

### obj.setoption(name,value)

現在のオブジェクトの各種オプションを設定します。
※スクリプトの呼び出し毎に指定する必要があります。

* `name`：オプション名
* `value`：オプション値

#### 裏面を表示しない

`obj.setoption("culling",value)`

* `value`：0=表示 / 1=非表示

#### カメラの方向を向く

`obj.setoption("billboard",value)`

* `value`：0=向かない / 1=横方向のみ / 2=縦方向のみ / 3=向く

#### 合成モード

`obj.setoption("blend",value[,option])`

* `value`：
  * `"none"`：通常
  * `"add"`：加算
  * `"sub"`：減算
  * `"mul"`：乗算
  * `"screen"`：スクリーン
  * `"overlay"`：オーバーレイ
  * `"light"`：比較（明）
  * `"dark"`：比較（暗）
  * `"brightness"`：輝度
  * `"chroma"`：色差
  * `"shadow"`：陰影
  * `"light_dark"`：明暗
  * `"diff"`：差分
  * 以下は仮想バッファ専用の合成モードです。
    * `"alpha_add"`：色情報は加重平均してアルファ値は加算します
    * `"alpha_max"`：色情報は加重平均してアルファ値は大きい方を採用します
    * `"alpha_sub"`：色情報は何もせずにアルファ値を減算します
    * `"alpha_add2"`：色情報は重ね合わせしてアルファ値は加算します
    * `"rgba_add"`：RGBA値を単純に加算します ※Direct3DのBlendStateのみの処理なので軽いです

※旧スクリプトファイル形式の数値指定も利用できます。
※合成モードを利用すると描画処理が重くなります。

#### 描画先を仮想バッファに変更する

`obj.setoption("drawtarget","tempbuffer"[,w,h])`

* `w,h`：仮想バッファのサイズ（省略時は初期化しません）

描画先を仮想バッファにするとobj.draw(),obj.drawpoly()での描画が仮想バッファに対して行われます。
この場合はオブジェクトの持っている座標等の設定は反映せず引数の座標そのままで描画されます。
サイズを指定すると仮想バッファを透明色で初期化します。
仮想バッファは全てのオブジェクトで共用になります。

#### 描画先をフレームバッファに変更する

`obj.setoption("drawtarget","framebuffer")`
obj.draw(),obj.drawpoly()の描画先をフレームバッファにします。
フレームバッファに対してdraw()等で描画を行っていない場合にはsetoption()で変更しなくてもスクリプト終了後には自動的にフレームバッファに対しての描画となります。

#### スクリプト内でフレームバッファに描画されたかのステータスを変更する

`obj.setoption("draw_state",flag)`

* `flag`：`true`：描画済み / `false`：未描画

#### オブジェクトのフォーカス枠モード

`obj.setoption("focus_mode",value)`

* `value`：
  * `"fixed_size"`：大きさ固定の枠にする
  * `"no_resize"`：リサイズ無しの枠にする

#### カメラのパラメータを設定する

カメラの各種パラメータを設定します。
カメラがエディットモードの時は反映されません。
※カメラ効果のみ使用可
`obj.setoption("camera_param",cam)`

* `cam`：カメラのパラメータ（テーブル）
  * `cam.x`：カメラの座標X
  * `cam.y`：カメラの座標Y
  * `cam.z`：カメラの座標Z
  * `cam.tx`：カメラの目標座標X
  * `cam.ty`：カメラの目標座標Y
  * `cam.tz`：カメラの目標座標Z
  * `cam.rz`：カメラの傾き
  * `cam.ux`：カメラの上方向単位ベクトルX
  * `cam.uy`：カメラの上方向単位ベクトルY
  * `cam.uz`：カメラの上方向単位ベクトルZ
  * `cam.d`：カメラからスクリーンまでの距離

例：

```aulua
cam = obj.getoption("camera_param")
```

#### カメラの焦点のパラメータを設定する

カメラの焦点の各種パラメータを設定します。\
※カメラ効果のみ使用可\
`obj.setoption("camera_focus",focus)`

* `focus`：カメラの焦点パラメータ（テーブル）
  * `focus.x`：カメラの焦点座標X
  * `focus.y`：カメラの焦点座標Y
  * `focus.z`：カメラの焦点座標Z
  * `focus.bokeh`：カメラの深度ぼけの強さ

例：

```aulua
focus = obj.getoption("camera_focus")
```

#### サンプラーモード

obj.draw(),obj.drawpoly()描画時のサンプラーを変更します。
※obj.drawpoly()でuv座標を引数で指定した場合はuv座標が領域範囲でクリップされます ※互換対応
`obj.setoption("sampler",value)`

* `value`：
  * `"clip"`：領域外は透明色 ※obj.draw()のデフォルト設定
  * `"clamp"`：領域外は一番外側の色 ※obj.drawpoly()のデフォルト設定
  * `"loop"`：領域外はループ
  * `"mirror"`：領域外は領域を反転しながらループ
  * `"dot"`：拡大縮小補間をしない（領域外は透明色）
    ※省略時はデフォルト設定になります

### obj.getoption(name,...)

現在のオブジェクトの各種オプションを取得します。

* `name`：オプション名

#### トラックバーの移動モード

`obj.getoption("track_mode",value)`

* `value`：トラックバーの変数名または番号
  `--track@変数名:`で定義した場合は変数名を指定します
  `--track0:`で定義した場合は番号を指定します
* 戻り値：移動無し=0
  移動無し以外の場合は移動モードの名称を返却

例：

```aulua
--track@vx:X速度,-10,10,0
obj.getoption("track_mode", "vx")
```

#### オブジェクトの区間の数

`obj.getoption("section_num")`

* 戻り値：区間の数（中間点の数+1）

#### スクリプト名を取得する

`obj.getoption("script_name"[,value][,skip])`

* `value`：フィルタ効果の上下の相対位置（0は自分/マイナスは上/プラスは下）
* `skip`：無効になっているフィルタ効果をスキップするか（ `true`：する / `false`<デフォルト>：しない ）
* 戻り値：スクリプト名（対象がスクリプト以外なら空のテキスト）

例：

```aulua
if obj.getoption("script_name") == obj.getoption("script_name", -1) then
```

#### GUIの表示状態を調べる

`obj.getoption("gui")`

* 戻り値：`true`：表示 / `false`：非表示

※動画の出力中は非表示状態になります。

#### カメラ制御状態を取得する

`obj.getoption("camera_mode")`

* 戻り値：0=カメラ制御対象外 / 0以外=カメラ制御対象

#### カメラのパラメータを取得する

`obj.getoption("camera_param")`

* 戻り値：カメラのパラメータ（テーブル）

※テーブルの内容はobj.setoption("camera\_param")と同じです。

例：

```aulua
cam = obj.getoption("camera_param")
```

#### カメラの焦点のパラメータを取得する

`obj.getoption("camera_focus")`

* 戻り値：カメラの焦点パラメータ（テーブル）

※テーブルの内容はobj.setoption("camera\_focus")と同じです。

例：

```aulua
focus = obj.getoption("camera_focus")
```

#### 個別オブジェクトが有効かを調べる

`obj.getoption("multi_object")`

* 戻り値：`true`：有効 / `false`：無効

#### 合成モードを取得する

`obj.getoption("blend")`

* 戻り値：合成モード

※obj.setoption("blend")の`value`と同じです。\
※出力項目（標準描画等）の合成モードは最後に反映されます。

#### 裏面を表示しないかを取得する

`obj.getoption("culling")`

* 戻り値：0=表示 / 1=非表示

#### カメラの方向を向くかを取得する

`obj.getoption("billboard")`

* 戻り値：0=向かない / 1=横方向のみ / 2=縦方向のみ / 3=向く

#### 描画先の情報を取得する

`obj.getoption("drawtarget")`

* 戻り値：`"tempbuffer"`：仮想バッファ / `"framebuffer"`：フレームバッファ

#### スクリプト内でフレームバッファに描画されたかのステータスを取得する

`obj.getoption("draw_state")`

* 戻り値：`true`：描画済み / `false`：未描画

### obj.getvalue(target\[,time,section])

現在のオブジェクトの設定値を取得します。

* `target`：設定種別
  * `0`：トラックバー0の値
  * `1`：トラックバー1の値
  * `2`：トラックバー2の値
  * `3`：トラックバー3の値
  * `"track.xxx"`：変数名xxxのトラックバーの値 ※`track.[変数名]`で変数名付きトラックバーの値を取得出来ます
  * `"x"`：基準座標X1
  * `"y"`：基準座標Y1
  * `"z"`：基準座標Z1
  * `"pos"`：基準座標の3値1
  * `"rx"`：基準X軸回転角度1
  * `"ry"`：基準Y軸回転角度1
  * `"rz"`：基準Z軸回転角度1
  * `"angle"`：基準回転角度の3値1
  * `"cx"`：基準中心座標X1
  * `"cy"`：基準中心座標Y1
  * `"cz"`：基準中心座標Z1
  * `"center"`：基準中心座標の3値1
  * `"sx"`：基準拡大率X（1.0=等倍）1
  * `"sy"`：基準拡大率Y（1.0=等倍）1
  * `"sz"`：基準拡大率Z（1.0=等倍）1
  * `"scale"`：基準拡大率の3値1
  * `"zoom"`：基準拡大率（100=等倍）1、2
    ※obj.zoom（1.0=等倍）と異なっているので注意 ※互換対応
  * `"aspect"`：基準アスペクト比（-1.0～1.0/プラス=横縮小/マイナス縦縮小）1、2 ※互換対応
  * `"alpha"`：基準不透明度（0.0～1.0/0.0=透明/1.0=不透明）1
  * `"time"`：オブジェクト基準の時間
  * `"frame_s"`：全体（シーン）基準のオブジェクトの開始フレーム（0からの整数）
  * `"frame_e"`：全体（シーン）基準のオブジェクトの終了フレーム（0からの整数）
  * `"layer7.x"`：レイヤー7のオブジェクトの基準座標X
    ※`layer[レイヤー番号].[設定種別]`で別レイヤーのオブジェクトの値を取得出来ます
    ※`layer[レイヤー番号]`でオブジェクトの有無が確認出来ます（true/false）
  * `"scenechange"`：シーンチェンジでの表示割合（0.0～1.0） シーンチェンジのみ使用可
    ※使い方はシーンチェンジスクリプトの例を参照してください
* `time`：どの時点の値を取得するかの時間（秒）（省略時は現時間）
* `section`：時間の基準となる区間の番号（省略時は開始点）
  * `0`：開始点
  * `1`：最初の中間点
  * `2`：2個目の中間点
  * `-1`：終了点

1. 上記の基準xxxxはオブジェクトの出力項目(標準描画等)の設定値になります
2. zoom、aspectは基準拡大率XYZから算出した値になります

### obj.getvalue(effect,item\[,time,section])

現在のオブジェクトの設定値を取得します。

* `effect`：対象のエフェクト名（エイリアスファイルの`effect.name`の値）
  同じエフェクトが複数ある場合は`":n"`のサフィックスでインデックス指定出来ます（nは0からの番号）
  エフェクトが無効状態の場合は対象から除外されます

* `item`：対象の設定項目の名称（エイリアスファイルのキーの名称） ※名称が数値の場合は利用出来ません

* `time`：どの時点の値を取得するかの時間（秒）（省略時は現時間）

* `section`：時間の基準となる区間の番号（省略時は開始点）
  * `0`：開始点
  * `1`：最初の中間点
  * `2`：2個目の中間点
  * `-1`：終了点

* 戻り値：トラックバーの場合は指定時間の設定値
  セクション毎チェックボックスの場合は指定時間のセクションの設定値
  上記以外の場合はエイリアスファイルの設定値と同じフォーマットの値
  取得対象が存在しない場合は返却無し ※`nil`で判定出来ます

例：

```aulua
font = obj.getvalue("テキスト", "フォント")
range = obj.getvalue("ぼかし:1", "範囲")
```

### obj.getvalue(layer,effect,item\[,time,section])

指定レイヤーのオブジェクトの設定値を取得します。※現時間のオブジェクトが対象になります

対象レイヤーの引数以外は`obj.getvalue(effect,item,...)`と同じです。

* `layer`：対象レイヤー番号（1～）

### obj.setanchor(name,num\[,option,..])

アンカーポイントを表示します。
この関数を呼び出した時にアンカーポイントの表示設定とアンカーが移動していた場合の変数への反映を行います。
呼び出し順序や回数を変更すると正しく反映されない場合があります。

* `name`：`--value`、`--dialog`の配列で定義されている座標を格納する変数名を指定します。※変数名を文字列として指定
  `"track"`を指定すると`--track0`から指定されているトラックバーの始点終点中間点の値を参照します。
  変数名をカンマ区切りで2か3項目列挙した場合は`--track@xxx`で定義されている各トラックバーの始点終点中間点の値を参照します。
  ※直接テーブル変数名を指定するとアンカー表示や移動なしで線だけを表示します。
* `num`：アンカーポイントの数を指定します。
  `name="track"`の場合は0を指定して下さい。アンカーポイント数は開始終了中間点の数になります。
* `option`：各種オプションを列挙出来ます。
  * `"line"`：アンカーポイントを線で結びます。
  * `"loop"`：アンカーポイントを線で結び一周させます。
  * `"star"`：アンカーポイントをオブジェクトの中心とそれぞれ線で結びます。
  * `"arm"`：アンカーポイントとオブジェクトの中心を線で結びます。
  * `"mesh",横数,縦数`：アンカーポイントを網目状に線で結びます。後続の引数に格子点数を指定します。
  * `"color",色`：上記オプションの線の色(RGB)を変更します。後続の引数に色(0x000000～0xffffff)を指定します。
  * `"rgba",色`：上記オプションの線の色(RGBA)を変更します。後続の引数にα値を含めた色(0x00000000～0xffffffff)を指定します。
  * `"inout"`：上記オプションの線の表示をIN,OUT側の2個として表示します。（アンカー数は半々になります）
  * `"xyz"`：アンカーポイントを3D座標で制御します。※デフォルトは2D座標
  * `"screen"`：スクリーン座標で制御します。※デフォルトはオブジェクト座標
    ※カメラ制御+シャドーで使用する場合にプレビューで影部分が少しずれる場合があります。
  * `"small"`：小さいアンカーポイントで表示します。
  * `{座標テーブル}`：`name`で指定されている座標の数が正しくない場合に指定の座標テーブルでアンカーを設定します。
    ※`name`で定義されている項目への反映はアンカーが移動した時になります。
* 戻り値：取得したアンカーポイントの数

例：

```aulua
obj.setanchor("pos", 3)
n = obj.setanchor("track", 0, "line")
```

### obj.getpixel(x,y\[,type])

現在のオブジェクトのピクセル情報を取得します。
引数なしで呼ぶとオブジェクトのピクセル数を取得できます。
※getpixel()はVRAMアクセスを低減する為にキャッシュしたものから値を返却します。
状況によってキャッシュが更新されずに正しい値が取得出来ない場合があります。（draw,pixel系の描画関連）
obj.pixeloption("get",xxx)を処理することで能動的にキャッシュを破棄することが出来ます。

* `x,y`：取得するピクセルの座標
* `type`：ピクセル情報のタイプ（`"col"`、`"rgb"`）
  ※省略時は `obj.pixeloption("type")` で指定したタイプ（通常は`"col"`）
* 戻り値：
  * タイプが`"col"`の場合
    色情報（0x000000～0xffffff）と不透明度（0.0=透明/1.0=不透明）
    ```aulua
    col, a = obj.getpixel(0, 0, "col")
    ```

  * タイプが`"rgb"`の場合
    各8bit(0～255)のRGBA情報
    ```aulua
    r, g, b, a = obj.getpixel(0, 0, "rgb")
    ```

  * タイプが`"yc"`の場合
    YCbCr旧内部形式

    ```aulua
    y, cb, cr, a = obj.getpixel(0, 0, "yc")
    ```

  * 引数なし
    横、縦のピクセル数
    ```aulua
    w, h = obj.getpixel()
    ```

### obj.putpixel(x,y,...)

現在のオブジェクトのピクセル情報を書き換えます。
引数なしで呼ぶとオブジェクトのピクセル数を取得できます。
受け渡すピクセル情報のタイプは `obj.pixeloption("type")` で指定したタイプになります。
※putpixel()はピクセル毎にコンピュートシェーダーで実行するので処理は速くないです。

* `x,y`：書き換えるピクセルの座標
* 色情報：
  * タイプが`"col"`の場合
    色情報（0x000000～0xffffff）と不透明度（0.0=透明/1.0=不透明）
    `obj.putpixel(0,0,col,a)`
  * タイプが`"rgb"`の場合
    各8bit(0～255)のRGBA情報
    `obj.putpixel(0,0,r,g,b,a)`
  * タイプが`"yc"`の場合
    YCbCr内部形式
    `obj.putpixel(0,0,y,cb,cr,a)`

### obj.copypixel(dst\_x,dst\_y,src\_x,src\_y)

現在のオブジェクトのピクセル情報をコピーします。
※copypixel()はピクセル毎にコンピュートシェーダーで実行するので処理は速くないです。

* `dst_x,dst_y`：コピー先の座標
* `src_x,src_y`：コピー元の座標

### obj.pixeloption(name,value)

`obj.getpixel()`,`obj.putpixel()`,`obj.copypixel()` の処理オプションを設定します。
※スクリプトの呼び出し毎に指定する必要があります。

* `name`：オプション名
* `value`：オプション値

#### ピクセル情報タイプを指定する

`obj.pixeloption("type",value)`

* `value`：`"col"` / `"rgb"` / `"yc"`

#### ピクセル情報の読み出し先を指定する

`obj.pixeloption("get",value)`

* `value`：`"object"`：オブジェクト / `"framebuffer"`：フレームバッファ

#### ピクセル情報の書き込み先を指定する

`obj.pixeloption("put",value)`

* `value`：`"object"`：オブジェクト / `"framebuffer"`：フレームバッファ

#### 書き込む時のブレンドタイプを指定する

`obj.pixeloption("blend",value)`

* `value`：引数なし=置き換え / 0=通常 / 1=加算 / 2=減算 / 3=乗算

### obj.getpixeldata(target\[,format])

画像バッファからRGBA(32bit)形式でデータを読み出します。
この関数はスクリプトモジュールやDLLを利用して画像処理をする為のものです。
※VRAMからデータを取得するので処理は速くないです。

* `target`：読み込む画像バッファ
  * `"object"`：オブジェクト
  * `"tempbuffer"`：仮想バッファ
  * `"cache:xxxx"`：キャッシュバッファ（xxxxは任意の名前）
  * `"framebuffer"`：フレームバッファ
* `format`：画像データのフォーマット ※デフォルトはRGBA32bit
  * `"rgba"`：RGBA32bit
  * `"bgra"`：BGRA32bit
* 戻り値：画像データのポインタ（ユーザーデータ）、横、縦のピクセル数

例：

```aulua
data, w, h = obj.getpixeldata("object", "rgba")
```

### obj.putpixeldata(target,data,w,h\[,format])

RGBA(32bit)形式のデータを画像バッファへ書き込みます。
この関数はスクリプトモジュールやDLLを利用して画像処理をする為のものです。
※VRAMへデータを書き込むので処理は速くないです。

* `target`：書き込む画像バッファ
  * `"object"`：オブジェクト
  * `"tempbuffer"`：仮想バッファ
  * `"cache:xxxx"`：キャッシュバッファ（xxxxは任意の名前）
  * `"framebuffer"`：フレームバッファ（同サイズのみ対応）
* `data`：画像データのポインタ（ユーザーデータ）
* `w`：横のピクセル数
* `h`：縦のピクセル数
* `format`：画像データのフォーマット ※デフォルトはRGBA32bit
  * `"rgba"`：RGBA32bit
  * `"bgra"`：BGRA32bit

例：

```aulua
obj.putpixeldata("object", data, w, h, "rgba")
```

### obj.getaudio(buf,file,type,size)

音声ファイルからオーディオデータを取得します。
オブジェクトの時間を基準とした位置のデータを取得します。

* `buf`：データを受け取るテーブルを指定します。
  　※nilを指定すると第3戻り値でテーブルを返します。
* `file`：音声ファイル名（`"audiobuffer"`を指定すると編集中の音声データが取得出来ます）
* `type`：取得データの種類
  * `"pcm"`：PCMサンプリングデータ（16bitモノラルのスケール基準）
  * `"spectrum"`：周波数毎の音量データ
  * `"fourier"`：音声を離散フーリエ変換したデータ（sizeの指定は不要）
    　 ※元周波数の1/2048～1/2まで1/2048刻みの1024個のデータになります
  * `"xxxx.l"`：左チャンネルの音声で取得（xxxxは取得データ種別）
  * `"xxxx.r"`：右チャンネルの音声で取得（xxxxは取得データ種別）
* `size`：取得するデータ数（指定した値より少ない場合があります）
* 戻り値：取得したデータ数、サンプリングレート

例：

```aulua
n = obj.getaudio(buf, "audiobuffer", "spectrum", 32)
n, rate = obj.getaudio(buf, "c:\\test.wav", "pcm", 1000)
n, rate, buf = obj.getaudio(nil, "c:\\test.wav", "pcm.r", 1000)
```

### obj.copybuffer(dst,src)

画像バッファをコピーします。
※コピー先の画像バッファのサイズはコピー元のサイズに変更されます。

* `dst`：コピー先のバッファ
  * `"tempbuffer"`：仮想バッファ
  * `"object"`：オブジェクト
  * `"cache:xxxx"`：キャッシュバッファ（xxxxは任意の名前）
  * `"framebuffer"`：フレームバッファ（コピー元が同サイズのオブジェクト、仮想バッファ、キャッシュバッファのみ対応）
* `src`：コピー元のバッファ
  * `"framebuffer"`：フレームバッファ
  * `"object"`：オブジェクト
  * `"tempbuffer"`：仮想バッファ
  * `"cache:xxxx"`：キャッシュバッファ（xxxxは任意の名前）
  * `"image:xxxx"`：画像ファイル（xxxxはスクリプトフォルダからの相対パスの画像ファイル名）
* 戻り値：`true`：成功 / `false`：失敗

キャッシュバッファの名前は全てのオブジェクトで共通となります。
キャッシュバッファは1フレームの描画毎に破棄されます。

### obj.clearbuffer(target\[,color])

画像バッファをクリアします。

* `target`：クリアするバッファ名
  * `"object"`：オブジェクト
  * `"tempbuffer"`：仮想バッファ
  * `"framebuffer"`：フレームバッファ
  * `"cache:xxxx"`：キャッシュバッファ（xxxxは任意の名前）
* `color`：色（0x000000～0xffffff）※未指定の場合は透明色

### obj.clearbuffer(target,w,h\[,color])

画像バッファのサイズを変更してクリアします。

* `target`：クリアするバッファ名(フレームバッファはサイズを変更出来ません)
* `w`：横のピクセル数
* `h`：縦のピクセル数
* `color`：色（0x000000～0xffffff）※未指定の場合は透明色

### obj.pixelshader(name,target,{resource,...}\[,{constant,...},blend,sampler])

ピクセルシェーダーを実行します。

* `name`：シェーダーの登録名 ※登録したシェーダー名を文字列で指定します。
  `登録名@スクリプト名`のように指定すると他のスクリプトのシェーダー定義が利用出来ます。
* `target`：出力先のバッファ名
  Direct3Dのレンダーターゲットに設定されます。
  * `"object"`：オブジェクト
  * `"tempbuffer"`：仮想バッファ
  * `"framebuffer"`：フレームバッファ
  * `"cache:xxxx"`：キャッシュバッファ（xxxxは任意の名前）
* `resource`：参照するバッファ名の配列（1つの場合は直接バッファ名で指定出来ます）
  Direct3Dのシェーダーリソース（t0～）に設定されます。
  ※レンダーターゲットと同一の場合は複製して設定されます
  * `"object"`：オブジェクト
  * `"tempbuffer"`：仮想バッファ
  * `"framebuffer"`：フレームバッファ
  * `"cache:xxxx"`：キャッシュバッファ（xxxxは任意の名前）
  * `"random"`：乱数バッファ(0.0～1.0の乱数値の256x256の領域)※DXGI\_FORMAT\_R32\_FLOAT（r値のみ）になります
* `constant`：参照する定数の配列
  Direct3Dの定数バッファ（b0）にfloatの配列として設定されます。
* `blend`：出力先へのブレンド方法
  Direct3DのBlendStateを変更します。※デフォルトは`"copy"`
  * `"copy"`：出力をそのままコピーします
  * `"mask"`：α値のみを乗算します ※RGB値は利用されません
  * `"draw"`：出力をアルファブレンドします
  * `"add"`：出力を加算合成します
* `sampler`：サンプラーの種別
  Direct3DのSamplerState（s0）を設定します。※デフォルトは未設定
  * `"clip"`：領域外（0.0～1.0の範囲外）は透明色
  * `"clamp"`：領域外は境界の色
  * `"loop"`：領域外は領域をループ
  * `"mirror"`：領域外は領域を反転しながらループ
  * `"dot"`：拡大縮小補間をしない（領域外は透明色）

### obj.computeshader(name,{target},{resource,...}\[,{constant,...},countX,countY,countZ,sampler])

コンピュートシェーダーを実行します。

* `name`：シェーダーの登録名 ※登録したシェーダー名を文字列で指定します。
  `登録名@スクリプト名`のように指定すると他のスクリプトのシェーダー定義が利用出来ます。

* `target`：読み書き先のバッファ名の配列（1つの場合は直接バッファ名で指定出来ます）
  Direct3DのUnorderedAccessリソース（u0～）に設定されます。
  * `"object"`：オブジェクト
  * `"tempbuffer"`：仮想バッファ
  * `"framebuffer"`：フレームバッファ
  * `"cache:xxxx"`：キャッシュバッファ（xxxxは任意の名前）

* `resource`：参照するバッファ名の配列（1つの場合は直接バッファ名で指定出来ます）
  Direct3Dのシェーダーリソース（t0～）に設定されます。
  ※UnorderedAccessと同一の場合は複製して設定されます
  * `"object"`：オブジェクト
  * `"tempbuffer"`：仮想バッファ
  * `"framebuffer"`：フレームバッファ
  * `"cache:xxxx"`：キャッシュバッファ（xxxxは任意の名前）
  * `"random"`：乱数バッファ（0.0～1.0の乱数値の256x256の領域）※DXGI\_FORMAT\_R32\_FLOAT（r値のみ）になります

* `constant`：参照する定数の配列
  Direct3Dの定数バッファ（b0）にfloatの配列として設定されます。

* `countX`：X軸スレッドグループ数 ※未指定の場合は1

* `countY`：Y軸スレッドグループ数 ※未指定の場合は1

* `countZ`：Z軸スレッドグループ数 ※未指定の場合は1

* `sampler`：サンプラーの種別
  Direct3DのSamplerState（s0）を設定します。※デフォルトは未設定
  * `"clip"`：領域外（0.0～1.0の範囲外）は透明色
  * `"clamp"`：領域外は境界の色
  * `"loop"`：領域外は領域をループ
  * `"mirror"`：領域外は領域を反転しながらループ
  * `"dot"`：拡大縮小補間をしない（領域外は透明色）

### obj.getpoint(target\[,option,option2])

トラックバーの値を取得します。
トラックバー移動スクリプトのみ使用出来ます。

* `target`：
  * 整数：各区間でのトラックバー値
    0=開始点 / 1=最初の中間点 / 2=2個目の中間点 / ...
    optionで取得する関連トラックの相対位置を指定することが出来ます。
  * `"index"`：現在の区間での位置を取得します。
    開始点と最初の中間点の間の場合は0.5等の少数で表されます。
  * `"num"`：開始終了中間点の総数を取得します。
  * `"time"`：現在の時間を取得します。
    optionで時間を取得する区間を指定することができます。
  * `"accelerate"`：加速度が設定されているかを取得します。
    戻り値：`true`：有効 / `false`：無効
  * `"decelerate"`：減速度が設定されているかを取得します。
    戻り値：`true`：有効 / `false`：無効
  * `"param"`：トラックバーの設定値を取得します。
    設定値が複数ある場合は戻り値が複数になります。
  * `"link"`：関連トラックでのインデックスと総数を取得します。
    `index, num = obj.getpoint("link")`
    関連トラックは座標等で他のトラックの値を取得する為に使用します。
    X座標での戻り値：0,3 / Y座標での戻り値：1,3 / Z座標での戻り値：2,3
  * `"timecontrol"`：時間制御を反映した現在の値を取得します。
    * `option`：取得する値の種別
      * `"index"`：時間制御を反映した区間での位置を取得
      * `"time"`：時間制御を反映した時間を取得
      * `"value"`：時間制御の時間位置（開始点=0.0/終了点=1.0）を取得
        option2で取得する時間を指定することが出来ます。※未指定の場合は現在の時間
  * `"frame_s"`：全体（シーン）基準の現在のオブジェクトの開始フレームを取得します。（0からの整数）
  * `"frame_e"`：全体（シーン）基準の現在のオブジェクトの終了フレームを取得します。（0からの整数）
  * `"framerate"`：フレームレートを取得します。
  * `"default"`：トラックバーの標準値を取得します。※互換対応
    optionで取得するトラックバーの値の移動モードを指定することが出来ます。（名称を指定します）
    ※時間制御や設定値の情報が不足している場合は利用出来ません。（標準値が返却されます）

### obj.getinfo(name,...)

各種環境情報を取得します。

* `name`：取得する情報の名前

#### スクリプトフォルダのパスを取得する

```aulua
obj.getinfo("script_path")
```

* 戻り値：スクリプトフォルダのパス

#### フィルタオブジェクトの処理中かを調べる

```aulua
obj.getinfo("filter")
```

* 戻り値：`true`：フィルタオブジェクトの処理中

#### 動画の出力中かを調べる

```aulua
obj.getinfo("saving")
```

* 戻り値：`true`：出力中 / `false`：非出力中

#### 最大画像サイズを取得する

```aulua
max_x, max_y = obj.getinfo("image_max")
```

* 戻り値：最大画像サイズ（横幅,高さ）

#### オブジェクトが存在する最大のフレーム番号を取得する

```aulua
obj.getinfo("frame_max")
```

* 戻り値：最大のフレーム番号（0からの整数）

#### オブジェクトが存在する最大のレイヤー番号を取得する

```aulua
obj.getinfo("layer_max")
```

* 戻り値：最大のレイヤー番号（1からの整数）

#### グリッド（BPM）の情報を取得する

先頭のBPM情報を取得します。

```aulua
tempo, beat, offset = obj.getinfo("bpm")
```

* 戻り値：テンポ,拍子,拍子オフセット（秒）

#### グリッド（BPM）の一覧情報を取得する

```aulua
bpm = obj.getinfo("bpm_list")
```

* 戻り値：BPM情報テーブルの配列
  * `bpm[1].tempo`：テンポ
  * `bpm[1].beat`：拍子
  * `bpm[1].start`：開始位置（秒）
  * `bpm[1].offset`：拍子オフセット（秒）

#### アプリ起動からの経過時間を取得する

```aulua
sec = obj.getinfo("clock")
```

* 戻り値：アプリ起動からの経過時間（秒）
  ※パフォーマンスカウンターで計測しています

#### スクリプトの処理時間を取得する

```aulua
msec = obj.getinfo("script_time")
```

* 戻り値：スクリプト実行開始からの経過時間（ミリ秒）
  ※パフォーマンスカウンターで計測しています

#### バージョン情報を取得

```aulua
version = obj.getinfo("version")
```

* 戻り値：本体のバージョン番号

### obj.data(name)

汎用データ領域を取得します。
※スクリプトモジュールやDLL向けになります。

* `name`：汎用データ領域の登録名
* 戻り値：汎用データ領域のポインタ（ユーザーデータ）

### obj.multiobject(num,func)

オブジェクトを個別オブジェクトとして複数描画します。

* `num`：描画する個別オブジェクトの数
* `func`：オブジェクトの描画処理のコールバック関数 (描画する回数呼ばれます)
  コールバック関数の返却で個別オブジェクトの基準時間のオフセット（秒）を返却出来ます

※使い方はオブジェクトを個別オブジェクトとして複数描画させる例を参照してください

### obj.module(name)

スクリプトモジュール（.mod2）の関数を取得します。

* `name`：モジュール名（スクリプトモジュールのファイル名本体）
* 戻り値：スクリプトモジュールの関数テーブル

例：

```aulua
local func = obj.module("ScriptModule")
local total = func.sum(1, 2, 3)
```

### obj.interpolation(time,x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3)

連続した点p0(x0,y0,z0),p1(x1,y1,z1),p2(x2,y2,z2),p3(x3,y3,z3)から
時間time(0～1)に応じたp1,p2間の座標を計算します。
※y,z座標は省略することが出来ます。

例：

```aulua
x, y, z = obj.interpolation(time, x0, y0, z0, x1, y1, z1, x2, y2, z2, x3, y3, z3)
x, y = obj.interpolation(time, x0, y0, x1, y1, x2, y2, x3, y3)
```

### RGB(r,g,b)

色情報（0x000000～0xffffff）と赤（0～255）,緑（0～255）,青（0～255）各要素の相互変換をします。
r,g,bを2つ指定した場合はオブジェクトの時間経過に応じて色を変化させます。

例：

```aulua
col = RGB(r, g, b)
r, g, b = RGB(col)
col = RGB(r1, g1, b1, r2, g2, b2)
```

### HSV(h,s,v)

色情報（0x000000～0xffffff）と色相（0～360）,彩度（0～100）,明度（0～100）各要素の相互変換をします。
h,s,vを2つ指定した場合はオブジェクトの時間経過に応じて色を変化させます。

例：

```aulua
col = HSV(h, s, v)
h, s, v = HSV(col)
col = HSV(h1, s1, v1, h2, s2, v2)
```

### OR(a,b) / AND(a,b) / XOR(a,b)

OR,AND,XORのビット演算をします。

例：

```aulua
c = OR(a, b)
```

### SHIFT(a,shift)

算術シフトをします。shiftが正の数だと左シフト、負の数だと右シフトになります。

例：

```aulua
b = SHIFT(a, 1)
```

### rotation(x0,y0,x1,y1,x2,y2,x3,y3,zoom,r)

原点（0,0）を中心に指定の座標を拡大縮小回転します。

* `x0,y0`：頂点0の座標
* `x1,y1`：頂点1の座標
* `x2,y2`：頂点2の座標
* `x3,y3`：頂点3の座標
* `zoom`：拡大率（1.0=等倍）
* `r`：回転角度（360.0で一回転）

例：

```aulua
x0, y0, x1, y1, x2, y2, x3, y3 = rotation(x0, y0, x1, y1, x2, y2, x3, y3, zoom, r)
```

### print(text\[,...])、debug\_print(text)

指定の文字列をログに出力します。
引数が複数の場合は連結して出力します。
第1引数にログレベルを指定することが出来ます。
※引数が関数やユーザーデータの場合は空文字が出力されます。
※ログの設定からOutputDebugString等にも出力されるように設定を変更出来ます。

* `text`：ログ文字列
  ログレベルの指定("@info","@warn","@error","@verbose") ※第1引数の場合のみ

例：

```aulua
print("ログ表示")
print("@error", "エラー表示")
```

## Lua/LuaJITのバイナリについて

付属のlua.dllはLuaのサイトにあるバージョン5.1.4に
5.1.4-2のパッチを当ててビルドしたものです。

付属のluaJIT.dllはLuaJITのサイトにあるバージョン2.1をビルドしたものです。

* Luaのサイト
  <http://www.lua.org/>
* LuaJITのサイト
  <https://luajit.org/>
