前回だいぶ面倒なところの説明を終えたので、さらに応用編という感じでいってみましょう。
画像の幅などの情報は input_info() というAPIを使って取得するのですが、このAPIに渡す画像を生成したVPのパラメータ値を取得することも可能になっています。
もし他のVPのパラメータも参照できるのであれば、VP間でパラメータを連動させたり出来ます。1つのVPだけでは可変パラメータが足りなくても複数のVPで構築が可能になったり、パラメータモジュレーションなども出来たりと、アイデア次第でいろいろ出来そうな気がしてきます。
とはいえ実際のところ、この input_info() を呼び出している側は相手のVPがどんな効果を実装しているのか、パラメータが一体何なのか、などといった情報を一切知ることは出来ません。VPは全て単なるスクリプトなので、VPで実装しているエフェクトのタイプといったものも存在しませんし、単純にパラメータの値を取れるというだけです。
こういう場合は、ある画像のためのVP(パラメータ送信側)とこのパラメータを取得する側のVP(パラメータ受信側)をうまくつながるように手動で合わせてやれば、意図したパラメータを送受信可能です。これを実現するには、自分で決まりを作って、それに沿ってパラメータが受け渡されるようにVPを挿入してプログラムを書くといった比較的高度な技量が要求されます(要するに自分で設計しないといけない)。
自分の書いているVPがどの位置関係にいるVPの画像を使用するかを正確に把握し、そのVPのパラメータセットも自分で構築しないといけません。この時どの画像を利用するのか正確に把握する必要がありますが、前回の記事に書いたような画像管理について理解していれば難しくはありません。
やるべきことは以下の通り。
受信側VPから画像を取得する際に気を付ける必要がある点は、TrackFXにVPがあると、そのトラックが生成する最終画像はItem側ではなくTrackFX側のVPの画像である点です。Item単位で送信するパラメータを変えたいなどといった場合は、input_next_item()などのAPIを駆使して正確にそのItemのVPの画像を指定するようにして下さい。
まずは送信側VPスクリプト。

送信用パラメータを1つ実装しました。名前はprm1にしてますが何でも構いません。
受信側のVPスクリプトはこんな感じにしました。

色のついた半透明の矩形を動画の上に描画するだけです。
色のRチャンネルに受信したパラメータを使っていますので、これによって色が変わります。
で、動画とVPをセットしたのが以下のような感じ。

動画のItem 1, 2がありますが、Item1ではprm1=1、Item2ではprm1=0に設定しています。
今は再生カーソルがItem1に重なっているのでprm1=1ですが、次の画像だとItem2に重なっているためprm1=0になり、矩形の色が変わります。

動画にするとこんな感じ。

何やら説明の段階では難しそうな印象だったかもしれませんが、やってみると簡単ですね。
まぁでも正直に言うとここまでやる機会は少ないかもしれません。どうしても複数のVPを連携させたいという場合の切り札という感じでしょうか。それにしてもこういった自由度の高い機能を用意してくれているというのはありがたいですね。
画像を生成したVPのパラメータ取得について
再生カーソルのタイミングで存在する動画とVoiceProcessor(以下VP)はそれぞれ画像を生成していて、VPのAPIでそれらの画像にアクセス出来ることは前回説明しました。画像の幅などの情報は input_info() というAPIを使って取得するのですが、このAPIに渡す画像を生成したVPのパラメータ値を取得することも可能になっています。
// 画像の生成に使われたVPのパラメータ1, 2も取得する例 isOK = input_info( img, w, h, srctime, wet, param1, param2 );
- img: 情報を取得したい画像のハンドルを渡す
- w: 画像の幅を取得
- h: 画像の高さを取得
- srctime: ItemのSourceメディアにおける再生時刻(Item最初からの再生時刻ではなく、Source内の時刻)を取得
- wet: VPのFX Wet値(Itemクロスフェード具合も考慮)を取得
- param1:imgを生成したVPのパラメータ1を取得
- param2:imgを生成したVPのパラメータ2を取得
もし他のVPのパラメータも参照できるのであれば、VP間でパラメータを連動させたり出来ます。1つのVPだけでは可変パラメータが足りなくても複数のVPで構築が可能になったり、パラメータモジュレーションなども出来たりと、アイデア次第でいろいろ出来そうな気がしてきます。
とはいえ実際のところ、この input_info() を呼び出している側は相手のVPがどんな効果を実装しているのか、パラメータが一体何なのか、などといった情報を一切知ることは出来ません。VPは全て単なるスクリプトなので、VPで実装しているエフェクトのタイプといったものも存在しませんし、単純にパラメータの値を取れるというだけです。
こういう場合は、ある画像のためのVP(パラメータ送信側)とこのパラメータを取得する側のVP(パラメータ受信側)をうまくつながるように手動で合わせてやれば、意図したパラメータを送受信可能です。これを実現するには、自分で決まりを作って、それに沿ってパラメータが受け渡されるようにVPを挿入してプログラムを書くといった比較的高度な技量が要求されます(要するに自分で設計しないといけない)。
自分の書いているVPがどの位置関係にいるVPの画像を使用するかを正確に把握し、そのVPのパラメータセットも自分で構築しないといけません。この時どの画像を利用するのか正確に把握する必要がありますが、前回の記事に書いたような画像管理について理解していれば難しくはありません。
パラメータ送受信のやり方の例
ここではパラメータ送受信の大まかなやり方を説明します。やるべきことは以下の通り。
- 送信したいパラメータを並べたVPを実装。パラメータ以外は gfx_blit( 0 ); とだけ書いておけば、ひとまず問題ないかと。これを送信側VPと呼ぶことにします。
- 送信側VPはItemFXやTrackFXの最後尾に配置。ここに置かないとVPのAPIで辿れません。
- 受信側VPを作成。これは必ず送信側VPより上側のトラックにないといけません。送信側VPの画像を取得し、その画像から input_info() でパラメータを取得するようなコードを実装。
受信側VPから画像を取得する際に気を付ける必要がある点は、TrackFXにVPがあると、そのトラックが生成する最終画像はItem側ではなくTrackFX側のVPの画像である点です。Item単位で送信するパラメータを変えたいなどといった場合は、input_next_item()などのAPIを駆使して正確にそのItemのVPの画像を指定するようにして下さい。
実装例を見てみる
・・・ハイ、言葉で説明するより実装を見た方が早いですね。まずは送信側VPスクリプト。

送信用パラメータを1つ実装しました。名前はprm1にしてますが何でも構いません。
受信側のVPスクリプトはこんな感じにしました。

色のついた半透明の矩形を動画の上に描画するだけです。
色のRチャンネルに受信したパラメータを使っていますので、これによって色が変わります。
で、動画とVPをセットしたのが以下のような感じ。

動画のItem 1, 2がありますが、Item1ではprm1=1、Item2ではprm1=0に設定しています。
今は再生カーソルがItem1に重なっているのでprm1=1ですが、次の画像だとItem2に重なっているためprm1=0になり、矩形の色が変わります。

動画にするとこんな感じ。

何やら説明の段階では難しそうな印象だったかもしれませんが、やってみると簡単ですね。
まぁでも正直に言うとここまでやる機会は少ないかもしれません。どうしても複数のVPを連携させたいという場合の切り札という感じでしょうか。それにしてもこういった自由度の高い機能を用意してくれているというのはありがたいですね。
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。