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

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

DAT to CHOP のテーブル変換機能を示す図

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

概要 📖 – 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 チャンネル

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

DAT to Page 📋

DAT 入力 .dat 📄

値の取得元となる DAT を指定する

DAT .dat 📄
– 値を読み出す元の DAT を指定する
– テーブル形式である必要がある (Table DAT または Convert DATTo 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
  1. File In DAT で CSV ファイルを読み込み
  2. Convert DAT を To Table に設定してテーブル化
  3. DAT to CHOP の Output を Channel per Column に設定
  4. First Row is = Names でヘッダ行をチャンネル名として使用
  5. 後段の Math CHOP で値域を 0〜1 に正規化

Example 2: 条件式で行を絞り込んで動的に値を取り出す 🔎

Table DAT → DAT to CHOP (Select Rows: by Condition) → Trigger CHOP
  1. Table DAT に状態管理テーブルを用意 (例: name / value 列)
  2. DAT to CHOP の Select Rows を by Condition に設定
  3. Row Select Condition に me.inputCell.val == 'active' 等の式を記述
  4. 条件にマッチした行の value 列だけが CHOP チャンネルとして出力される

Example 3: JSON / 外部 API レスポンスの数値列を CHOP 化 🌐

Web Client DAT → JSONPath / Convert DAT → DAT to CHOP (Single Channel) → Filter CHOP
  1. Web Client DAT で外部 API を叩いて JSON 取得
  2. Python スクリプトで JSON を Table DAT に整形
  3. DAT to CHOP の Output を Single Channel に設定して値列を一直線に
  4. 後段の Filter CHOP で時間方向のスムージングをかけて制御信号として使用

Example 4: ヘッダ列で行アクセスする状態テーブル 🗂️

Table DAT (named rows) → DAT to CHOP (First Column is: Names) → Select CHOP
  1. Table DAT の 1 列目に state_a / state_b 等の行名を持たせる
  2. DAT to CHOP の First Column is を Names に設定
  3. Select Rows を by Values + Row Select Values で対象状態をパターン指定
  4. 後段の 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、無効時は0
  • export_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 で抽出

参考資料 📚

その他 🔗

公式リソース 📖

この記事は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をコピーしました