#programming-language #sound
https://github.com/tomoyanonymous/otopoiesis
DAWをプログラマブルにする試み
```
#[param("hoge",0..8)]
let p1 = 1.0;
```
---
## 思想
Brandt(2002) の[[Temporal Type Constructor]](以下TTC)という概念を使う。
TTCはジェネリックなタイプ`A`に対して、以下の3つの型コンストラクタを用意することでジェネリックに時間信号を取り扱う思想。
以下はRustの擬似コード。
```rust
type time = Real;
//時間に紐づいたイベント。MIDIノートとか
struct Event{v:A, t:time}
//有限ベクトル。オーディオクリップとか
type Vec = std::Vec
//無限ベクトル、またはストリーム。1論理時刻毎にA型のものを返す漸化式(内部状態を持つかもしれない)
type iVec = BoxA>
```
例えばMIDIの記録されたデータは
```rust
type NOTE= Event<(u8,u8)>//ノート番号、ベロシティ
type MIDI = Vec
```
みたいになる
## 構造
基本的なイメージはこんな感じ?
```
type Project = Vec