exprでif文を書く
C言語などコンピュータ言語の経験がある人は、Pdを使っていてたまに、制御構造が書けないことのストレスを感じます。もちろん「>」「spigot」「sel」「moses」」などのオブジェクトを組み合わせれば殆どのものは書くことができますが、パッチが単純な制御構造の記述なわりには複雑になってしまったりして、「ifが書けたら…」と思う人も多いようです。
しかし、あまり有名ではないですが、Shahrokh Yadegariの開発したPdにデフォルトで入っているプラグインオブジェクト「expr」には実は「if」を書き込めるのです。
たとえば、入力値が150より小さい場合は-1、大きい場合は1を出力するプログラムは下図左のようになります。文法としては、
if( 評価, 正の場合, 負の場合)という記述で、下図右の普通のオブジェクトによるバージョンに比べて、非常にコンパクトにこの分岐が書けてしまいます。
また入力値が0より小さい場合は1、100より大きいの場合は3、0から100の間の場合は2を出力するというような複雑な条件も、下図のようにif文をネストすることで1つのexprにかけてしまいます。
もちろんif文の中に計算式を各ことも可能です。以下の例では0から100までの数値を入力された場合はその数値の平方根が出力されます。
「expr」にはチルダオブジェクト版「expr~」(ベクターベース)、「fexpr~」(サンプルベース)も存在します。これにもif文を書く事ができます。
例えば、以下の例では入力された値が負であれば-1を、正であれば1を出力する条件式を「fexpr~」内に書き、サイン波を矩形波化しています。
世の中には0xAさんのようにCDアルバム1枚を「expr~」だけで作ってしまう猛者もいますが、基本的には「expr」はあまり多用しすぎると、パッチがバラバラのC言語の断片のようになります。こうなると何をやってるか逆に見難くなります。あくまでも、ここぞという時だけに使用するようにしましょう。
exprについての細かい仕様はここでご覧いただけます。
ピンバック: puredataとarduinoを連携して音程判別装置を作る – HarunoAura