TouchDesigner: Script CHOP
#TouchDesigner:_CHOP #TouchDesigner
Pythonで無理やりすべてを行うTouchDesigner: CHOP
気軽にいろいろやってると結構CPU時間使ってることがあるので、TouchDesigner: probe見ながら進めること
例
入力CHOPをそのまま出す
code:py
def onCook(scriptOp):
scriptOp.clear()
scriptOp.copy(scriptOp.inputs0)
入力CHOPのSmoothstep
値の編集の仕方・パラメータの追加の仕方
code:py
def smoothstep(a, b, t):
if a - b == 0:
return t >= b and 1 or 0
else:
x = (t - a) / (b - a)
x = min(max(x, 0.0), 1.0)
return x * x * (3.0 - 2.0 * x)
def onSetupParameters(scriptOp):
page = scriptOp.appendCustomPage('Custom')
p = page.appendFloat('A', label='A (Min)')
p = page.appendFloat('B', label='B (Max)')
p0.val = 1
def onCook(scriptOp):
scriptOp.clear()
scriptOp.copy(scriptOp.inputs0)
a = scriptOp.par.A
b = scriptOp.par.B
for (count, chan) in enumerate(scriptOp.chans()):
for i in range(0, scriptOp.numSamples):
chani = smoothstep(a, b, chani)
入力CHOPを16サンプルごとに最大値を取って出す
サンプル数とサンプルレートの指定
code:py
def accumMax(chan, start, end):
v = -math.inf
for i in range(start, end):
v = max(chani, v)
return v
def onCook(scriptOp):
scriptOp.clear()
accumSamples = 16
inputOp = scriptOp.inputs0
scriptOp.numSamples = math.floor(inputOp.numSamples / accumSamples)
scriptOp.rate = inputOp.rate / accumSamples
for (count, chan) in enumerate(inputOp.chans()):
newChan = scriptOp.appendChan(chan.name)
n = inputOp.numSamples
for i in range(0, n, accumSamples):
newChani / accumSamples = accumMax(chan, i, min(i + accumSamples, n))