[obsidian] vault backup: 2024-10-30 17:07:08[
Some checks failed
Build / build (push) Has been cancelled
Some checks failed
Build / build (push) Has been cancelled
This commit is contained in:
parent
b409e874d8
commit
74fd2c3836
@ -3,6 +3,79 @@ date: 2024-10-30 15:42
|
|||||||
---
|
---
|
||||||
#mimium
|
#mimium
|
||||||
|
|
||||||
|
## 要件
|
||||||
|
|
||||||
|
どこまでMIDIインプットをmimiumの世界の外側として捉えるか
|
||||||
|
|
||||||
|
|
||||||
|
### 先行例
|
||||||
|
|
||||||
|
[[SuperCollider]]や[[ChucK]]はコールバックを登録するようなイメージ
|
||||||
|
|
||||||
|
[Using MIDI | SuperCollider 3.12.2 Help](https://doc.sccode.org/Guides/UsingMIDI.html
|
||||||
|
|
||||||
|
```smalltalk
|
||||||
|
s.boot;
|
||||||
|
|
||||||
|
(
|
||||||
|
var notes, on, off;
|
||||||
|
|
||||||
|
MIDIClient.init;
|
||||||
|
MIDIIn.connectAll;
|
||||||
|
|
||||||
|
notes = Array.newClear(128); // array has one slot per possible MIDI note
|
||||||
|
|
||||||
|
on = MIDIFunc.noteOn({ |veloc, num, chan, src|
|
||||||
|
notes[num] = Synth(\default, [\freq, num.midicps,
|
||||||
|
\amp, veloc * 0.00315]);
|
||||||
|
});
|
||||||
|
|
||||||
|
off = MIDIFunc.noteOff({ |veloc, num, chan, src|
|
||||||
|
notes[num].release;
|
||||||
|
});
|
||||||
|
|
||||||
|
q = { on.free; off.free; };
|
||||||
|
)
|
||||||
|
|
||||||
|
// when done:
|
||||||
|
q.value;
|
||||||
|
```
|
||||||
|
|
||||||
|
まあこれはDSPアウトプットの合成が.playで暗黙的に行える(加算で合成されるという想定)だからできることかな、、、
|
||||||
|
|
||||||
|
ChuckもボイスごとにShredを生やす方向で対応してるからちょっと微妙だ
|
||||||
|
|
||||||
|
[Chuck - Input & Output](https://chuck.stanford.edu/doc/reference/io.html#MidiIn)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
現実的には、[[Faust]]のように、ボイスアロケーターは外側で実装してしまい、非同期に更新されうるAtomicな値のセルをノートやccのデータとして受け取れるようにすれば当面は十分
|
||||||
|
|
||||||
|
が、最終的にはMIDIエフェクト(MIDI信号自体のディレイやクォンタイズ、スロットリングとか)を[[FUnctional Reactive Programming|FRP]]っぽく書けると嬉しい
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Noteのバインドの記法
|
||||||
|
|
||||||
|
```rust
|
||||||
|
let channel:()->float = bind_midi_note_mono(channel)
|
||||||
|
|
||||||
|
channel() //値の取り出し
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```rust
|
||||||
|
//rust
|
||||||
|
fn bind_midi_note_mono(vm:&mut Machine)->ReturnCode{
|
||||||
|
let ch = vm.get_stack(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
IOの順序保証とか考える
|
IOの順序保証とか考える
|
||||||
|
|
||||||
正格評価だとIOモナドとかはそもそも考える必要がない
|
正格評価だとIOモナドとかはそもそも考える必要がない
|
||||||
|
Loading…
Reference in New Issue
Block a user