[obsidian] vault backup: 2025-12-18 17:11:19[
All checks were successful
Build / build (push) Successful in 8m16s
All checks were successful
Build / build (push) Successful in 8m16s
This commit is contained in:
@@ -126,20 +126,20 @@ mimiumでは、多段階計算の体系を直感的に扱えるように2つの
|
||||
### 多段階計算によるメタ操作の実例
|
||||
|
||||
```rust
|
||||
...
|
||||
fn osc(){
|
||||
...
|
||||
}
|
||||
|
||||
fn additive(n,gen){
|
||||
let g = gen()
|
||||
if (n>1){
|
||||
let c = additive(n - 1.0 ,gen)
|
||||
|rate| c(rate) + g(rate)/n
|
||||
let next = additive(n-1 ,gen)
|
||||
|rate| next(rate) + g(rate*n)/n
|
||||
}else{
|
||||
|rate| g(rate)
|
||||
}
|
||||
}
|
||||
|
||||
...
|
||||
fn osc(){
|
||||
...
|
||||
}
|
||||
let myosc = additive(5, | | osc);
|
||||
fn dsp(){
|
||||
let f = 200
|
||||
@@ -149,6 +149,16 @@ fn dsp(){
|
||||
```
|
||||
|
||||
```rust
|
||||
#stage(macro)
|
||||
fn additive(n,gen){
|
||||
if (n>1){
|
||||
let n_lifted = lift_f(n)
|
||||
let next = additive(n-1 ,gen)
|
||||
`|rate| ($next)(rate) + ($gen)(rate*$n_lifted) / $n_lifted
|
||||
}else{
|
||||
`|rate| ($gen)(rate)
|
||||
}
|
||||
}
|
||||
#stage(main)
|
||||
let PI = 3.14159265359
|
||||
fn phasor_shift (freq,phase_shift){
|
||||
@@ -160,20 +170,9 @@ fn sinwave = (freq,phase){
|
||||
fn osc = (freq){
|
||||
sinwave(freq,0.0) * 0.5
|
||||
}
|
||||
#stage(macro)
|
||||
fn additive(n,gen:`(float)->float)->`(float)->float{
|
||||
if (n>1){
|
||||
let multiplier = lift_f(n)
|
||||
let next = additive(n - 1.0 ,gen)
|
||||
`|rate|{ ($gen)(rate*$multiplier) / $multiplier + ($next)(rate)}
|
||||
}else{
|
||||
`|rate| ($gen)(rate)
|
||||
}
|
||||
}
|
||||
#stage(main)
|
||||
fn dsp(){
|
||||
let f = 1000
|
||||
let r = f |> additive!(10,`osc) |> Probe!("test")
|
||||
let f = 200
|
||||
let r = f |> additive!(5,`osc)
|
||||
(r,r)
|
||||
}
|
||||
```
|
||||
@@ -184,8 +183,9 @@ fn dsp(){
|
||||
${
|
||||
let additive = |n,gen|{
|
||||
if (n>1){
|
||||
let divider = lift_f(n)
|
||||
`|rate| ($gen)(rate) / $divider + $additive(n - 1.0 ,gen)
|
||||
let n_lifted = lift_f(n)
|
||||
let next = additive(n-1 ,gen)
|
||||
`|rate| ($next)(rate) + ($gen)(rate*$n_lifted) / $n_lifted
|
||||
}else{
|
||||
`|rate| ($gen)(rate)
|
||||
}
|
||||
@@ -203,6 +203,19 @@ fn dsp(){
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
```rust
|
||||
// after macro expansion
|
||||
let osc = | | {
|
||||
...
|
||||
}
|
||||
let dsp = | |{
|
||||
let f = 200
|
||||
let r = f |> |f| osc(f*5)/5 + osc(f*4)/4 + ... osc(f)
|
||||
(r,r)
|
||||
}
|
||||
```
|
||||
|
||||
## コールツリーの解析
|
||||
|
||||
```rust
|
||||
|
||||
Reference in New Issue
Block a user