[obsidian] vault backup: 2023-08-20 10:37:31[
This commit is contained in:
parent
363e228c7f
commit
67406117c2
@ -11,6 +11,45 @@ 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側でやろう
|
||||
@ -18,3 +57,4 @@ DAWをプログラマブルにする試み
|
||||
fileplayerのui実装もgeneratorからregionに移そう
|
||||
|
||||
そうなるとaudio側の実装もそっちに合わせるのが自然だよな・・・
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user