Timer CHOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

Timer CHOP のタイマー制御機能を示す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – タイマー制御とシーケンス再生

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 等の状態チャンネル

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

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
  1. Button COMP をクリック → Timer CHOP の Start パラメータにパルスを送る
  2. Timer CHOP の Length を 3 秒に設定し、On Done を「Do Nothing」に
  3. 出力 timer_fraction(0→1)を Math CHOP で照明強度範囲にマッピング
  4. ライトの強度パラメータに Export し、3 秒間でフェードイン演出

Example 2: ループ再生で背景アニメーションを駆動 🔁

Timer CHOP (Length=10秒, Cycle=On, On Done=Re-Start) → timer_fraction → Geometry COMP の Translate
  1. Timer CHOP の Length を 10 秒、Cycle をオン、Cycle Limit をオフに設定
  2. On Done を「Re-Start without Initializing」にして連続ループ
  3. timer_fraction を Math CHOP で位置範囲にマッピング
  4. Geometry COMP の Translate に Export し、10 秒周期で位置が往復するアニメーションを駆動

Example 3: Segments DAT でシーン切替シーケンス 🧩

Table DAT (segments) → Timer CHOP (Segment Method: Serial Timers) → segment + segment_plus_fraction → Switch TOP
  1. Table DAT に begin / length 列を持つ複数行を用意(例: Intro 5秒 → Main 20秒 → Outro 8秒)
  2. Timer CHOP の Segments DAT に Table のパスを設定し、Segment Method を「Serial Timers」に
  3. Start パルスで全セグメントを直列再生し、segment チャンネルを Switch TOP の Index に Export
  4. シーン切替が Segments DAT の編集だけで完結する

Example 4: 外部 timecode に同期した映像再生 🕓

Timecode CHOP/DAT → Timer CHOP (Time Control: External Timecode) → master_seconds → Movie File In TOP
  1. 外部 timecode ソース(LTC 受信 CHOP / DAT 文字列 / Timecode Class オブジェクト)を用意
  2. Timer CHOP の Time Control を「External Timecode」、External Timecode Object を該当パスに設定
  3. Master Time Count を「Seconds」にして master_seconds チャンネルを出力
  4. 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 🎯


Info CHOP情報 📊

Timer CHOP は Info CHOP による詳細情報取得に対応しています。

CHOP固有情報 🎚️

  • start: CHOPインターバルの開始(サンプル単位)
  • length: CHOPのサンプル数
  • sample_rate: フレーム毎秒のサンプルレート
  • num_channels: CHOPのチャンネル数
  • time_slice: タイムスライス有効時は1、無効時は0
  • export_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 のジッタを平滑化

参考資料 📚

その他 🔗

公式リソース 📖

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました