[obsidian] vault backup: 2023-08-20 10:37:31[
This commit is contained in:
		@@ -11,10 +11,50 @@ DAWをプログラマブルにする試み
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## 構造
 | 
			
		||||
 | 
			
		||||
いわゆるオーディオプラグインのように、各コンポーネントがUI+オーディオ処理を記述していて、それをツリー状に組み合わせていくのではなく、プロジェクトツリー、UIのツリー、オーディオ処理用の構造体とそれぞれツリーができ、全てのノードが対応づけされている
 | 
			
		||||
 | 
			
		||||
コードの例(モジュレーションされているサイン波+ディレイ)
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
project{
 | 
			
		||||
	track: [
 | 
			
		||||
		delay{
 | 
			
		||||
			sinosc{
 | 
			
		||||
			freq:
 | 
			
		||||
				sinosc:{
 | 
			
		||||
					freq: float{20..20000,1000,"freq"}
 | 
			
		||||
					phase: 0.0},
 | 
			
		||||
			phase: 0.0
 | 
			
		||||
			},
 | 
			
		||||
		time: 1000
 | 
			
		||||
		}
 | 
			
		||||
	]
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
UIは基本的にプロジェクトツリーの`Param`型と、UIだけで使われる`State`をそれぞれ可変参照として持つ
 | 
			
		||||
(Reference カウントするのではなく、有限なライフタイムを持つ可変参照で作る)
 | 
			
		||||
 | 
			
		||||
```rust
 | 
			
		||||
struct UI<'a>{
 | 
			
		||||
	param: &'a mut Param,
 | 
			
		||||
	state: &'a mut State
 | 
			
		||||
}
 | 
			
		||||
impl<'a> egui::Widget for UI<'a>{
 | 
			
		||||
	fn ui
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
eguiはimmiditate モードだから毎フレームこのUI型を生成している(egui標準のSliderとかもこの方式)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## 開発メモ
 | 
			
		||||
 | 
			
		||||
クリップのサムネイル生成はgeneratorじゃなくてregion側でやろう
 | 
			
		||||
 | 
			
		||||
fileplayerのui実装もgeneratorからregionに移そう
 | 
			
		||||
 | 
			
		||||
そうなるとaudio側の実装もそっちに合わせるのが自然だよな・・・
 | 
			
		||||
そうなるとaudio側の実装もそっちに合わせるのが自然だよな・・・
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user