[obsidian] vault backup: 2023-09-20 01:33:51[

This commit is contained in:
Tomoya Matsuura(MacBookPro) 2023-09-20 01:33:51 +09:00
parent ec0d395d38
commit ef41f40bdd
2 changed files with 54 additions and 0 deletions

View File

@ -252,3 +252,38 @@ let res = cascade_f(3,0.9,input)
ともあれコピーキャプチャのクロージャでも問題はなさそうだけども、この状態だと`cascade`のfeedのコンテキストは毎サンプル終了しちゃうって感じなんだよね
## VMのインストラクションとデータ構造
```rust
type Ref = u8;
enum UpIndex{
Local(Reg),
UpValue(u64)
}
struct FuncProto{
instructons: Vec<Instruction>,
constants: Vec<RawVal>,
upvalue_idxs: Vec<UpIndex>,
feed_idx: Vec<u64>
}
```
この関数だけだとfeedidをどうつければいいかなあ
```rust
fn filterbank(N,input,lowestfreq, margin,Q,filter){
if(N>0){
return filter(input,lowestfreq+N*margin,Q)
+ filterbank(N-1,input, lowestfreq,margin,Q,filter)
}else{
return 0
}
}
fn lowpass(input,fb){
input* (1-fb) + self * fb
}
res = filterbank(3,input,100,2000,2.0,lowpass)
```
lowpassは最終的にlambda{feed{self}}的な感じになるが

View File

@ -168,3 +168,22 @@ process = hmtx(16);
継時再帰は[[Kronos]]のMeta-Sequencerでも使われてたはずだし、きちんと意味論を定義することはできるのかな
---
VMのインストラクションを考えてるけど。
ワンパスのコンパイラだと、関数呼び出しした時に値がFeedになるかどうかは、Substituteを直接的にするわけじゃないから判別できないのか
となると、やっぱり値に対して性質が決まってるから型として判別した方がいいんじゃないのかつまりfilterの値の方に関してはメモリサイズが不定だよなあ
```rust
fn filterbank(N,input,lowestfreq, margin,Q,filter){
if(N>0){
return filter(input,lowestfreq+N*margin,Q)
+ filterbank(N-1,input, lowestfreq,margin,Q,filter)
}else{
return 0
}
}
```