computermusicprogramming-language
IRCAMで開発された音楽信号処理用のコンピューター4C(PDP-11の拡張ハードウェア)のためのプログラムをより抽象的に記述するためのプログラミング言語。いちおうMaxの祖先の一つと言ってもいいはず
UGen操作用のPatch Language、Score Language、Envelope Language、Command Languageと4種類の言語を持つ。実装にはC言語使っているらしい(1981年だよね、かなり初期の仕様?)
Score Languageはさらに2バージョン存在するらしい
Patch Language
プリミティブなオペコードとしてあるのはオシレーター、加算、乗算、エンベロープ、リニアランプ、条件分岐、入出力など。ディレイなどはレジスタへの保存と読み出しで明示的に行うっぽい
バンドパスフィルタを2つ直列接続したコードを書くときに、バンドパスフィルタは次のように定義できる。
BPASS: PATCH
PARAM CENTER, BW, GAIN, IN, OUT;
MUL BW IN DELAY1 ZHP
MUL ZHP CENTER BPSIG BPSIG
MUL BPSIG CENTER ZLP ZLP
MUL BPSIG BW ZLP DELAY2
MUL DELAY2 MINUS1 DELAY1
MUL GAIN BPSIG OUT
END
オペランドの最後は書き込み先。MUL
はオペランドA B
の時はA*B
。A B C
の時はA*B+C
。
ちょっとJS風にするとこんな感じかな
で、定義したBPFを使うのはこう
EXAMLE: PATCH
OSC 4k3 FREQ SIG
AP BPASS CF1 BW1 GAIN1 SIG SIG
AP BPASS CF2 BW2 GAIN2 SIG SIG
OUT 1 SIG
END
APがユーザー定義UGenを使うコード。BPASSには入出力同じSIGレジスタで破壊的再代入をしている
Furthermore, since the majority of composers don’t really want to become computer programmers, even given a high-level, specialized language, itmakes sense to develop models that are of intermediate generality but easy to use.
これ結構矛盾してておもろいというか、作曲家に対する信頼のなさがすごいというか