
概要 📖 – DAT テーブルから CHOP チャンネルへの変換
DAT to CHOPは、DAT テーブルの値を読み取り、行・列・セル単位で CHOP チャンネルへ変換する CHOPです。Table DAT や Convert DAT の数値セルをパターンマッチや式で柔軟に切り出し、4 種の出力形態でチャンネル化します。
主な用途 🎯
- Table DAT / Convert DAT のセル値を CHOP チャンネルとして読み出す
- CSV / TSV / 外部テキストデータの数値列を制御信号として取り込む
- 行・列を
Select Rows/Select Colsで柔軟に切り出す - 1 セル 1 サンプル / 行ごとチャンネル / 列ごとチャンネル / 値ごとチャンネル の 4 種出力形態を選択
- テーブルのヘッダ行・ヘッダ列を
names/values/ignoredで扱い分ける
データフロー 🔄
入力: Table DAT (またはセル値テーブル)
↓
行抽出 (Select Rows)
↓
列抽出 (Select Cols)
↓
Output 形態の決定 (Single / Channel per Row / Col / Value)
↓
出力: CHOP チャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
DAT to Page 📋
DAT 入力 .dat 📄
値の取得元となる DAT を指定する
DAT .dat 📄
– 値を読み出す元の DAT を指定する
– テーブル形式である必要がある (Table DAT または Convert DAT を To Table に設定したもの)
Select Rows .extractrows 🔍
行の抽出方法を選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| All | .all |
全行を選択 |
| by Name | .byname |
Start Row Name と End Row Name で範囲指定 |
| by Index | .byindex |
Start Row Index と End Row Index で範囲指定 |
| by Start Name, End Index | .bynameindex |
Start Row Name と End Row Index の組合せで範囲指定 |
| by Start Index, End Name | .byindexname |
Start Row Index と End Row Name の組合せで範囲指定 |
| by Values | .bynames |
行名を Row Select Values で明示的に指定 (パターン可) |
| by Condition | .byexpr |
From Column の値を式で評価し、true となる行を選択 |
行範囲・条件パラメータ 📐
Start Row Name .rownamestart 🔤
– 行選択範囲の開始行名を指定 (byname / bynameindex モードで使用)
Start Row Index .rowindexstart 🔢
– 行選択範囲の開始行インデックスを指定 (byindex / byindexname モードで使用)
End Row Name .rownameend 🔤
– 行選択範囲の終了行名を指定 (byname / byindexname モードで使用)
End Row Index .rowindexend 🔢
– 行選択範囲の終了行インデックスを指定 (byindex / bynameindex モードで使用)
Row Select Values .rownames 🎯
– 選択したい行名を明示的に列挙 (bynames モード)
– パターンマッチ可。例: row[1-4] で row1〜row4 をまとめて選択
Row Select Condition .rowexpr 🧮
– 各行に対して評価される Python 式を指定 (byexpr モード)
– デフォルト式は re.match('.*', me.inputCell.val) != None (全行マッチ)
– 親 OP 名で絞る例: parent().name + '[0-9]*'
From Column .fromcol 📥
– by Values モードで Row Select Values を照合する列を指定
– その列のセル値が Row Select Values と一致する行が選択される
Select Cols .extractcols 🔍
列の抽出方法を選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| All | .all |
全列を選択 |
| by Name | .byname |
Start Col Name と End Col Name で範囲指定 |
| by Index | .byindex |
Start Col Index と End Col Index で範囲指定 |
| by Start Name, End Index | .bynameindex |
Start Col Name と End Col Index の組合せで範囲指定 |
| by Start Index, End Name | .byindexname |
Start Col Index と End Col Name の組合せで範囲指定 |
| by Values | .bynames |
列名を Col Select Values で明示的に指定 (パターン可) |
| by Condition | .byexpr |
From Row の値を式で評価し、true となる列を選択 |
列範囲・条件パラメータ 📐
Start Col Name .colnamestart 🔤
– 列選択範囲の開始列名を指定 (byname / bynameindex モードで使用)
Start Col Index .colindexstart 🔢
– 列選択範囲の開始列インデックスを指定 (byindex / byindexname モードで使用)
End Col Name .colnameend 🔤
– 列選択範囲の終了列名を指定 (byname / byindexname モードで使用)
End Col Index .colindexend 🔢
– 列選択範囲の終了列インデックスを指定 (byindex / bynameindex モードで使用)
Col Select Values .colnames 🎯
– 選択したい列名を明示的に列挙 (bynames モード)
– パターンマッチ可。例: colvalue[1-4] で colvalue1〜colvalue4 をまとめて選択
Col Select Condition .colexpr 🧮
– 各列に対して評価される式を指定 (byexpr モード)
– 評価が true の列が選択される (Row Select Condition と同型)
From Row .fromrow 📥
– by Values モードで Col Select Values を照合する行を指定
– その行のセル値が Col Select Values と一致する列が選択される
Output .output 📤
抽出後のセル値をどのような形でチャンネル化するかを決めるメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Single Channel | .single |
全抽出値を 1 チャンネルにまとめ、各値を 1 サンプルとして出力 |
| Channel per Row | .chanperrow |
抽出された行ごとに別チャンネルを生成 |
| Channel per Column | .chanpercol |
抽出された列ごとに別チャンネルを生成 |
| Channel per Value | .chanpervalue |
抽出された各セル値を独立したチャンネルとして出力 |
First Row is .firstrow 🔝
テーブル先頭行の扱いを指定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Ignored | .ignored |
先頭行を無視 (チャンネル化対象から除外) |
| Names | .names |
先頭行のセルをチャンネル名 / 列名として使用 |
| Values | .values |
先頭行のセルも値として扱う |
First Column is .firstcolumn 🔢
テーブル先頭列の扱いを指定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Ignored | .ignored |
先頭列を無視 (チャンネル化対象から除外) |
| Names | .names |
先頭列のセルを行名として使用 |
| Values | .values |
先頭列のセルも値として扱う |
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: CSV データを制御信号にマッピング 📊
File In DAT (CSV) → Convert DAT (To Table) → DAT to CHOP (Channel per Column) → Math CHOP
- File In DAT で CSV ファイルを読み込み
- Convert DAT を
To Tableに設定してテーブル化 - DAT to CHOP の Output を
Channel per Columnに設定 - First Row is =
Namesでヘッダ行をチャンネル名として使用 - 後段の Math CHOP で値域を 0〜1 に正規化
Example 2: 条件式で行を絞り込んで動的に値を取り出す 🔎
Table DAT → DAT to CHOP (Select Rows: by Condition) → Trigger CHOP
- Table DAT に状態管理テーブルを用意 (例: name / value 列)
- DAT to CHOP の Select Rows を
by Conditionに設定 - Row Select Condition に
me.inputCell.val == 'active'等の式を記述 - 条件にマッチした行の value 列だけが CHOP チャンネルとして出力される
Example 3: JSON / 外部 API レスポンスの数値列を CHOP 化 🌐
Web Client DAT → JSONPath / Convert DAT → DAT to CHOP (Single Channel) → Filter CHOP
- Web Client DAT で外部 API を叩いて JSON 取得
- Python スクリプトで JSON を Table DAT に整形
- DAT to CHOP の Output を
Single Channelに設定して値列を一直線に - 後段の Filter CHOP で時間方向のスムージングをかけて制御信号として使用
Example 4: ヘッダ列で行アクセスする状態テーブル 🗂️
Table DAT (named rows) → DAT to CHOP (First Column is: Names) → Select CHOP
- Table DAT の 1 列目に
state_a/state_b等の行名を持たせる - DAT to CHOP の First Column is を
Namesに設定 - Select Rows を
by Values+ Row Select Values で対象状態をパターン指定 - 後段の Select CHOP で必要なチャンネルだけを取り出す
関連オペレータ 🔗
類似機能OP 🔍
- CHOP to DAT — 逆方向: CHOP チャンネルを DAT テーブルに変換
組み合わせ推奨OP 🔄
- Convert DAT — 前段で CSV / TSV / 文字列を Table 形式に整形
- Table DAT — DAT to CHOP の代表的な入力 DAT
- Math CHOP — 取り出した値を後段で正規化・スケーリング
- Filter CHOP — 離散セル値を時間方向にスムージング
- Select CHOP — 出力した複数チャンネルから必要なチャンネルだけ抽出
前処理・後処理CHOP 🎯
Info CHOP情報 📊
DAT to 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: 値が数値ではなく文字列として扱われる / 0 になる
✅ Solution:
- 入力 DAT が Table DAT または Convert DAT (
To Table設定) であることを確認 - セル値が数値文字列であること (空セル・カンマ区切り等は事前に整形)
- First Row is / First Column is で
Names指定したヘッダ行・列が誤って数値変換されていないか確認
❌ Problem: 想定したチャンネル数 / サンプル数にならない
✅ Solution:
- Output 設定 (
Single Channel/Channel per Row/Channel per Column/Channel per Value) を抽出形態に合わせて選択 - Select Rows / Select Cols で意図した範囲が選ばれているか Info DAT で確認
- First Row / First Column が
Ignoredになっていて行・列が欠落していないか確認
❌ Problem: Row Select Condition / Col Select Condition の式が常に false になる
✅ Solution:
- デフォルト式
re.match('.*', me.inputCell.val) != Noneを起点にカスタマイズ me.inputCell.valが文字列であることを前提に比較式を組む (数値比較ならfloat()でキャスト)- 正規表現を使う場合は Python 仕様 (
reモジュール) であることに注意
❌ Problem: 後段で値域がバラバラで使いづらい
✅ Solution:
- 後段に Math CHOP を入れて From Range / To Range で正規化
- 離散値が階段状に動いて気になるときは Filter CHOP でスムージング
- 必要なチャンネルだけ残す場合は Select CHOP で抽出
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

