computermusicprogramming-language

The 4CED Program on JSTOR

IRCAMで開発された音楽信号処理用のコンピューター4CPDP-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*BA B Cの時はA*B+C

ちょっとJS風にするとこんな感じかな

ZHO = BW * IN + DELAY1;
BPSIG = ZHP * CENTER + BPSIG;
ZLP = BPSIG * CENTER + ZLP; 
DELAY2 = BPSIG * BW + ZLP;
DELAY1 = DELAY2 * MINUS1;
OUT = GAIN * BPSIG;

で、定義した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.

これ結構矛盾してておもろいというか、作曲家に対する信頼のなさがすごいというか