
概要 📖 – チャンネル記録と再生バッファ
Record CHOPは、入力されたチャンネルを時系列に記録してバッファとして保持・再生する CHOPです。Active 入力での録音 ON/OFF 制御、Segment による固定長スライディングウィンドウ、第 3 入力による外部リセット条件をサポートします。
主な用途 🎯
- ライブ入力チャンネルの時系列記録(センサー値・MIDI・OSC データのキャプチャ)
- 音声・モーションデータの一定区間バッファリングと再生
- ジェスチャー・パフォーマンス動作のスナッピング録音(Auto Range モード)
- フィードバック演出のためのスライディングウィンドウ蓄積(Segment モード)
- 外部入力トリガーによる記録のリセット・再スタート制御
データフロー 🔄
入力: ライブチャンネル + Active 入力 + Reset 入力
↓
Record 状態判定(Off / On / Add / Auto Range)
↓
サンプリング(Time Slice or Current Frame)
↓
Interpolation(Hold / Linear / Cubic)
↓
出力: 記録済みチャンネルバッファ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Control Page 📋
Record .record 🎙️
記録のタイミングと方式を決定するメニュー(いつ・どれだけ記録するか)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
出力をそのまま変更せず保持(記録停止) |
| On | .on |
再生中は常に記録。Active 入力が off の間は入力値を現在の値で保持 |
| Add | .add |
既存の記録済みチャンネルにオフセット加算。Active 入力 off の間は変更しない |
| Auto Range | .auto |
Active の on/off に基づいて記録区間を自動生成 |
Record Input .sample ⏱️
Time Slice 全体をサンプリングするか、現在フレームのみを取得するかを切り替えるパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Record Input | .sample |
Current Time Slice はオーディオ等で全フレームを評価する用途に推奨。Current Frame は現在フレームのみクックし、デバイス入力等のフレーム間補間を伴う用途に向く(オーディオでは非推奨)。 |
Interpolation .interp 🔁
サンプル間欠損部分をどう補間するかを決定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Hold Previous Value | .hold |
直前のサンプル値を保持(階段状) |
| Linear | .linear |
前後サンプル間を直線補間(線形) |
| Cubic | .cubic |
前後サンプル間を 3 次曲線で滑らかに補間 |
Record Output .output 📤
CHOP から出力するフレーム範囲を決定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Full Range | .full |
記録開始フレームから成長していくフルレンジ出力。2 周目のフレームは上書きされる(Reset Channels で初期化) |
| Current Frame at Frame 1 | .frame1 |
現在フレームをフレーム 1 にシフトして出力。値が変動しない場合はクックを抑制 |
| Segment | .segment |
Record Segment で指定した固定長のスライディングウィンドウとして出力 |
Record Segment / Reset 📏
Record Segment .segment 📐
– 固定長インターバル内でデータを記録、最新サンプルが末尾に追加され古いサンプルが先頭側へシフト
– いわゆる「スネーク」型のスライディングウィンドウを作るのに使う
Record Segment Unit .segmentunit 📏
– Record Segment の単位を選択(Samples / Frames / Seconds)
– 用途に応じてサンプル数指定・フレーム数指定・秒指定を切替
Reset Channels .reset 🧹
– 現在の出力をクリアして以降のチャンネルを 1 サンプル長から再開
– 録音を一からやり直したいときに使う
Reset Condition .resetcondition 🔄
Record CHOP の 3 つ目の入力(Input 2)にチャンネルを接続したとき、何が起きたらリセットをトリガーするかを決定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off to On | .offtoon |
入力チャンネルが Off → On(0 → 1)に変化したときリセット |
| While On | .on |
入力チャンネルが On(1)の間リセット |
| On to Off | .ontooff |
入力チャンネルが On → Off(1 → 0)に変化したときリセット |
| While Off | .off |
入力チャンネルが Off(0)の間リセット |
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: センサー値のライブ波形ロギング 📊
Serial CHOP → Record CHOP (Record: On, Output: Full Range) → Trail CHOP
- Serial CHOP でセンサーからのリアルタイム値を取得
- Record CHOP の Record を「On」、Record Output を「Full Range」に設定
- Active 入力(第 2 入力)に開始トリガーを接続
- セッション中のセンサー履歴が連続的に記録され、後段で波形解析や再生が可能
Example 2: スライディングウィンドウでのモーション残像表現 🌀
Mouse In CHOP → Record CHOP (Output: Segment, Segment: 60 frames) → CHOP to SOP
- Mouse In CHOP でカーソル座標を取得
- Record CHOP の Record Output を「Segment」、Record Segment を 60、Unit を「Frames」に設定
- 直近 60 フレーム分のサンプルが常時スライディングして出力
- CHOP to SOP に渡してマウス軌跡の残像をジオメトリ化
Example 3: 外部トリガーによる録音区間の自動切り出し 🎙️
Audio Device In CHOP → Record CHOP (Record: Auto Range) ← Active: Button COMP, Reset: Trigger CHOP
- Audio Device In CHOP でマイク入力を取得
- Record CHOP の Record を「Auto Range」に設定し、Active 入力(第 2 入力)にボタン CHOP を接続
- 第 3 入力にリセット用 Trigger CHOP を接続、Reset Condition を「Off to On」に設定
- ボタンを押している区間のみが自動的に切り出され、外部トリガーで録音バッファを初期化できる
関連オペレータ 🔗
類似機能OP 🔍
- Trail CHOP — チャンネル値の時間履歴をスライディングウィンドウとして保持
- Constant CHOP — 固定値を出力(記録なし)。Record の初期サンプルソースとして併用
組み合わせ推奨OP 🔄
- Trail CHOP — Record と組み合わせて記録波形を可視化
- Trigger CHOP — Record の Reset 入力に接続してエンベロープ駆動のリセット
- Filter CHOP — 記録前のスムージングや、再生後のポストフィルタ
- Math CHOP — 記録バッファの値域変換・スケーリング
- Analyze CHOP — 記録済みバッファの統計値(最大・平均・ピーク)を抽出
前処理・後処理CHOP 🎯
- 前処理: Filter CHOP、Resample CHOP、Math CHOP、Lag CHOP、Audio Device In CHOP
- 後処理: Trail CHOP、Analyze CHOP、Math CHOP、Select CHOP、Hold CHOP
Info CHOP情報 📊
Record 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: 記録が始まらない / Active 入力が効かない
✅ Solution:
- Record パラメータが「Off」になっていないか確認、On / Add / Auto Range のいずれかを選択
- Active 入力(第 2 入力)に接続したチャンネル値が 0 のままになっていないか確認、1 以上で記録 ON
- Auto Range モードでは Active の on/off 遷移が必要、常時 1 だと区間が確定しない
❌ Problem: オーディオを記録すると不連続音や欠落サンプルが出る
✅ Solution:
- Record Input を「Current Time Slice」に設定し全フレームを評価させる(Current Frame ではフレーム間サンプルが欠落)
- Interpolation を「Linear」または「Cubic」に変更し、サンプル間を滑らかに補間
- 前段に Filter CHOP を入れてスパイクノイズを除去
❌ Problem: Segment モードでバッファ長が想定と違う
✅ Solution:
- Record Segment Unit が「Samples / Frames / Seconds」のどれになっているか確認、単位ミスでスケールが桁違いになる
- Record Segment の値とサンプルレートの組み合わせを再確認(例: 1 秒 60 FPS なら 60 frames = 1 second)
- Reset Channels を 1 度押して既存バッファを初期化してから再記録
❌ Problem: Reset 入力でリセットがかからない
✅ Solution:
- 第 3 入力(Input 2)に Reset 用 CHOP が接続されているか確認
- Reset Condition が現在の入力波形の挙動に合っているか確認(Off to On / While On / On to Off / While Off)
- 前段に Logic CHOP を入れてリセット用パルスを整形
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

