コンテンツにスキップ

外部プロトコルへのアクセス

Designer は多くのプロトコルをサポートしており、式はそのデータにアクセスして、インタラクティブ性と創造性を高める 1 つの方法です。

ここで説明するデータソースは、レイヤーの制御 によく使われます。

OSC は、プロダクション環境内でデータを伝送する一般的で多用途な方法です。Designer は OSC デバイス を介して OSC とやり取りします。OSC デバイスは、式から参照できる一連のアドレスを構築します。

OSC はアドレスとデータ値で動作します。各アドレスには 1 つ以上のデータ値が配列として格納されます。

たとえば、外部ツールがアドレス /container/parameter に OSC 値を送り、その値が 5.0 の場合、/container/parameter の値は浮動小数点数 5.0 であることを意味します。

その OSC アドレスの値にアクセスするには、ユーザーはそのアドレスを式互換の構文に変換し、そのルックアップが OSC デバイスから何かを見つける要求であることを識別する必要があります。

上記の例のデータを見つける式はいくつかあります:

  • osc:.container.parameterName - 先頭の . 文字はアドレスの先頭の / を表します。これは必須ではありませんが、OSC 式では / 文字が . に置き換えられることを覚えておくと便利です。
  • osc:container.parameterName - この例では先頭の . 文字を省略しています。
  • oscdevice_1:container.parameterName - この場合、特定のデバイス(「oscdevice 1」)が指定されています。複数の OSC デバイス をセットアップしている場合、これはどの OSC デバイスから値を取得したいかを明確にするのに役立ちます。なお、この方式でサポートできるのは、名前が「osc」で始まる OSC デバイスのみです。

式は、アドレスごとに複数の OSC 引数もサポートします。これにより、XY タッチパッドなどを使って色 X と色 Y の値を制御できます。

これは配列インデックス構文を使います。たとえば osc:my.address[0] は、単一のメッセージでそのアドレスに送られた最初の値を返します。なお、これは次々に送られた値を指すのではなく、この方法でアドレス指定するには、値が単一の OSC メッセージにまとめられている必要があります。

タッチパッドを使った例のシナリオで両方の要素を参照するには、ユーザーは 2 つの式を作成する必要があります:

  • osc:my.touchpad.xy[0] - X 成分を指します。
  • osc:my.touchpad.xy[1] - Y 成分を指します。

特定の OSC アドレスに OSC 値が一度も送られていない場合、そのアドレスをルックアップする式は 0.0 に評価されます。つまり、式 osc:this.was.never.sent0.0 に評価されます。これは多くの状況で便利ですが、より細かい制御が必要なこともあります。たとえば文字列やテキストのパラメーターの場合や、0 が望ましいデフォルト値でない場合です。

これを実現するには、上記の同じ osc: 構文を valid_osc:(または valid_oscdevice_1:)に変えて、OSC アドレスにデータが関連付けられているかどうかを確認します。

たとえば valid_osc:my.address は、ローカルの Designer インスタンスがそのアドレスの値を一度も受信していない場合は 0.0 を、受信している場合は 1.0 を返します。

DMX512 由来のネットワークプロトコルは Designer で十分にサポートされています。Designer は DMX デバイス を使って DMX プロトコルとやり取りし、それらを Designer 内部に保持されるユニバースマップに関連付けます。式は Designer の内部ユニバース番号を使い、これは 1 から始まります。

これらの内部ユニバースの 1 つから DMX データにアクセスすると、さまざまな式で便利です。式内のすべてのアドレスは 1 始まり(つまりユニバース 1 が最初のユニバースで、チャンネルは 1 から 512 の範囲)です。これは、0 始まりである式内の他のインデックスとは逆なので、念頭に置く必要があります。

以下の構文の例の universechannel のプレースホルダーは、常に整数リテラル(変数ではない)です。

  • dmx:universe.channel - 8 ビットの DMX 値を読み取ります。
    • 例: dmx:1.28 はユニバース 1、チャンネル 28 から 1 バイト(0〜255)を読み取ります。
  • dmx16:universe.channel - 16 ビットの DMX 値を読み取ります(2 チャンネルが使われます)。
    • 例: dmx16:1.28 はユニバース 1 チャンネル 28 とユニバース 1 チャンネル 29 から 2 バイト(0〜65,535)を読み取ります。
    • 16 ビットデータは、最初のチャンネルで coarse データ、2 番目で fine として読み取られます。これはよく「ビッグエンディアン」と呼ばれます。

すべての名前ルックアップと同様に、関数と演算子で式を拡張して目的の結果を計算できます。たとえば dmx:1.28 / 255 は、同じ値を 0〜1 の範囲にスケールダウンして返します。

式が受け入れられると、レイヤープロパティが緑になります。

式が、Designer が最近 DMX を受信したかどうかを考慮する必要がある場合があります。たとえば、卓がオフラインで、ショーがタイムラインベースのシーケンスにフォールバックすべき場合です。

これを実現するには、上記の同じ dmx: 構文を valid_dmx: に変えて、DMX チャンネルに最近(過去 10 秒以内)のデータが関連付けられているかどうかを確認します。

valid_dmx:1.1 は、ローカルの Designer インスタンスが過去 10 秒以内にユニバース 1 でデータを受信していない場合、実際に値が変化したかどうかに関係なく 0.0 を返します。なお、構文ではチャンネル番号を指定していても、これはユニバースごとです。

MIDI は、一部のショーで制御インターフェースとしてよく使われます。MIDI デバイス を式のデータソースとして使えます。すべての MIDI 式は CC(Control Change)MIDI メッセージに基づいています。

mididevice:name.c[0] - mididevice の control 0(デバイス内の最初のコントロール)から float 値を取得します。

たとえば、合計 32 のコントロールを持つ bcf2000 という名前の MIDI デバイスがあるとします。3 番目のコントロール値を読み取り、タイムラインから来るアニメーション値と掛け合わせたいとします。

使うべき正しい式は次のとおりです:

self * mididevice:bcf2000.c[2]

なお、コントロール値は MIDI デバイスが提供するダンプされた値です。

Audio analyser デバイスを使うと、式に音声反応要素を含められます。音声分析器が音声ラインを分析するようにセットアップされると、その音声ラインは式に周波数分析を提供できるようになります。

audioline:name.c[lower..upper] - 選択した周波数範囲から最大ダンプレベルを取得します。lower 値を含み、upper 値を含みません。

たとえば、プロジェクトに line_left 音声ラインを選択した音声分析器がセットアップされているとします。次の式を使って、(127 のうち)最も低い 10 の周波数バケットの最大ダンプ値を照会します。これは低音周波数を確認します。

audioline:line_left.c[0..10]

下の図は、下に文字が付いたセクションに分かれています。各セクションの説明は図の下にあります。

Audio analyser expression

A: 255 = 結果を 255 倍します(audioline の周波数応答は 0.01.0 の範囲です)

B: audioline = 後続のテキストを音声式として識別します

C: line_left = どの音声ラインを使うか

D: .c[0..10] = 分析する周波数範囲

分析する周波数をどう選ぶか?

Section titled “分析する周波数をどう選ぶか?”

音声スペクトルは周波数範囲全体で 127 ステップあります。

Audio spectrum

音声分析器は、ライン入力の全周波数範囲にわたって 127 の周波数バケットを構築します。

0 から 127 までの任意の周波数、または周波数範囲は、上記の式のパート D を使って分析できます。たとえば:

  • 低音周波数のみを分析するには、[0..10] のような範囲を選びます。
  • 高音周波数のみを分析するには、[100..127] のような範囲を選びます。

予想されるライブ入力のさまざまな録音に基づいて範囲を試し、結果が堅牢であることを確認することを推奨します。