[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
|
```rust
|
||||||
...
|
|
||||||
fn osc(){
|
|
||||||
...
|
|
||||||
}
|
|
||||||
fn additive(n,gen){
|
fn additive(n,gen){
|
||||||
let g = gen()
|
let g = gen()
|
||||||
if (n>1){
|
if (n>1){
|
||||||
let c = additive(n - 1.0 ,gen)
|
let next = additive(n-1 ,gen)
|
||||||
|rate| c(rate) + g(rate)/n
|
|rate| next(rate) + g(rate*n)/n
|
||||||
}else{
|
}else{
|
||||||
|rate| g(rate)
|
|rate| g(rate)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
...
|
||||||
|
fn osc(){
|
||||||
|
...
|
||||||
|
}
|
||||||
let myosc = additive(5, | | osc);
|
let myosc = additive(5, | | osc);
|
||||||
fn dsp(){
|
fn dsp(){
|
||||||
let f = 200
|
let f = 200
|
||||||
@@ -149,6 +149,16 @@ fn dsp(){
|
|||||||
```
|
```
|
||||||
|
|
||||||
```rust
|
```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)
|
#stage(main)
|
||||||
let PI = 3.14159265359
|
let PI = 3.14159265359
|
||||||
fn phasor_shift (freq,phase_shift){
|
fn phasor_shift (freq,phase_shift){
|
||||||
@@ -160,20 +170,9 @@ fn sinwave = (freq,phase){
|
|||||||
fn osc = (freq){
|
fn osc = (freq){
|
||||||
sinwave(freq,0.0) * 0.5
|
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(){
|
fn dsp(){
|
||||||
let f = 1000
|
let f = 200
|
||||||
let r = f |> additive!(10,`osc) |> Probe!("test")
|
let r = f |> additive!(5,`osc)
|
||||||
(r,r)
|
(r,r)
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -184,8 +183,9 @@ fn dsp(){
|
|||||||
${
|
${
|
||||||
let additive = |n,gen|{
|
let additive = |n,gen|{
|
||||||
if (n>1){
|
if (n>1){
|
||||||
let divider = lift_f(n)
|
let n_lifted = lift_f(n)
|
||||||
`|rate| ($gen)(rate) / $divider + $additive(n - 1.0 ,gen)
|
let next = additive(n-1 ,gen)
|
||||||
|
`|rate| ($next)(rate) + ($gen)(rate*$n_lifted) / $n_lifted
|
||||||
}else{
|
}else{
|
||||||
`|rate| ($gen)(rate)
|
`|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
|
```rust
|
||||||
|
|||||||
Reference in New Issue
Block a user