[obsidian] vault backup: 2025-01-02 23:48:17[
All checks were successful
Build / build (push) Successful in 5m8s

This commit is contained in:
Matsuura Tomoya(Windows) 2025-01-02 23:48:18 +09:00
parent d1f093466a
commit 49ddcb2e43

53
content/4CED.md Normal file
View File

@ -0,0 +1,53 @@
#computermusic #programming-language
[The 4CED Program on JSTOR](https://doi.org/10.2307/3679692)
[[IRCAM]]で開発された音楽信号処理用のコンピューター[[4C]][[PDP-11]]の拡張ハードウェア)のためのプログラムをより抽象的に記述するためのプログラミング言語。
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レジスタで破壊的再代入をしている