computermusic programming-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<!-- line:18 -->
PARAM CENTER, BW, GAIN, IN, OUT;<!-- line:19 -->
MUL BW     IN     DELAY1 ZHP<!-- line:20 -->
MUL ZHP    CENTER BPSIG  BPSIG<!-- line:21 -->
MUL BPSIG  CENTER ZLP    ZLP<!-- line:22 -->
MUL BPSIG  BW     ZLP    DELAY2<!-- line:23 -->
MUL DELAY2 MINUS1        DELAY1<!-- line:24 -->
MUL GAIN   BPSIG         OUT<!-- line:25 -->
END<!-- line:26 -->

オペランドの最後は書き込み先。MULはオペランドA Bの時はA*BA B Cの時はA*B+C

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

ZHO = BW * IN + DELAY1;<!-- line:34 -->
BPSIG = ZHP * CENTER + BPSIG;<!-- line:35 -->
ZLP = BPSIG * CENTER + ZLP; <!-- line:36 -->
DELAY2 = BPSIG * BW + ZLP;<!-- line:37 -->
DELAY1 = DELAY2 * MINUS1;<!-- line:38 -->
OUT = GAIN * BPSIG;<!-- line:39 -->

で、定義したBPFを使うのはこう

EXAMLE: PATCH<!-- line:45 -->
OSC 4k3 FREQ SIG<!-- line:46 -->
AP BPASS CF1 BW1 GAIN1 SIG SIG<!-- line:47 -->
AP BPASS CF2 BW2 GAIN2 SIG SIG<!-- line:48 -->
OUT 1 SIG<!-- line:49 -->
END<!-- line:50 -->

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.

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