
概要 📖 – OSC メッセージ受信とチャンネル化
OSC In CHOPは、ネットワーク経由で OSC メッセージを受信し、アドレスごとのチャンネルとして出力する CHOPです。UDP / Multi-Cast に対応し、外部アプリ・スマホ・マイコン等から送られる OSC データをリアルタイムにチャンネル化します。
主な用途 🎯
- 外部アプリ・デバイスからの OSC (Open Sound Control) メッセージ受信
- スマホ・タブレット (TouchOSC / mrmr / Lemur 等) からのリモートコントロール入力取得
- 他 TouchDesigner / Max/MSP / Ableton Live 等とのリアルタイム通信
- センサーデバイス・マイコン (Raspberry Pi / M5Stack 等) からのデータ受信
- ネットワーク越しの制御信号を CHOP チャンネルに変換しパラメータへ Export
データフロー 🔄
入力: ネットワーク UDP パケット
↓
Protocol 判定 (UDP / Multi-Cast)
↓
Network Port / Address 受信
↓
OSC Address Scope フィルタ
↓
Strip Prefix Segments
↓
Queued バッファリング (オプション)
↓
サンプリング (Global Rate / Default Sample Rate)
↓
出力: チャンネルデータ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
OSC In Page 📡
Active .active 🟢
ネットワーク受信の有効化:
- オン: ネットワークポートに送られたデータを受信し続ける
- オフ: 受信を停止 (オフ中にポート宛に送られたデータは破棄される)
Protocol .protocol 🌐
使用するネットワークプロトコルの選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| Messaging (UDP) | .msging |
標準的な UDP ユニキャストで受信 (デフォルト) |
| Multi-Cast Messaging (UDP) | .multicastmsging |
マルチキャストグループに参加して受信 (Network Address でグループ指定) |
Network Address .netaddress 🏷️
Multi-Cast マルチキャストアドレス:
- Network Address: Multi-Cast 時のグループアドレス (例:
239.255.0.1)。UDP ユニキャスト時は通常未使用
Network Port .port 🔌
受信ポート番号:
- Network Port: 送信側と同じポート番号を指定する必要あり (例:
7000,9000)
Local Address .localaddress 💻
受信側 NIC の指定 (複数ネットワークインターフェース時):
- Local Address: 受信元の NIC を IP で限定 (例:
192.168.1.10)。空欄なら全 NIC で受信
OSC Address Scope .oscaddressscope 🎯
受信チャンネルの絞り込み (Pattern Matching):
- OSC Address Scope: チャンネル名パターンで include / exclude を指定。例:
^*accel*で iPhone の加速度チャンネルを除外。Pattern Matching の構文に従う
Use Global Rate .useglobalrate ⏱️
サンプルレート選択:
- オン: TouchDesigner のグローバルサンプルレートで CHOP をサンプリング
- オフ: 下記 Default Sample Rate のレートでサンプリング
Default Sample Rate .samplerate 🎚️
個別サンプルレート (Use Global Rate=Off 時):
- Default Sample Rate: CHOP のサンプルレート (Hz)。Use Global Rate がオフ時のみ有効
Queued .queued 📥
メッセージキューの有効化:
- オン: メッセージをキューに溜め、Queue Variance / Maximum Queue / Queue Adjust Time でバッファ挙動を制御
- オフ: キューを使わず即座に処理 (高頻度メッセージで取りこぼしの可能性あり)
Queue Variance .queuevariance 📊
キューターゲット周辺の許容範囲:
- Queue Variance: キュー長がターゲット ± この値の範囲内ならキュー長調整を行わない
Queue Variance Unit .queuevarianceunit 📐
Queue Variance の単位
| 項目 | 内部名 | 説明 |
|---|---|---|
| Samples | .samples |
サンプル数で指定 |
| Frames | .frames |
フレーム数で指定 |
| Seconds | .seconds |
秒で指定 |
Maximum Queue .maxqueue 📦
キューの最大長:
- Maximum Queue: キューが満杯になったら以降の受信サンプルは drop される
Max Queue Unit .maxqueueunit 📐
Maximum Queue の単位
| 項目 | 内部名 | 説明 |
|---|---|---|
| Samples | .samples |
サンプル数で指定 |
| Frames | .frames |
フレーム数で指定 |
| Seconds | .seconds |
秒で指定 |
Queue Adjust Time .adjusttime 🕒
キュー長調整の頻度:
- Queue Adjust Time: 値=1 / 単位=seconds なら 1 秒に 1 回サンプルを複製または破棄してキュー長を調整
Adjust Unit .adjusttimeunit 📐
Queue Adjust Time の単位
| 項目 | 内部名 | 説明 |
|---|---|---|
| Samples | .samples |
サンプル数で指定 |
| Frames | .frames |
フレーム数で指定 |
| Seconds | .seconds |
秒で指定 |
Strip Prefix Segments .stripsegments ✂️
OSC アドレスの先頭セグメント除去:
- Strip Prefix Segments: 例:
/a/b/c/d/eで 3 を指定するとd/e(最終チャンネル名はd_e) になる
Reset Channels .resetchannels 🧹
チャンネル削除と新規追加の抑止:
- オン: 全チャンネルを削除し、オフに戻すまで新規チャンネルは追加されない
- オフ: 通常動作 (受信した OSC アドレスに応じてチャンネルが追加される)
Reset Channels Pulse .resetchannelspulse 💥
全チャンネル即時削除パルス:
- Reset Channels Pulse: 押した瞬間に全チャンネルを削除する (オン状態を保持しない)
Reset Values .resetvalues 0️⃣
チャンネル値リセットと更新抑止:
- オン: 全チャンネルを 0 にリセットし、オフに戻すまで値は更新されない
- オフ: 通常動作 (受信値で更新される)
Reset Values Pulse .resetvaluespulse 💥
全チャンネル値の即時 0 リセットパルス:
- Reset Values Pulse: 押した瞬間に全チャンネル値を 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: スマホアプリ (TouchOSC) からの遠隔操作 📱
TouchOSC (iPhone/iPad) → Wi-Fi → OSC In CHOP → パラメータ Export
- TouchOSC アプリで送信先 IP を PC の IP、ポートを
7000に設定 - OSC In CHOP の Network Port を
7000、Active をオン - 受信した
/fader1等のチャンネルを目的のパラメータに Export - スマホのフェーダー・ボタンでビジュアルパラメータをリアルタイム操作
Example 2: Max/MSP / Ableton Live との連携 🎹
Max/MSP (udpsend) → localhost:9000 → OSC In CHOP → ビジュアルパラメータ
- Max/MSP 側で
udpsend 127.0.0.1 9000オブジェクトを設置 - TouchDesigner 側 OSC In CHOP の Network Port を
9000に設定 - 音楽パラメータ (テンポ・ノート情報) を OSC で送出
- 音と映像のタイミングをサンプル精度で同期
Example 3: マイコン (M5Stack / ESP32) からのセンサー受信 🔌
M5Stack (Wi-Fi OSC) → Network → OSC In CHOP → Math CHOP (正規化) → 制御
- M5Stack で OSC ライブラリを使い
/imu/accel/x等を送信 - OSC In CHOP で受信、OSC Address Scope で
/imu/*に絞り込み - 後段に Math CHOP を挟み From Range / To Range で正規化
- 加速度・ジャイロでビジュアル要素を駆動するインスタレーションを構築
Example 4: 複数 PC 間の TouchDesigner 同期 🖥️
TouchDesigner A (OSC Out CHOP) → LAN → TouchDesigner B (OSC In CHOP) → 描画同期
- 送信側 PC で OSC Out CHOP を設置し、送信先 IP / ポートを受信側に向ける
- 受信側 PC で OSC In CHOP の Network Port を一致させ、Active をオン
- マルチディスプレイ環境で Strip Prefix Segments により共通プレフィックスを除去
- 複数 PC でフレーム同期したショー再生を実現
関連オペレータ 🔗
類似機能OP 🔍
- OSC Out CHOP — OSC In の対となる送信側 CHOP、チャンネル値を OSC メッセージにして送信
- MIDI In CHOP — USB / MIDI 規格でコントローラー入力を受信 (OSC は IP ネットワーク、MIDI は MIDI 規格)
- Serial CHOP — シリアル通信 (USB / COM ポート) でマイコンから受信、OSC は IP ネットワーク経由
組み合わせ推奨OP 🔄
- Math CHOP — 受信値の正規化・スケーリング・四則演算
- Filter CHOP — 受信信号のノイズをスムージング
- Logic CHOP — 閾値判定で OSC 値をイベント化
- Trigger CHOP — OSC 受信をきっかけにエンベロープ・パルスを発火
- Select CHOP — 受信した複数チャンネルから必要なものだけ抽出
前処理・後処理CHOP 🎯
- 前処理: Constant CHOP、Null CHOP
- 後処理: Math CHOP、Filter CHOP、Logic CHOP、Lag CHOP
Info CHOP情報 📊
OSC In 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: メッセージが受信できない
✅ Solution:
- Active がオンになっているか確認
- 送信側と Network Port が一致しているか確認 (例: 両方
7000) - ファイアウォール / セキュリティソフトが UDP ポートをブロックしていないか確認
- 複数 NIC 環境では Local Address で正しい受信 NIC を指定
❌ Problem: 受信メッセージが取りこぼされる
✅ Solution:
- Queued をオンにして Maximum Queue を増やす
- Queue Adjust Time を短くしてキュー長調整を頻繁に行う
- 送信側の頻度がサンプルレートに対して高すぎる場合、後段に Filter CHOP を挟みダウンサンプリング
❌ Problem: 想定外のチャンネルが大量に生成される
✅ Solution:
- OSC Address Scope に Pattern Matching パターンを設定して必要なアドレスだけ通す (例:
/synth/*) - Reset Channels Pulse で一度クリアしてから受信を再開
- Strip Prefix Segments で共通プレフィックスを除去しチャンネル名を整理
❌ Problem: Multi-Cast 受信が動かない
✅ Solution:
- Protocol を
Multi-Cast Messaging (UDP)に切替 - Network Address に有効なマルチキャストグループ (例:
239.255.0.1) を指定 - ルーター / スイッチがマルチキャストを許可しているか確認
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – OSC In CHOP
- Network Protocols (OSC / UDP / Multi-Cast)
- Pattern Matching (チャンネル名マッチング)

