## ConditionalReader

`ConditionalReader` (clip, string filename, string variablename, bool "show")

`ConditionalReader` は、各フレーム、もしくは、ある範囲のフレームに関する異なった値を含むテキストファイルから、情報をインポートすることを可能にします。

### パラメータ

パラメータ | 説明 | デフォルト
clip | 制御されるクリップ。show=true を指定しない限り、影響を受けない。 | 必須
filename | 設定したい変数を含むファイル。 | 必須
variablename | 情報を挿入させたい変数の名前。 | 必須
show | true に設定すると、このフレームに与えられた値が画像の上にオーバーレイされる。 | false

### ファイルフォーマット

ファイルは、プレーンテキスト*1です。区切りはすべて半角スペースによって行われ、改行は新しいデータセットを表します。大文字と小文字の区別はありません！

TYPE (int|float|bool)

各ファイルの中には、1 つの型のデータのみ含めることができます。現在のところ、float、int または bool の値を持つことが可能です。TYPE というキーワードを使用することによって型を指定します。このキーワードが見つかるまでは何も保存されないので、つねにデータの型を指定することから始めるべきです。一度設定された型は変更することができません！

DEFAULT <値>

すべてのフレームのデフォルト値を指定します。すべての定義されたフレームを上書きするため、型を指定した直後にこれを指定すべきです。この設定を省略するすることも可能ですが、その場合は、必ずすべてのフレームに関する設定を指定しなければなりません。さもなければ、予期せぬ結果につながるでしょう。

<フレーム番号> <値>

<フレーム番号> のフレームに対してのみ値を設定します。

R <開始フレーム> <終了フレーム> <値>

ある範囲のフレームに値を適用します。開始フレームおよび終了フレームがともに含まれるということに注意すべきです。

I <開始フレーム> <終了フレーム> <開始値> <終了値>

ある範囲のフレームにわたって 2 つの値の間を補間します。int と float の値に関してのみ動作します。開始フレームおよび終了フレーム がともに含まれるということに注意すべきです。

### 型

前述のとおり、指定可能な型は float、int または bool のいずれかです。
int は整数で、オプションで、ある記号*2から開始することも可能です。
float は小数点を含む小数で、オプションで、ある記号から開始したり、e または E と小数をあとに続けることが可能です。有効な入力は、-732.103 または 7.12e4 です。
bool は、true （T、yes）または false （F、no）のいずれかです。

### 使用例

#### 基本的な使用法

File.txt:

    Type float
    Default 3.45567

    R 45 300 76.5654
    2 -671.454
    72 -671.454

上記のファイルは、float 値を返します。デフォルトでは 3.45567 を返します。しかし、フレーム 45 からフレーム 300 までは 76.5654 を返します。さらに、フレーム 2 とフレーム 72 は、-671.454 を返します。
お気づきのように、後で行われた変更が、ファイルの中で先に行われた設定を無効にします。このことは、フレーム「72」によって説明されます。たとえそれが 45 から 300 の範囲の中にあったとしても、より後方で設定された値が返却されます。反対に、その範囲が「72 -671.454」の後に指定されたなら、76.5654 を返します。
このファイルを呼び出すスクリプトは、以下のようになります:

    colorbars(512,512)
    trim(0,500)
    ScriptClip("subtitle(string(myvar))")
    ConditionalReader("file.txt", "myvar", false)

このスクリプトは、「myvar」という名前の変数に値を代入します。この変数は、Subtitle によって使用され、条件に応じた値を表示するために ScriptClip によって呼び出されます。

注意！ ConditionalReader() 行は、スクリプトの中で「myvar」を使用した後に来ます。

#### Overlay の調整

AviSynth スクリプト:

    colorbars(512,256)
    a1 = trim(0,600)
    a2 = MessageClip("Text clip")
    overlay(a1,a2, y = 100, x = 110, mode="subtract", opacity=0, pc_range=true)
    ConditionalReader("opacity.txt", "ol_opacity_offset", false)
    ConditionalReader("xoffset.txt", "ol_x_offset", false)

xoffset.txt:

    Type int
    Default -50

    I 25 50 -50 100
    R 50 250 100
    I 250 275 100 250

opacity.txt:

    Type float
    Default 0.0

    I 25 50 0.0 1.0
    R 50 250 1.0
    I 250 275 1.0 0.0

基本的には、x のオフセットと不透明度に関するキーフレームを定義しています。フレーム 25 から 50 にかけて、不透明度は 0.0 から 1.0 に拡大され、テキストは左から右へ移動しています。次に、テキストはフレーム 50 から 250 まで固定され、その後、フェードアウトしながら、さらに右へ移動します。
何を行っているのかを完璧に説明するよりも、上のクリップを見た方が簡単です。

#### 複雑な ApplyRange

すでにお気づきかもしれませんが、スクリプトの中でたくさんの ApplyRange() を呼び出すと、リソース問題を引き起こすおそれがあります。ConditionalFilter とあわせて `ConditionalReader` を使用すれば、効率的な解決につながります。

File.txt:

    Type Bool
    Default False

    2 True
    R 45 60 True
    72 True
    R 200 220 True
    210 False
    315 True

上記のファイルは、ブール値*3を返します。デフォルトでは false を返します。しかし、フレーム 2、フレーム 45 からフレーム 60 まで、フレーム 72、フレーム 200 からフレーム 220 まで、フレーム 315 は、フレーム 210 を除いて true を返します。お気づきのように、後で行われた変更が、ファイルの中で先に行われた設定を無効にします。このことは、フレーム「210」によって説明されます。たとえ 200 から 220 の範囲にあっても、後で設定された値（false）が返却されます。
このファイルを利用するスクリプトは、以下のようになります:

    colorbars(512,512)
    trim(0,500)
    A=Last
    FlipHorizontal() # 複雑なフィルタチェインを追加
    B=Last
    ConditionalFilter(A, B, "MyVar", "==", "False", false)
    ConditionalReader("File.txt", "MyVar", false)

このスクリプトは、「MyVar」という名前の変数に値を代入します。この変数は、未処理のバージョンのソースと反転されたバージョンのソースから選択するために ConditionalFilter によって使用されます。

注意！ `ConditionalReader()` 行は、スクリプトの中で「MyVar」を使用した後に来ます。

`原文 Date: 2006/04/10 05:32:01`
`日本語訳 $Date: 2008/06/30 22:20:55 $`

- 訳者註:
  - *1 参考: テキスト形式とは 【プレーンテキスト】 - 意味・解説 ： IT用語辞典
  - *2 ここでは、16 進数を指定する際に使用される接頭辞の $ を指しているものと思われます。
  - *3 true または false。