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

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

Stretch CHOP のチャンネル長伸縮機能を示す図

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

概要 📖 – チャンネル長の伸縮とリサンプリング

Stretch CHOPは、入力チャンネルの長さを指定区間にリサンプルして伸縮する CHOPです。Start / End / Length Scale で新しい区間を決定し、Interpolation 方式を選んで滑らかにサンプリングし直します。

主な用途 🎯

  • チャンネル長を任意のサンプル数に伸縮(リサンプリング)
  • アニメーションカーブの再生時間調整(倍速・スロー再生)
  • 音声・モーションデータの時間スケーリング
  • Start / End 位置の指定によるトリミング兼伸縮
  • 逆再生(Reverse Interval)によるカーブの巻き戻し演出

データフロー 🔄

入力: 任意長チャンネル

Start / End / Length Scale で新区間を決定

Interpolation 方式でリサンプル

Constant Area / Reverse Interval で後処理

出力: 伸縮後のチャンネル

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Stretch Page 📋

Interpolation .interp 📈

リサンプル時に使用する補間方式

項目 内部名 説明
No Interpolation .nointerp 最も近いサンプルの値をそのまま使用(離散的、ステップ状)
Linear .linear サンプル間を線形補間。区間が短縮される場合は近傍サンプルを平均化
Cubic .cubic 三次補間で滑らかなカーブを生成(急峻な変化を持つチャンネルには非推奨)
Repeat Samples .repeat 新しい長さが元の整数倍のときに均等な間隔を保つ補間

Constant Area .constarea 📐

チャンネル積分値を一定に保つ設定:

  • Constant Area: オンにすると、チャンネルの値をスケーリングしてチャンネル下の面積(積分値)を一定に保つ

Unit Values .relative 📏

Start / End パラメータの解釈方法

項目 内部名 説明
Absolute .abs 値そのものを新しい start / end 位置として使用
Relative to Start/End .rel 値を元の start / end 位置からのシフト量として解釈

Start / End .startend 🎯

Start .start ▶️
– CHOP の新しい開始位置(Unit Values の設定で絶対値 / 相対値が切替)
Start Unit (startunit) でサンプル / フレーム / 秒の単位を選択

End .end ⏹️
– CHOP の新しい終了位置
End Unit (endunit) でサンプル / フレーム / 秒の単位を選択

Length Scale .scale 🔁
– Start / End 区間決定後にチャンネル長を倍率でスケール
– 2 倍・0.5 倍など整数倍 / 分数倍の伸縮に便利

Reverse Interval .reverse 🔄
– オンにするとチャンネルを反転し逆再生する
– アニメーションの巻き戻し演出やループ末尾の自然な戻りに使用


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: アニメーションカーブの倍速再生 ⏩

Animation COMP → Stretch CHOP (Length Scale = 0.5) → Out CHOP
  1. Animation COMP で 240 サンプルのカーブを用意
  2. Stretch CHOP の Length Scale を 0.5 に設定
  3. 出力は 120 サンプル長にリサンプルされ実質 2 倍速再生になる
  4. Interpolation を Cubic にすると倍速時のカーブも滑らかに保たれる

Example 2: 音声クリップの時間伸縮 🎵

Audio File In CHOP → Stretch CHOP (Start / End / Interp=Linear) → Audio Device Out CHOP
  1. Audio File In CHOP でサンプル音声を読み込み
  2. Stretch CHOP の Unit Values を Absolute にし Start / End で再生区間を指定
  3. Interpolation を Linear にして音声サンプルを補間
  4. Audio Device Out CHOP に流して伸縮済みの音声として再生

Example 3: ループ末尾の逆再生でシームレス化 🔄

Pattern CHOP → Stretch CHOP (Reverse Interval = On) → Merge CHOP → Loop
  1. Pattern CHOP で前半部分のカーブを生成
  2. Stretch CHOP で Reverse Interval をオンにし反転コピーを作成
  3. Merge CHOP で前半と反転後半を連結
  4. 始端と終端が同値になりループしてもジャンプしないシームレス信号が得られる

関連オペレータ 🔗

類似機能OP 🔍

  • Resample CHOP — サンプルレート(時間密度)を変更(Stretch は長さ自体を変更)
  • Time Slice CHOP — 時間軸に沿った別の切り出し方式(区間ベースではなくフレーム同期)

組み合わせ推奨OP 🔄

  • Filter CHOP — Stretch の後段で補間ノイズを平滑化
  • Math CHOP — 伸縮後の値域を Range 変換でスケーリング
  • Merge CHOP — Reverse Interval で生成した反転コピーを結合
  • Trim CHOP — Stretch で伸縮した区間を更に切り出す
  • Speed CHOP — 再生速度を時間制御で変える(Stretch は長さ固定変更)

前処理・後処理CHOP 🎯


Info CHOP情報 📊

Stretch 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: Cubic 補間でカーブが暴れる(オーバーシュート)
✅ Solution:

  • 急峻な変化を持つチャンネルでは Cubic がオーバーシュートを起こす(公式 docs でも非推奨)
  • Interpolation を Linear に切り替えるとオーバーシュートが解消
  • 前段に Filter CHOP を入れてエッジを平滑化してから Stretch に渡す

❌ Problem: サンプル数が想定と違う長さで出力される
✅ Solution:

  • Unit Values が Absolute / Relative どちらに設定されているか確認(解釈が変わる)
  • Start Unit / End Unit でサンプル / フレーム / 秒の単位を確認
  • Length Scale が 1 以外になっていないか確認(最終的に Start / End 区間を更に倍率変更する)

❌ Problem: Constant Area を有効にしたら値域が大きく変動する
✅ Solution:

  • Constant Area は区間長変化に応じて値をスケーリングするため、短縮時は振幅が増大する
  • 面積保存が不要なら Constant Area をオフに戻す
  • 後段の Math CHOP の Range 変換で振幅を再正規化

❌ Problem: Reverse Interval で値が想定外の方向に動く
✅ Solution:

  • Reverse Interval は時間方向のみ反転(値方向の符号反転ではない)
  • 値そのものを反転させたい場合は Math CHOP の Channel Post OP に Negate を設定
  • 終端値と始端値が同じでないと反転接続時にジャンプが発生する点に注意

参考資料 📚

その他 🔗

公式リソース 📖

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