[obsidian] vault backup: 2025-01-02 23:48:17[
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Build / build (push) Successful in 5m8s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Build / build (push) Successful in 5m8s
				
			This commit is contained in:
		
							
								
								
									
										53
									
								
								content/4CED.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								content/4CED.md
									
									
									
									
									
										Normal 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レジスタで破壊的再代入をしている | ||||||
		Reference in New Issue
	
	Block a user