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

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

Pipe Out CHOP のネットワーク送信機能を示す図

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

概要 📖 – CHOP データを TCP/IP で送信するネットワーク出力

Pipe Out CHOPは、TCP/IP 経由で CHOP チャンネルデータを別 TouchDesigner プロセスへ送信する CHOPです。サーバー / クライアントモードを切り替えてマルチマシン構成での信号配信を実現し、対となる Pipe In CHOP で受信します。

主な用途 🎯

  • 別 TouchDesigner プロセスへの CHOP チャンネルのTCP/IP 送信
  • マルチマシン構成でのセンサー値・制御信号のリアルタイム配信
  • サーバー / クライアントモードでの双方向接続管理
  • タイムスライス送信によるフレーム間サンプルの全データ転送
  • テキストポートコマンドのリモート実行(スクリプト送出)

データフロー 🔄

入力: CHOP チャンネル

Active 判定(送信有効性)

Send Input / Send Current Sample 判定

TCP/IP ソケット (Server Address : Port)

受信側 Pipe In CHOP

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

PipeOut Page 📋

Connection Mode .mode 🔌

この Pipe Out CHOP をサーバーとして動作させるか、クライアントとして動作させるかを切り替えるメニュー

項目 内部名 説明
This Operator is Client .client クライアントとして動作し、指定したサーバーへ接続する
This Operator is Server .server サーバーとして動作し、クライアントからの接続を待ち受ける

接続先パラメータ 🌐

Server Address .address 📡
– 接続先サーバーのコンピュータ名または IP アドレス
foo / foo.bar.com / 100.123.45.78 等の形式が使用可能
– 同一マシン内で接続する場合は localhost を指定

Server Port .port 🔢
– 通信に使用するネットワークポート番号
– 送信側と受信側で同じポート番号を設定する必要あり

送信制御 🎚️

Active .active 🔘
– オン: データ送信を有効化
– オフ: データは送信されない(接続自体は維持される場合あり)

Send Input .sendinput 📨
– Pipe Out CHOP の入力に接続された CHOP データを送信するか否かのトグル
– オフ時は入力 CHOP は送信されない(Send All Data / Script のみ送信可)

Send Current Sample Only .sendsingle 🎯
– Pipe Out CHOP がタイムスライスでない場合のみ有効
– オン: 現在フレームのサンプルのみを送信
– オフ: 前回クック以降から現在クックまでの全サンプルを送信(フレームスキップ時に複数サンプル送信)

Single Sample .sample 📍

シングルサンプルモードで、どのフレームのサンプルを送信するかを決定するメニュー

項目 内部名 説明
Frame 1 .sstart フレーム 1(先頭フレーム)のサンプルを送信

一括送信・スクリプト 📤

Send All Data .upload 📦
– ボタン押下時に、全チャンネル名とそのデータを 1 回のバーストで送信
– 初期化時のフルデータ同期に使用

Script .script 📝
– パイプ経由で送信する 1 回限りの textport コマンド文字列を指定

Send Script .sendscript ▶️
– Script パラメータに設定した textport コマンドを 1 回送信するボタン

Cook Every Frame .cookalways 🔄

Cook Every Frame .cookalways
– オン: この CHOP を毎フレーム強制クックする
– 表示ジオメトリと直接関係しない CHOP は通常毎フレームクックされないため、送信を確実にしたい場合はオンにする

接続監視・デバッグ 🩺

Send Monitor Pulses .pulse 💓
– フレームごとに単一 null 文字のパルスを送信し、接続を監視する
– 接続をアクティブに保ち、受信側 Pipe In CHOP が接続状態を正しく報告できるようにする

Echo Messages to Console .echo 📟
– 送出する全データを Dialogs メニューから開ける Console に出力
– 詳細は Pipe In CHOP の同オプションを参照

Callbacks DAT .callbacks 🧩
– 各送信イベント用のコールバックメソッドを含む DAT のパス
– 使い方は pipeoutCHOP_Class を参照


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 → Math CHOP (正規化) → Pipe Out CHOP (Server) → [ネットワーク] → Pipe In CHOP (Client) → 受信側プロジェクト
  1. 送信側マシンで Pipe Out CHOP の Connection Mode を Server に設定
  2. Server Address を localhost またはバインドする IP、Server Port を任意(例: 7000)に設定
  3. 受信側マシンの Pipe In CHOP を Client モードにし、送信側マシンの IP とポートを指定
  4. Active をオンにして接続を確立、受信側で正規化済みセンサー値が取得できることを確認

Example 2: タイムスライス送信で全フレームのオーディオ波形を転送 🎵

Audio Device In CHOP → Pipe Out CHOP (Time Slice On, Send Current Sample Only Off) → Pipe In CHOP → 解析側
  1. Audio Device In CHOP でマイク入力を取得(サンプルレート 44100Hz 等)
  2. Pipe Out CHOP の Common Page で Time Slice をオンに設定
  3. Send Current Sample Only をオフにし、前回クック以降の全サンプルを送信対象にする
  4. 受信側で 1 フレーム間の全オーディオサンプルが連続的に届くため、欠落なく波形解析が可能

Example 3: リモート textport コマンドの実行 📜

Pipe Out CHOP (Script パラメータ) → Send Script ボタン押下 → Pipe In CHOP (受信側) → textport で実行
  1. Pipe Out CHOP の Script パラメータに送信したいコマンド(例: op('container1').par.display = 0)を記述
  2. 受信側プロジェクトで Pipe In CHOP を接続し、コールバック DAT で script 受信時の処理を定義
  3. Send Script ボタンを押すと 1 回だけ textport コマンドが送信される
  4. リモートマシンの表示切替やプリセット呼出しを 1 ボタンでトリガー可能

関連オペレータ 🔗

類似機能OP 🔍

  • OSC Out CHOP — OSC プロトコルでチャンネル値を UDP 送信、Pipe Out よりも汎用的なネットワーク連携向け
  • TCP/IP DAT — 汎用 TCP/IP 通信、テキストデータの双方向送受信に対応

組み合わせ推奨OP 🔄

  • Pipe In CHOP — 受信側で対となる OP、ペアで使用するのが前提
  • Audio Device In CHOP — オーディオ入力を取得して送信する組み合わせ
  • OSC In CHOP — OSC 受信値を別マシンへ中継
  • Math CHOP — 送信前に値域変換やスケーリングを適用
  • Filter CHOP — ノイズ除去後の安定信号を送出

前処理・後処理CHOP 🎯


Info CHOP情報 📊

Pipe Out 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: 接続が確立されない・受信側にデータが届かない
✅ Solution:

  • Server Address と Server Port が送信側・受信側で一致しているか確認
  • Connection Mode が送信側 Server / 受信側 Client(またはその逆)で正しくペアになっているか確認
  • ファイアウォール・セキュリティソフトで該当ポートがブロックされていないか確認、Active をオフ→オンで再接続を試行

❌ Problem: フレームスキップ時にデータが欠落する
✅ Solution:

  • Send Current Sample Only をオフにし、前回クック以降の全サンプルを送信する設定にする
  • Common Page の Time Slice をオンにしてタイムスライスモードで送信
  • Cook Every Frame をオンにし、CHOP が毎フレーム確実にクックされるようにする

❌ Problem: 接続状態が受信側で正しく報告されない
✅ Solution:

  • Send Monitor Pulses をオンにし、null 文字のパルスをフレームごとに送出して接続を維持
  • Echo Messages to Console をオンにし、Console で実際の送信内容を確認
  • Callbacks DAT を設定し、接続/切断イベントを script で捕捉してログ化

❌ Problem: 送信値のレンジや単位が受信側で想定外
✅ Solution:

  • 前段に Math CHOP を入れて From Range / To Range で値域を正規化してから送信
  • 前段に Filter CHOP でノイズを smooth してから送出
  • Scope パラメータで送信対象チャンネルを限定し、不要なチャンネルを除外

参考資料 📚

その他 🔗

公式リソース 📖

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