テンプレート実行環境


karaoke templateが実行されるとユーザーコード(あなたが書いたコード)の為のテンプレート実行環境がつくられます。
karaoke template自身はグローバルな実行環境で動いています。
テンプレート実行環境はkaraoke templateの実行を妨げないようにグローバルな実行環境とは切り離されています。
実行環境というと小難しそうですが、簡単に言ってしまうと「どんな変数が使えるのか使えないのか」ということです。
テンプレート実行環境にはユーザーが定義した変数を追加することができます。
また、テンプレート実行環境には現在処理中の行や音節に関する幾つかの既定変数があらかじめ含まれています。
これらの既定変数はLuaのテーブルフィールドの形で提供されます
ユーザー定義変数や既定変数はコード行とテンプレート行のコードブロックの内部で使用できます。

既定変数の3つのクラス

  • meta情報
meta.から始まる変数
ass字幕ファイルのヘッダー部分script Infoの情報です。
meta.res_x 再生時のX解像度
meta.res_y 再生時のY解像度
この他にももうちょっとあるけど、この2つ以外はあんまり使うことない^^;
詳しくはここを参照

  • line情報
line.から始まる変数
現在処理中の行の位置、時間、textに関する情報
line.duraiton 行の長さ(時間的)
line.start_time行の開始時刻、 line.end_time行お終了時刻 
line.left行の左端の位置、 line.center行の中央の位置、 line.right行の右端の位置
line.top行の上端の位置、line.middle行の垂直の中央の位置、line.bottom行の下端の位置、line.vcenterline.middleの別名、line.hcenterline,centerの別名
line.width行の幅、line.height行の高さ
line.text_stripped タグを除いた行のテキスト
line.kara 行に含まれる音節の情報
line.furi 行に含まれるふりがなの情報
line.styleref 行のスタイルを表しているスタイルテーブルへの参照
line.furistyle 行のフリガナスタイルを表しているスタイルテーブルへの参照
line.descent アルファベット小文字の下に突き抜けた部分の深さ
line.extlead 行間のすき間
line.margin_v,line.margin_t 各行で個別に指定した垂直マージン、VはTのエイリアス
line.eff_margin_l, line.eff_margin_r, line.eff_margin_t, line.eff_margin_b
line.eff_margin_v 左、右、上、下、垂直の有効マージン(各行で個別指定したマージンが0の場合はスタイルのマージンが有効、その他は個別指定マージンが有効)
line.halign 行の水平方向のアラインメント
line.valign 行の垂直方向のアラインメント
line.xline.y行のXとYの位置。アラインメントがオーバーライドされない場合の\posタグでの使用に適する
line.class == "dialogue"
line.raw 未加工の生テキスト
line.section 通常は "[Events]".
line.comment 論理値, コメント行なら真(true)
line.effect 行のEffect欄
line.userdata 未使用
line.text 行のタグを含むテキスト
line.style 行のスタイル名
詳しくはここを参照
  • syl情報
syl.から始まる変数
現在処理中の音節に関する位置、時間、textに関する情報
syl.duration 音節の長さ(時間的)
syl.start_time音節の開始、 syl_end_time音節の終了時間 (行の開始時刻からの相対値)
syl.left音節の左端、 syl.center中央、 syl.right右端、 syl.width音節の幅(行の左端からの相対値)
syl.text_stripped タグを除いた音節のテキスト
syl.tag - 音節で定義されたタグ名. 通常はk、K、kf、koの中の一つ.
syl.text - タグを含む音節のテキスト
syl.kdur - 音節の長さ。単位はセンチ秒。\kでの使用に適する
syl.line - 音節の属する行情報へのバックリファレンス
syl.inline_fx - 音節のinline-fx名
syl.i - 音節のインデックス
syl.prespace, syl.postspace - 音節の前、後のスペース文字。 フリガナについては常に空白。 syl.text_strippedにはスペースが含まれる。
syl.text_spacestripped - 音節からタグと前後のスペース文字を除いたテキスト。これに syl.prespaceとsyl.postspaceを加えるとsyl.text_strippedになる。
syl.isfuri - sylがフリガナテーブルの場合は真(true)、そうでなければ偽(false) 1つのテンプレートでメインテキストとフリガナの両方を処理する場合これによって処理を振り分けることができる。
syl.highlights - 音節のマルチハイライト配列。フリガナについてはハイライトは常に1度だけ。
syl.style - 行のスタイルを表しているスタイルテーブルへの参照。 通常のテキストの場合はメインスタイルを、フリガナの場合はフリガナスタイルを示す。
syl.height - スペース文字を除いた音節の幅と高さ。
syl.prespacewidth, >syl.postspacewidth - syl.prespaceの幅、 syl.postspaceの幅。フリガナについては常に0.
詳しくはここを参照

テンプレートの実行順序と変数の有効性

変数はユーザー変数も既定変数もテンプレート実行環境に存在しないと参照することはできません。
テンプレート行やコード行はそれらが現れる順序とは関係なくonce、line、sylクラスの順で実行されます。
onceクラスはカラオケ行の処理が始まる以前に実行されます。なのでcode onceのコード行でline情報やsyl情報の変数を参照することができません。
code once実行時にはテンプレート実行環境にline情報やsyl情報の変数が存在しないからです。
カラオケ行の行処理が始まると、まずline情報の変数がテンプレート実行環境にセットされます。その後lineクラスのコード行やテンプレート行が実行されますのでlineクラスのコード行やテンプレート行ではline情報の変数が参照できます。
行処理の後はその行内の音節処理が始まります。音節処理ではsyl情報の変数がテンプレート実行環境にセットされます。その後sylクラスのコード行やテンプレート行が実行されますのでsylクラスのテンプレート行やコード行ではline情報とsyl情報の変数が参照できます。
次のカラオケ行の処理に移るまえに既存のline情報やsyl情報の変数は一旦リセット(nil化)されます。
処理の流れ 対象クラス テンプレート実行環境
onceクラスのテンプレート実行 code once
カラオケ行の処理開始
行処理開始
code 行なら
line情報のセット code line line情報
code lineの実行 line情報
template行なら
line情報のセット line情報
pre-line行なら template pre-line line情報
template pre-lineの実行 line情報
line行なら line情報
syl情報のセット template line syl情報line情報
template lineの実行 syl情報line情報
音節処理開始 line情報
syl情報のセット code syl,
template syl
syl情報line情報
sylクラスのテンプレート実行 syl情報line情報
line情報,syl情報のリセット

meta情報はいつでも使えます。
関数については、関数内のコードはその関数が呼ばれたときに初めて実行されるので、どこで関数を定義するかは重要ではありません。
(通常関数定義はcode onceで行います)
その関数がどこから呼ばれるかによって関数内で使える変数が決まります。
例えば、template sylから呼ばれる関数はmeta,line,syl情報の全てが使えますが、template pre-lineから呼ばれる関数はsyl情報は使えません。上の表をご覧になればわかるようにtemplate pre-line実行時にはsyl情報がテンプレート実行環境にないからです。
ユーザー定義変数はそれが実行された以降はずっと存在し、処理が次のカラオケ行に移行するときにもリセットされません。
ここまでを超簡単にまとめると「code onceではmeta情報以外使えない。template pre-lineではsyl情報は使えない。」

グローバル実行環境へのアクセス

最初にテンプレートの実行環境とkaraoke template自身の実行環境は分離されていると書きました。
テンプレート実行環境ではmath, string以外のLuaの標準ライブラリーが使えなかったり、その他のAegisubが提供する関数がつかえなかったりと制限があります。
_G.を使うとこれらのライブラリ関数やAegisubのその他の関数にアクセスすることができるようになります。
例えば、Luaの標準ライブラリのtable関数にアクセスする場合_G.table.sortなどのようにします。

  • Style情報
karaoke templateではstyle情報に直接アクセスすることはできません。
line.stylerefを通じてアクセスすることができます。
例えば、style.color1にアクセスするにはline.styleref.color1またはsyl.style.color1のようにします。

style.margin_v{style.margin_tの別名。
style.class == "style"
style.raw - スタイルの未加工の生テキスト。
style.section == "[V4+ Styles]"
style.name - スタイル名。
style.fontname - スタイルで定義されたフォント名。
style.fontsize - スタイルで定義されたフォントのサイズ。
style.color1style.color2style.color3style.color4 -プライマリ、セカンダリ、ボーダー(アウトライン)、シャドウの色。セカンダリ色は\kタグを使用した場合の変化前の色。プライマリ色は変化後の色。\kタグを使用しない場合はプライマリ色が文字の本体色。&HAABBGGRR&
style.bold - 論理値。フォントの太字のオン/オフ。オンならば真(true)オフならば偽(false)。数値を指定することもできるがサポートされない場合が多くその場合は無効。
style.italic - 論理値。フォントの斜体のオン/オフ。オンならば真(true)オフならば偽(false)。
style.underlinestyle.strikeout - 論理値。フォントのアンダーラインのオン/オフ。オンならば真(true)オフならば偽(false)。
style.scale_xstyle.scale_y - X、Y方向のスケール。100がデフォルトで拡大も縮小もない状態。
style.spacing -テキストの文字間のピクセル単位の追加スペース。
style.angle - テキストのZ軸回転。
style.borderstyle - 1 は通常のアウトライン, 3はレターボックスタイプのアウトライン。
style.outline - テキストのアウトライン(周りの縁)の幅
style.shadow - テキストのシャドウ(影)のテキストからの距離(影の太さではない)
style.align - スクリーン上のテキストのテンキースタイルの配置。
style.margin_l、>style.margin_r、>style.margin_tstyle.margin_b 左端、右端、上方、下方のスタイルで定義されたマージン。>style. style.margin_vは上方マージンの別名。
style.encoding - WindowsフォントエンコードID。

inline変数($変数)

テンプレートでは上記の変数とは別に$変数が使えます。上記の変数はLua言語における変数なので多少プログラミングの知識が必要になりますが、$変数はプログラミングの経験のない人でも簡単に使えるようにできています。
  • $変数とは
$で始まる変数です。
$center,$middle,$durなどです。
$変数はテンプレート行のみで使うことができます。(コード行では使えませんが、テンプレート行のコードブロック内では使えます。)
$変数はテンプレート行であればどこにでも置くことができます。
コードブロックのなかや文字列の中に置くこともできます。

行変数

$layer 行のレイヤー
$lstart, $lend, $ldur, $lmid 行の開始時刻, 終了時刻, 長さ、中間時刻, 全て絶対値で単位はミリ秒
$style 行のスタイル名
$actor 行のアクター名
$margin_l, $margin_r 有効な左、右マージン (マージンの設定はスタイルの設定値と各行に個別に設定する値があります。各行で設定する値が0以外の場合は個別行の値が有効、それ以外の場合はスタイルの設定値が有効)
$margin_v, $margin_t, $margin_b 有効な垂直マージン, 上方マージン、下方マージン, 垂直マージンと上方マージンは同じ
$syln 行に含まれる音節の数
$li 行のインデックス (ファイル上の物理的順序なので最初の字幕行が1とはならない)
$lleft, $lcenter, $lright 行の左端の位置、 水平の中央の位置、右端の位置、整数に丸められる
$ltop, $lmiddle, $lbottom 行の上端の位置, 垂直の中央の位置、 下端の位置、整数に丸められる
$lx, $ly 行のXとYの位置。アラインメントがオーバーライドされない場合の\posタグでの使用に適する
$lwidth, $lheight ピクセル単位での行の幅と高さ、丸め誤差を含むためポジション変数とは正確に一致しない場合がある

音節変数


$sstart, $send, $smid 音節の開始、終了、中間時間。行の開始時刻との相対値。\tや\moveタグとの使用に適する。
$sdur, $skdur 音節の長さ。ミリ秒とセンチ秒。
$si 行の先頭からの音節のインデックス。
$sleft, $scenter, $sright スクリーンの左端からの音節の左端、水平の中央、右端の絶対値。\posや\moveタグとの使用に適する。
$sbottom, 4smiddle, $stop スクリーンの上端からの音節の下端、垂直の中央、上橋の絶対値。\posや\moveタグとの使用に適する。
$sx, $sy デフォルトアラインメントにおける音節のX,Y絶対位置。\anタグでアラインメントをオーバーライドしない場合の\posや\moveタグとの使用に適する。
$swidth, $sheight 音節の幅と高さ。最大0.5ピクセルの誤差を含む。

自動変数

$変数には行変数と音節変数の両方を表すことのできる自動変数があります。これの自動変数はそれがどのタイプのテンプレートで使用されるかによって音節変数を表したり、行変数を表したりします。pre-line テンプレートでは自動変数は行変数を表し、その他のテンプレートでは音節変数を表します。

$start, $end, $mid 行/音節の開始、終了、中間時間。行の場合は絶対値、音節の場合は相対値。
$dur, $kdur 行/音節の長さ(時間的)。\durはミリ秒\kdurはセンチ秒。
$i 行/音節のインデックス。
$left, $center, $right 行/音節の左、中央、右のスクリーン上の絶対座標。
$top, $middle, $bottom 行/音節の上端、下端のスクリーン上の絶対座標。
$x, $y x and y position of line/syllable when using default alignment
$width, $height width and height of line/syllable in pixels, this is rounded and might not match exactly with the positioning variables

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2016年04月15日 20:22