
概要 📖 – 数学関数のチャンネル適用
Function CHOPは、入力チャンネルに数学関数(三角・対数・指数・累乗・dB 変換等)を適用する CHOPです。単項関数(abs / sin / log 等)と二項関数(atan2 / 累乗)を 1 オペレータで切替可能で、Angle Units による角度単位の切替や Error Handling による異常値処理も統合されています。
主な用途 🎯
- 三角関数(sin / cos / tan / asin / acos / atan / atan2)によるチャンネル変換
- 対数・指数関数(log10 / logN / ln / exp / 累乗)による信号スケーリング
- デシベル変換(dB ⇄ amplitude / power)によるオーディオ信号処理
- 絶対値・符号取得(abs / sign)による単項処理
- 双曲線関数(sinh / cosh / tanh)による非線形変換
データフロー 🔄
入力: チャンネル値(Input1, 必要に応じ Input2)
↓
Function 選択(単項 or 二項)
↓
Angle Units 解釈(Degrees / Radians / Cycles)
↓
エラー処理(Error Handling)
↓
出力: 関数適用後のチャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Function Page 📋
Function .func 🎛️
チャンネルに適用する数学関数を選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Absolute Value | .abs |
abs(x) Input 1 の絶対値 |
| Sign | .sign |
sign(x) Input 1 の符号(-1 / 0 / 1) |
| Cosine | .cos |
cos(x) Input 1 のコサイン |
| Sine | .sin |
sin(x) Input 1 のサイン |
| Tangent | .tan |
tan(x) Input 1 のタンジェント |
| Arccosine | .acos |
acos(x) Input 1 の逆余弦 |
| Arcsine | .asin |
asin(x) Input 1 の逆正弦 |
| Arctan( Input1 ) | .atan |
atan(x) Input 1 の逆正接 |
| Arctan( Input1 / Input2 ) | .atan2 |
atan2(y,x) Input1 / Input2 の逆正接(二項) |
| Hyperbolic Cosine | .cosh |
cosh(x) Input 1 の双曲線余弦 |
| Hyperbolic Sine | .sinh |
sinh(x) Input 1 の双曲線正弦 |
| Hyperbolic Tangent | .tanh |
tanh(x) Input 1 の双曲線正接 |
| Log base 10 | .log |
log10(x) Input 1 の常用対数 |
| Log base N | .logb |
logN(x) Base Value を底とする Input 1 の対数 |
| Natural Log | .ln |
ln(x) Input 1 の自然対数 |
| 10 ^ Input1 | .pow10 |
pow(10,x) 10 の Input 1 乗 |
| e ^ Input1 | .exp |
exp(x) e の Input 1 乗 |
| Base ^ Input1 | .powe |
pow(x) Base Value の Input 1 乗(負の底は -((-Base) ^ Input1)) |
| Input1 ^ Exponent | .powb |
pow(x) Input 1 の Exponent Value 乗(負の底は -((-Input1) ^ Exponent)) |
| Input1 ^ Input2 | .pow |
pow(x,y) Input1 を Input2 乗(二項) |
| dB to Power | .dbtopower |
Input 1 のデシベル値を電力比に変換 |
| Power to dB | .powertodb |
Input 1 の電力比をデシベル値に変換 |
| dB to Amplitude | .dbtoamp |
Input 1 のデシベル値を振幅比に変換 |
| Amplitude to dB | .amptodb |
Input 1 の振幅比をデシベル値に変換 |
※ 注意: 累乗関数で底が負の場合、虚数を避けるため
-((-Base) ^ Input1)のように一度反転してから演算し結果を再反転する仕様。意図せぬ符号変化に注意。
ベース・指数値 🧮
Base Value .baseval 🔢
– Log base N および Base ^ Input1 選択時に使用する底の値
– 関数 logb / powe 以外では無視される
Exponent Value .expval 🔢
– Input1 ^ Exponent 選択時に使用する指数の値
– 関数 powb 以外では無視される
Angle Units .angunit 📐
三角関数で角度の単位をどう解釈するか
| 項目 | 内部名 | 説明 |
|---|---|---|
| Degrees | .deg |
度(0〜360)として扱う |
| Radians | .rad |
ラジアン(0〜2π)として扱う |
| Cycles | .cycle |
周期比(0〜1)として扱う |
Match by .match 🔍
二項関数(atan2 / Input1 ^ Input2)で 2 つの入力 CHOP のチャンネルをどう対応付けるか
| 項目 | 内部名 | 説明 |
|---|---|---|
| Channel Number | .index |
チャンネルのインデックス順で対応付け |
| Channel Name | .name |
チャンネル名で対応付け |
Error Page ⚠️
Error Handling .error 🛡️
数学エラー(Inf / NaN / 領域外 / 0 除算)が発生したサンプルの扱い方
| 項目 | 内部名 | 説明 |
|---|---|---|
| Abort With Error Message | .abort |
クックを中断してエラーメッセージを表示 |
| Replace With Specified Values | .replace |
下記の代替値(+Inf / -Inf / Domain / Divide)に置換 |
| Use The Previous Value | .useprev |
直前の正常値を再利用 |
代替値 🔁
+ Infinity Value .pinfval ♾️
– 正の無限大エラー発生時に使用する値
– sinh(), cosh(), tan() 等で発生
– Infinity Value .ninfval ♾️
– 負の無限大エラー発生時に使用する値
– sinh(), tan() 等で発生
Domain Error Value .domval 🚫
– 定義域エラー発生時に使用する値
– asin(), acos(), log10(), logN(), ln(), sqrt() で発生
Divide Error Value .divval ➗
– 0 除算エラー発生時に使用する値
– pow(x,y) 等で発生
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: 角度から sin / cos を生成して円運動 🎯
LFO CHOP (位相) → Function CHOP (sin / cos, Cycles) → Geo の tx / ty
- LFO CHOP で 0〜1 の位相値を生成
- Function CHOP の Function を「Sine」、Angle Units を「Cycles」に設定
- 別の Function CHOP で「Cosine」を計算(Match by を Channel Number に)
- 出力 sin / cos を Geometry の tx / ty に Export して円運動が得られる
Example 2: オーディオレベルを dB スケールで可視化 🎵
Audio Device In CHOP → Analyze CHOP (RMS Power) → Function CHOP (Amplitude to dB) → UI 表示
- Audio Device In CHOP で音声入力を取得
- Analyze CHOP で RMS Power を計算(振幅比として 0〜1 の値)
- Function CHOP の Function を「Amplitude to dB」に設定して dB 値に変換
- VU メーター等の UI に dB 値で表示することで音圧変化を直感的に把握
Example 3: センサー値の対数スケーリング 📊
Serial CHOP → Math CHOP (オフセット) → Function CHOP (Log base 10) → Filter CHOP
- 光センサーや音圧センサーの生値を Serial CHOP で取得
- Math CHOP の Pre-Add で +1 等の小オフセットを足し 0 を回避
- Function CHOP の Function を「Log base 10」に設定して対数スケーリング
- 後段の Filter CHOP でスムージングして可視化用の安定信号を得る
Example 4: 2D ベクトル角度の取得 📐
tx / ty channel → Function CHOP (Arctan( Input1 / Input2 ), Match by Name) → 角度
- オブジェクトの x / y 座標を 2 つの入力 CHOP として用意
- Function CHOP の Function を「Arctan( Input1 / Input2 )」に設定
- Match by を「Channel Name」、Angle Units を「Degrees」に設定
- 出力として原点から見た 2D ベクトルの角度(-180〜180 度)が得られる
関連オペレータ 🔗
類似機能OP 🔍
- Math CHOP — 四則演算・範囲変換に特化、超越関数(sin / log 等)は不可
- Logic CHOP — 閾値判定や論理演算に特化、数学関数は不可
組み合わせ推奨OP 🔄
- Math CHOP — Function 前後の値域変換・正規化
- Filter CHOP — Function 出力のスムージング
- Analyze CHOP — Function で変換した信号の統計値抽出
- LFO CHOP — 周期信号を生成し Function で位相変換
- Audio Spectrum CHOP — 周波数成分に Function で dB / 対数変換
- Constant CHOP — Base Value / Exponent Value の上流ソース
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Function 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:
- Angle Units が「Degrees / Radians / Cycles」のどれになっているか確認
- 上流が Math CHOP で 0〜1 に正規化されているなら Angle Units は「Cycles」が自然
- ラジアン値(0〜2π)を渡しているなら「Radians」を選択
❌ Problem: log / asin / acos で NaN や定義域エラーが出る
✅ Solution:
log10,logN,lnは入力 ≤ 0 で定義域エラーになるasin,acosは入力が [-1, 1] の範囲外で定義域エラーになる- Error Page の Error Handling を「Replace With Specified Values」にして Domain Error Value を設定するか、前段で Math CHOP や Limit CHOP で範囲をクリッピング
❌ Problem: 累乗関数で符号が想定と違う
✅ Solution:
Base ^ Input1/Input1 ^ Exponentは底が負のとき-((-Base) ^ Input1)形で結果を反転する仕様- 符号反転を意図しない場合は
Math CHOPの Channel Pre OP で「Positive」を適用してから Function に渡す - 整数指数のみ扱うなら Math CHOP の Channel Post OP の「Square」等で代替検討
❌ Problem: 二項関数(atan2 / pow)でチャンネルが対応付かない
✅ Solution:
- Match by が「Channel Number」か「Channel Name」のどちらになっているか確認
- Channel Name モードでは 2 入力のチャンネル名が一致している必要がある
- 前段の Math CHOP や Rename CHOP でチャンネル名を揃えてから Function に渡す
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

