#computermusic #programming-language [The 4CED Program on JSTOR](https://doi.org/10.2307/3679692) [[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風にするとこんな感じかな ```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. これ結構矛盾してておもろいというか、作曲家に対する信頼のなさがすごいというか