はじめまして
趣味で映像や音楽を作ってるibuibu69と申します!
これまでmaxやprocessingを使って、VJとインストバンドなんかをやってました。。
https://www.youtube.com/watch?v=NswI72i6lCg
・・・バンドも解散したし、TouchDesignerで新しいことをやりたい今日この頃。東京在住なので、だれか友達になってください。。
では、初アドベントカレンダー投稿、さっそくいきます。
本題
TouchDesignerで難しいことをやろうとするとき、pythonによる制御が必要不可欠になってきます。
がしかし、、、TouchDesignerユーザーでpythonに精通しまくりな方は、(私も含め)割と少ないのではないでしょうか。。。たぶん。。
そこで、よく使うであろう、for文によるオペレータの一括操作の際のコツを紹介します。
たくさんのオペレーターを操作
例えば、「constant1,2...9のvalue0に1を代入する」はこうです。
for i in range(1,10):
op( 'constant' + str(i) ).par.value0 = 1
これは簡単ですね。
解説:
op()の中は文字列なので、iをstr()で文字列にする必要があります。
たくさんのパラメーターへ代入する
例えば、「constant1のvalue1,2,...9に1を代入する」はこうです。
for i in range(1,10):
script = 'op(\'constant1\').par.value' + str(i) + ' = 1'
exec(script)
print(a)
exec関数を使います。(私はこれを知らず、四苦八苦しました。。)
コツ:
valueの項番をイテレータとするには、まず実行したい文全体をstring型で書き、イテレータを埋め込みます。その後、exec()関数で実行します。
クォーテーションをエスケープするのを忘れずに!!
たくさんのパラメータの値を取得する
例えば、「constant1の1,2,...10の合計値を表示する」はこうです。
a = 0
for i in range(10):
a += eval('op(\'constant1\').par.value' + str(i) )
print(a)
先ほどのexec関数と似てますが、今度は値を評価する関数であるevalを使ってます。
以下のように、exec関数を用いてもよいです。
a = 0
for i in range(10):
script = 'a += op(\'constant1\').par.value' + str(i)
exec(script)
まとめ
このように、TouchDesignerの組み込み関数をfor文で回したいとき、execやevalを使うことでうまくいきます。
・・・という紹介でした!!
twitterでたまーに映像や音楽をアップしてたりしています。よろしければフォローをいただけると嬉しいです。