diff --git a/content/otopoiesis.md b/content/otopoiesis.md index 24ba1d5b..9310b421 100644 --- a/content/otopoiesis.md +++ b/content/otopoiesis.md @@ -242,6 +242,31 @@ Trackの直下でTrackが呼ばれた場合、フォルダトラックとして Sliderが呼び出された時、初期値を変数参照にするのはあんまり意味がないことになる(リテラルで固定して、それを双方向プログラムしたい) +一個ずつ順番に考えていこう + +```rust +`{ +let phasor = | | (self+1.0)% 44100 +let dsp:()->float = Project!("test project ",`| | { + let gain = Slider!("gain",`0.5,0.0,1.0) + sin(440*3.1415 * 2*phasor() /samplerate) *gain + }) +} +``` + +これがコンパイル通るところまではいける + +ExprNodeIdをオーディオスレッドで直接参照してはいけない(session_globalsがスレッドローカルなので参照ができない) + +リテラルの値を`Arc`でパースして、それを引き回す + +Sliderの値はProbeIdのようにインデックス参照したいので、そのストレージを何処で保持するか問題 + +SystemPluginは本来スレッドを超えて共有できない状態を共有できてしまう(vmが走っているオーディオスレッドからメインスレッドの値にアクセスしてしまっている) + +そうすると状態共有でArcを使用する意味があんまりない + + ## トラックの追加やリージョンの追加のアクション