
概要 📖 – タイマー制御とシーケンス再生
Timer CHOPは、Initialize / Start パルスから時間カウントを開始し、タイマー進行率・経過時間・サイクル状態などを多彩なチャンネルとして出力する CHOPです。Length / Delay / Cycle / Segments DAT による単発・ループ・複数セグメント駆動を 1 オペレータで完結します。外部 timecode 同期、Cue 一時停止、コールバック発火まで標準で扱えます。
主な用途 🎯
- イベントの時間制御(指定秒数経過後にトリガ発火・コールバック実行)
- アニメーション・シーケンスの再生制御(開始・停止・ループ・速度変更)
- Segments DAT を用いた複数タイマーの直列・並列実行
- 外部 timecode / CHOP チャンネルへの同期再生
- Cue 機能による任意時点での一時停止・リスタート
データフロー 🔄
入力: Initialize / Start パルス + Length / Delay 設定
↓
タイマー駆動(Active / Time Control / Speed)
↓
Cycle / Segment 進行管理
↓
Sub Range / External 制御
↓
出力: timer_fraction / timer_active / running / done 等の状態チャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Timer Page ⏱️
Active .active 🎛️
Timer CHOP のクック条件を制御するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Never | .never |
クックしない(停止状態) |
| Always | .always |
常にクック(毎フレーム評価) |
| While Running | .running |
running 状態の間のみクック |
| While Playing | .playing |
running 状態かつ Play がオンの間のみクック |
Time Control .timecontrol ⏯️
タイマーの時間ソースを選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Sequential | .sequential |
現在のフレーム位置に依存せず連続出力(タイムライン非依存) |
| External Timecode | .timecode |
外部 timecode の値で出力を駆動 |
Length Type .lengthtype 📏
タイマー長の定義方法を選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Fixed | .fixed |
有限長(指定された duration で完了) |
| Infinite | .infinite |
無限長(停止指示があるまで継続) |
Run Values .runvalues 🔢
Start でカウント開始した最初のフレームでの timer_frames / timer_samples / timer_fraction の初期値を選ぶメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Zero | .zero |
初期化直後と同じく 0 から開始 |
| One | .one |
running が 1 になった最初のフレームで 1 フレーム分進んだ値から開始 |
On Done .ondone ✅
タイマーが完了(Done)したときの挙動を選択するメニュー(onDone コールバックでも追加カスタマイズ可)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Do Nothing | .donothing |
何もしない |
| Re-Initialize | .reinit |
再初期化(Initialize パルスと同等) |
| Re-Start | .restart |
再初期化 + 再スタート(Start パルスと同等) |
| Re-Start without Initializing | .restartnoinit |
初期化せずに再スタート |
Length / Delay / Cycle 🔁
Length .length 📐
– タイマーの長さ(float)
– 単位は Length Units メニュー(Samples / Frames / Seconds)で指定
Delay .delay ⏳
– Start 後にカウント開始するまでの遅延時間(float)
– 単位は Delay Units メニューで指定
Play .play ▶️
– タイマー再生の一時停止トグル(onoff)
– Speed に対する 0/1 倍率として作用
Speed .speed ⚡
– タイマーの再生速度(デフォルト 1)
– 値を上げると早送り、下げるとスローモーション
Cue .cue 🛑
– Cue Point で再生を凍結するトグル
Cue Point .cuepoint 📍
– Cue で凍結する時間位置
– 単位は Cue Units メニュー(Samples / Frames / Seconds / Fraction)で指定
Cue Pulse .cuepulse ⚡
– Cue Point へ即座にジャンプするパルス
Cycle .cycle 🔄
– サイクル末尾に達したら 0 に戻ってループするかどうか(デフォルト Off)
Cycle Limit .cyclelimit 🔚
– Cycle がオンのとき、無限ループするか最大回数で停止するかの選択
Maximum Cycles .maxcycles 🔢
– Cycle Limit がオンのとき、最大ループ回数
Cycle End Alert .cycleendalert 🔔
– サイクル / セグメント / Done 状態に達する何秒前に onCycleEndAlert() コールバックを呼ぶか
– 単位は Notify Units メニューで指定
Defer Par Changes .deferpars ⏸️
– On: Length / Cycles 等のパラメータ変更を次の Initialize まで適用しない
– Off: パラメータ変更を即座に反映(途中ジャンプの可能性あり)
Initialize .initialize 🟢
– (pulse)タイマーを準備状態に戻すパルス
– delay / timer / cycle / segment カウンタを 0 にリセットし、onInitialize() 完了後に ready チャンネルを 1 にする
Start .start 🟩
– (pulse)タイマーカウントを開始するパルス
– 未初期化なら自動的に Initialize → Start を実行
Exit Segment at End of Cycle .exitendcycle ⏹️
– (pulse)現在のサイクル終了時にセグメントを抜ける
Go to End of Cycle .gotoendcycle ⏭️
– (pulse)サイクルを即座に終了
Go to Done .gotodone 🏁
– (pulse)即座に Done 状態に遷移
Callbacks DAT .callbacks 📜
– Timer CHOP のコールバック関数を定義する DAT へのパス
単位メニュー (Length / Delay / Cue / Notify Units) .lengthunits 📏
Length / Delay / Cue Point / Cycle End Alert 各時間値の単位を選ぶメニュー(Cue Units のみ Fraction(0-1) も選択可)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Samples (I) | .samples |
サンプル単位 |
| Frames (F) | .frames |
フレーム単位 |
| Seconds (S) | .seconds |
秒単位 |
| Fraction (%) | .fraction |
0-1 の比率(Cue Units のみ選択可) |
Segments Page 🧩
Segment Method .segmethod 🪡
複数セグメント(タイマー)の再生方式を選ぶメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Serial Timers | .serial |
セグメントを直列再生(順番に back-to-back) |
| Parallel Timers | .parallel |
セグメントを並列再生(同時に進行、各セグメントごとに出力チャンネル) |
Segment Units .segunits 📏
Segments DAT の delay / begin / length / cycleendalert 列の単位を指定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Samples | .samples |
サンプル単位 |
| Frames | .frames |
フレーム単位 |
| Seconds | .seconds |
秒単位 |
Custom Channel Interpolation .interpolation 📈
Segments DAT のカスタム列をチャンネル化するときの値補間方式を選ぶメニュー(デフォルトはセグメント先頭でステップ的に切り替え)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Step to Value | .steptovalue |
セグメント先頭で値を即切替(補間なし) |
| Linear to Value | .lineartovalue |
線形補間で次の値へ遷移 |
| Ease In to Value | .easeintovalue |
イーズイン(最初ゆっくり → 後半加速) |
| Ease Out to Value | .easeouttovalue |
イーズアウト(最初速く → 後半減速) |
| Ease In-Out to Value | .easeinouttovalue |
両端でイーズ(中央加速) |
Segments DAT 連携 📋
Segments DAT .segdat 📊
– 1 行 1 セグメントの table DAT へのパス
– 列見出しは delay または begin / length / cycle / cyclelimit / maxcycles / cycleendalert をサポート(同名パラメータをオーバーライド)
– begin は Serial / Parallel いずれでも Start からの絶対経過時間を指す
– 任意のカスタム列も追加可能(数値列はチャンネル化、任意列は Info DAT へ)
Segments End Time .segsendtime 🕒
– 終了時刻の算出方法を指定するメニュー(公式 docs に詳細記述あり)
Columns to Custom Channels .channelcolumns 📡
– 数値カスタム列を出力チャンネル化する際に列名を指定
– length / delay 等の標準列もチャンネル出力可
Columns to Info DAT .infocolumns 📤
– 任意のカスタム列を Info DAT に出力する際に列名を指定
Go to Previous Segment .gotoprevseg ⏮️
– (pulse)前のセグメントにジャンプ
Go to Next Segment .gotonextseg ⏭️
– (pulse)次のセグメントにジャンプ
Sub Range Page ✂️
Sub End Action .subendaction 🎚️
Sub Range の終端に到達したときの挙動を選ぶメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Pause at End | .pause |
Sub Range 終端で再生を一時停止 |
| Loop at End | .loop |
Sub Range 内をループ再生 |
Sub Range 設定 📐
Sub Range .subrange 🟦
– フル長のうち一部を切り出して出力するモードのトグル
Sub Start .substart ⏱️
– Sub Range の開始位置(単位は Sub Start Units で指定)
Sub End .subend ⏱️
– Sub Range の終了位置(単位は Sub End Units で指定)
Sub Start Units / Sub End Units .substartunits 📏
– Sub Range の単位を Samples / Frames / Seconds から選択
Outputs Page 📡
Timer Count .outtimercount 🕐
経過時間を timer_seconds / timer_frames / timer_samples として出力する単位を選ぶメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
出力しない |
| Samples | .samples |
サンプル単位で timer_samples を出力 |
| Frames | .frames |
フレーム単位で timer_frames を出力 |
| Seconds | .seconds |
秒単位で timer_seconds を出力 |
| All | .all |
Samples / Frames / Seconds の 3 チャンネル全て出力 |
Delay Count .outdelaycount ⏳
Delay 区間中のカウント出力単位を選ぶメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
出力しない |
| Samples | .samples |
サンプル単位 |
| Frames | .frames |
フレーム単位 |
| Seconds | .seconds |
秒単位 |
| All | .all |
全単位を出力 |
Length / Cumulative / Playing / Running / Master Time Count .outlength 📊
セグメント長や各種累積時間(Cumulative / Playing / Running / Master)を出力する単位を選ぶメニュー(5 つの出力パラメータが共通の単位選択肢を持つ)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
出力しない |
| Seconds | .seconds |
秒単位 |
| Frames | .frames |
フレーム単位 |
| Samples | .samples |
サンプル単位 |
| All | .all |
全単位を出力 |
状態出力チャンネル 🚦
Timer Fraction .outfraction 📈
– 各セグメントの 0-1 進行率を timer_fraction として出力
Timer Active .outtimeractive 🟢
– timer_fraction がカウント中(非ゼロ)の間 1 を出力する timer_active
Timer Pulse .outtimerpulse 💥
– タイマーが Length に達した瞬間に timer_pulse を 1 フレーム発火
Delay Fraction .outdelayfraction 📉
– Delay 区間中の 0-1 進行率を delay_fraction として出力
Initializing .outinit 🌀
– onInitialize() が非ゼロを返す間 initializing = 1 を出力
Ready .outready 🟦
– Initialize 完了後 Start 待ちの間 ready = 1 を出力
Ready Pulse .outreadypulse ✨
– 初期化完了の瞬間に発火するパルス(即 Start した場合も発火)
Running .outrunning 🏃
– Start から Done までの間 running = 1 を出力
Done .outdone ✅
– 完了時に done = 1 を出力
Done Pulse .outdonepulse 🔔
– 全タイマーが完了した瞬間にパルス出力
Cycles .outcycle 🔁
– 完了したサイクル数を cycles として出力(最初のサイクル中は 0)
Cycle Pulse .outcyclepulse 💢
– 各サイクル末尾でパルス出力(1 サイクルしか無い場合も発火)
Cycles + Fraction .outcycleplusfraction 🌀
– サイクル数 + 内部進行率の合算値を cycle_plus_fraction として出力
Segment .outseg 🧩
– 現在のセグメント番号を segment として出力(0 始まり)
Segment Pulse .outsegpulse 📍
– 各セグメント末尾でパルス出力 segment_pulse
Segment + Fraction .outsegplusfraction 🪢
– セグメント番号 + 内部進行率の合算 segment_plus_fraction
External Page 🌐
External Units .extunits 📏
External 制御で使用する時間単位を選ぶメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Samples (I) | .samples |
サンプル単位 |
| Frames (F) | .frames |
フレーム単位 |
| Seconds (S) | .seconds |
秒単位 |
| Fraction (%) | .fraction |
0-1 比率 |
External 制御パラメータ 🔌
External CHOP .extchop 🎛️
– タイマーの現在位置を駆動する CHOP のパス
External Channel .extchannel 📡
– External CHOP 内で実際に使うチャンネル名
External Timecode Object / CHOP / DAT .exttcop 🕓
– timecode で時間制御する場合のソース
– hour/second/minute/frame チャンネルを持つ CHOP / 1 セルに timecode 文字列を持つ DAT / Timecode Class オブジェクトのいずれかを参照
External Start Offset .extstartoff 🟩
– 外部時間値のうち、タイマーが Start すべき時刻
External Initialize Offset .extinitoff 🟦
– 外部時間値のうち、タイマーが Initialize すべき時刻
Sample Rate .rate ⚡
– CHOP の出力サンプルレート(デフォルト 60 samples/sec)
– Length / Delay / Cycle End Alert を Samples 単位指定したときの基準にもなる
Common Page 🔧
Time Slice .timeslice ⏱️
Time Slice モードの強制設定:
- オン: チャンネルを「タイムスライス」モードに強制
- タイムスライス: 前回のクックフレームから現在のクックフレームまでの時間
Scope .scope 🎯
影響を受けるチャンネルの絞り込み:
- Scope 文字列: 影響を受けるチャンネルを指定する文字列
- パターンマッチング:
*や[1-10]等のパターンが使用可能
Sample Rate Match .srselect ⚡
複数の入力 CHOP のサンプルレートが異なる場合の処理方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| Resample At First Input’s Rate | .first |
最初の入力のレートで他をリサンプル |
| Resample At Maximum Rate | .max |
最高サンプルレートでリサンプル |
| Resample At Minimum Rate | .min |
最低サンプルレートでリサンプル |
| Error If Rates Differ | .err |
レート不一致でエラー |
Export Method .exportmethod 📤
CHOP チャンネルをパラメータに接続する方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| DAT Table by Index | .datindex |
DAT テーブルのインデックスでチャンネルとパラメータを対応付け |
| DAT Table by Name | .datname |
DAT テーブルの行名でチャンネルとパラメータを対応付け |
| Channel Name is Path:Parameter | .autoname |
チャンネル名を `path:parameter` 形式で記述し直接対応付け |
Export Root .autoexportroot 🌳
Channel Name is Path:Parameter モード時のパス基点:
- Export Root パス:
autonameモードでチャンネル名のパス部分を相対化する基点 OP のパス
Export Table .exporttable 📋
DAT Table エクスポート方式での参照 DAT:
- Export Table DAT:
datindex/datnameモード時に参照する DAT のパス
Rename from .commonrenamefrom 🔤
リネーム対象チャンネルのパターン:
- Rename from パターン: リネーム対象とするチャンネル名のパターンマッチング文字列
Rename to .commonrenameto 🔁
リネーム後の置換パターン:
- Rename to パターン: Rename from にマッチしたチャンネルの新しい名前パターン (デフォルトはリネームなし)
実践アイデア 💡
Example 1: Start パルスで光るシーンの時間制御 💡
Button COMP → Timer CHOP (Start, Length=3秒) → timer_fraction → Math CHOP → Light Intensity
- Button COMP をクリック → Timer CHOP の Start パラメータにパルスを送る
- Timer CHOP の Length を 3 秒に設定し、On Done を「Do Nothing」に
- 出力 timer_fraction(0→1)を Math CHOP で照明強度範囲にマッピング
- ライトの強度パラメータに Export し、3 秒間でフェードイン演出
Example 2: ループ再生で背景アニメーションを駆動 🔁
Timer CHOP (Length=10秒, Cycle=On, On Done=Re-Start) → timer_fraction → Geometry COMP の Translate
- Timer CHOP の Length を 10 秒、Cycle をオン、Cycle Limit をオフに設定
- On Done を「Re-Start without Initializing」にして連続ループ
- timer_fraction を Math CHOP で位置範囲にマッピング
- Geometry COMP の Translate に Export し、10 秒周期で位置が往復するアニメーションを駆動
Example 3: Segments DAT でシーン切替シーケンス 🧩
Table DAT (segments) → Timer CHOP (Segment Method: Serial Timers) → segment + segment_plus_fraction → Switch TOP
- Table DAT に begin / length 列を持つ複数行を用意(例: Intro 5秒 → Main 20秒 → Outro 8秒)
- Timer CHOP の Segments DAT に Table のパスを設定し、Segment Method を「Serial Timers」に
- Start パルスで全セグメントを直列再生し、segment チャンネルを Switch TOP の Index に Export
- シーン切替が Segments DAT の編集だけで完結する
Example 4: 外部 timecode に同期した映像再生 🕓
Timecode CHOP/DAT → Timer CHOP (Time Control: External Timecode) → master_seconds → Movie File In TOP
- 外部 timecode ソース(LTC 受信 CHOP / DAT 文字列 / Timecode Class オブジェクト)を用意
- Timer CHOP の Time Control を「External Timecode」、External Timecode Object を該当パスに設定
- Master Time Count を「Seconds」にして master_seconds チャンネルを出力
- Movie File In TOP の Cue Point に Export し、外部 timecode と再生位置を同期
関連オペレータ 🔗
類似機能OP 🔍
- Trigger CHOP — ADSR エンベロープを発火するタイマー型 CHOP(Length と Decay を別管理)
- Count CHOP — イベント数のカウント(時間ではなくパルス回数を計測)
- LFO CHOP — 周期波形を連続生成(タイマー駆動ではなく低周波振動)
組み合わせ推奨OP 🔄
- Math CHOP — timer_fraction を任意の値域にマッピング
- Logic CHOP — running / done / ready 等の状態チャンネルで条件分岐
- Trigger CHOP — timer_pulse / done_pulse をエンベロープのトリガに利用
- Filter CHOP — timer_fraction にスムージングを掛けてイージングカーブ化
- Switch CHOP — segment 番号で複数 CHOP ストリームを切替
- Hold CHOP — done_pulse / segment_pulse の瞬間値を保持
- Pattern CHOP — timer_fraction を入力にして任意の波形カーブを生成
前処理・後処理CHOP 🎯
- 前処理: Constant CHOP、Logic CHOP、Pattern CHOP、LFO CHOP
- 後処理: Math CHOP、Filter CHOP、Trigger CHOP、Switch CHOP、Hold CHOP
Info CHOP情報 📊
Timer CHOP は Info CHOP による詳細情報取得に対応しています。
CHOP固有情報 🎚️
start: CHOPインターバルの開始(サンプル単位)length: CHOPのサンプル数sample_rate: フレーム毎秒のサンプルレートnum_channels: CHOPのチャンネル数time_slice: タイムスライス有効時は1、無効時は0export_sernum: Export接続の更新回数
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間(ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 警告数errors: エラー数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: Start を押してもタイマーが進まない
✅ Solution:
- Active が「Never」になっていないか確認(「Always」または「While Running」推奨)
- Initialize が完了して ready チャンネルが 1 になっているか確認(未初期化なら Start で自動初期化されるが、エラーがあると ready にならない)
- Play がオンか、Speed が 0 でないかを確認
❌ Problem: ループしないで 1 回で終わってしまう
✅ Solution:
- Cycle をオンにし、Cycle Limit をオフ(または十分大きい Maximum Cycles)に設定
- On Done を「Re-Start」または「Re-Start without Initializing」に変更
- Length Type が「Fixed」になっているか確認(Infinite では Cycle 概念が無い)
❌ Problem: パラメータを変更しても再生中に反映されない
✅ Solution:
- Defer Par Changes がオンの場合、変更は次の Initialize まで保留される(即時反映したいならオフに)
- Initialize パルスを送って明示的に再準備
- Segments DAT を使っている場合は DAT の値が優先される(Length 列等で上書きされていないか確認)
❌ Problem: 外部 timecode 同期で位置がジャンプ・揺れる
✅ Solution:
- External Timecode ソースのフォーマット(hour/minute/second/frame チャンネル名)が正しいか確認
- External Start Offset / External Initialize Offset の値が想定通りか確認
- 前段に Filter CHOP を入れて timecode のジッタを平滑化
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

