Scrab Slider

image171112_01

ムービープレイヤー等で見られる、再生しながら動くスライダーノブを操作したり、停止したスライダーノブをスライド、その位置からまた再生等を行う仕組みです。

image171112_07

まずは、少しSlider COMPについておさらいです。Slider COMPのネットワークは意外とシンプルで、その仕組はPanel CHOPで親階層のパネルの状態(マウスポインタの位置、ボタンの状況など)を0〜1でスライダー値として出力しています。これと並行して、Panel CHOPから得たマウスポインタの位置とPanelページのパラメータの値を以下のようなスクリプトで使用して、マウスポインタの位置にスライダーノブを移動させています。

parent().panel.u.val * parent().par.panelw - me.par.panelw / 2

スクリプトの内容は
親階層のパネルのU値(Panel CHOPの値と同じ) x パネルの幅(親階層のLayoutページwidthパラメータ)- ノブの横幅(自身のLayoutページwidthパラメータ) / 2

という内容になります。
つまり、スライダーの値自体はマウスポインターの状態を基に値は出力されて、ノブの位置はこれを基に計算されているということになります。ですから、再生ボタンを押して自動でノブが移動する仕組みはPanel CHOPとは別に数値を更新するロジックを用意してPanel CHOPと連携すれば、仕組みはできそうです。

image171112_02

そこで上図のようなロジックを組みました。原理はPanel CHOPで得た数値に0〜1のRampチャンネルが加算されることで、Playボタンを押してスライダーノブが移動する(数値も更新される)ように組まれています。これだけだと、スライダーが0以外だと1以上の数値になってしまうため、Limit CHOPで出力値を0〜1の範囲でループするように調整しています。

image171112_03

Panel CHOPから得るチャンネルはマウスポインタの横方向、ボタンクリックのステートを使用します。

image171112_04

マウスポインタの値に加算するRampチャンネルは、Button CHOPからのON/OFFチャンネルをPlayパラメータにExportして、Panel CHOPからのマウスポインタのSelectステートをResetの入力コネクタに接続しています。こうすることで、Playボタンを押すとRampチャンネルの値が加算されてスライダーノブが移動します。Playボタンを停止、或いはスクラブすると、SelectステートがONになり、Rampの進行がリセットされて加算される値が0から始められます。一方、Panel CHOPから取得したマウスポインタの位置はドラッグすれば、随時ノブを配置すべき位置は更新、クリックすれば位置を更新、加算するRampを0から始まるようリセットされます。

image171112_05

Limit CHOPでスライダーが0以外だと1以上の数値になった場合に出力値を0〜1の範囲でループするように調整します。Maximunの値は1.00001にしています。1に設定した場合、手動でスライダーノブを1にすると、その時点で0にループしてしまうため、1よりほんの少し最大値を大きくします。

image171112_06

最後にLimitまでのロジックの処理結果使ってスクリプトをスライダーノブのパネルパラメータに入力して位置をコントロールします。

op(‘out1’)[‘V1_Count’] * me.parent().par.panelw – me.par.panelw / 2

前述したデフォルトのSlider COMPのスクリプトとの違いは先頭の関数 op(‘out1’)[‘V1_Count’] で、これはout1といコンポーネント外に接続するout CHOP(out1)のV1_Countというチャンネル名の値を意味します。

Download TouchDesigner File