[obsidian] vault backup: 2025-08-18 12:10:15[
All checks were successful
Build / build (push) Successful in 7m26s

This commit is contained in:
2025-08-18 12:10:15 +09:00
parent 1bd9312173
commit 61c062531e
8 changed files with 59 additions and 37 deletions

View File

@@ -77,46 +77,20 @@ channel = 1000;//
最後の行のように、普通にAssign書き込むのもできるようにしておきたい。これできるようにするには、Assignをオーバーロードできるような型システムが必要なのかな`param(コンストラクタ)``get_param_name``get_param``set_param`の4種類があれば十分か
## ParamよりControllerの方が良くないか
[[mimiumのレコード型]]のデフォルト実装、関数のデフォルト引数の組み合わせに対して自動でパラメーターが作られるようにしたい
Parameterは単に関数の引数という意味合いにもとれてしまう
```rust
fn gen_synthesizer(){
let s = |gate = 0,freq=1000,gain = 1.0|{
...
}
s({..})
}
let mysynth = gen_synthesizer();
Inputだとプログラムの入力という意味は伝わりやすいが、オーディオインプットとの区別がつきづらくなってしまう
fn dsp(){
mysynth()
}
ので、Controllerがわかりやすいかもしれない
## [[mimiumのレコード型]]の実装と組み合わせる
```
これを実行すると、隠れレコード構造体定義とグローバルなデフォルト引数が作られる
```rust
...
type defaultarg = {
"gate":number = 0,
"freq":number = 1000,
"gain":number = 1.0
}
let default_arg_for_mysynth = param("mysynth",defaultarg::default());
fn dsp(){
mysynth()
}
```
dsp内で`mysynth({..})`と実行してしまうと、これがグローバルなコンテキストで作られない可能性がある・・のか?いや、でも基本的に書き換えられる心配はないからいいのかな
デフォルト引数構造体のインスタンスは必ずグローバル評価で行う、だとパラメトリックな生成はできないし問題起きそう
デフォルト実装、関数のデフォルト引数の組み合わせに対して自動でパラメーターが作られるようにしたい
```rust
//自動キャストとジェネリクスの組み合わせさえうまくいけばこのくらいのことはできそう
let p = param({..});
let p = controller({..});
fn dsp(){
p |>
|gate = 0,freq = 1000,gain = 1.0|{
@@ -125,4 +99,44 @@ fn dsp(){
}
```
ということは、とりあえず雑にParamを実装して
これを実行すると、隠れレコード構造体定義とグローバルなデフォルト引数が作られる
```rust
...
type defaultarg = {
gate:number = 0,
freq:number = 1000,
gain:number = 1.0
}
let p = param(defaultarg::default());//p is higher order function
fn dsp(){
mysynth(p())
}
```
dsp内で`mysynth({..})`と実行してしまうと、これがグローバルなコンテキストで作られない可能性がある・・のか?いや、でも基本的に書き換えられる心配はないからいいのかな
デフォルト引数構造体のインスタンスは必ずグローバル評価で行う、だとパラメトリックな生成はできないし問題起きそう
## [[mimiumの多段階計算]]と組み合わせる
`controller`関数がジェネリックな`Code`型を返す関数であれば、関数内に直接埋め込むこともできそう
```rust
//これが
fn dsp(){
controller!({..})
|> |gate = 0,freq = 1000,gain = 1.0|{
...//do something
}
}
//こう展開される(本当にジェネリックにできるかは要検討)
fn dsp(){
__get_generated_controller_value(uuid)
|> |gate = 0,freq = 1000,gain = 1.0|{
...//do something
}
}
```