---
date: 2025-09-05 11:37
---
#memo 

[[DAW]]について

[[otopoiesis]]に行き詰まったので

## プロジェクトデータ

- 複数のトラックを含む
- グローバルなパラメーター（テンポとか）

## トラック

[[Temporal Type Constructor]]で表現されうる時間軸に沿って変化するデータ

データを持つトラック

 - 入出力を持つ
	 - MIDI
	 - OSC
	 - オーディオ
 - 入出力の型が一致すれば、他のトラックが別のトラックの入力になることもある
 - 大きく分けて以下のタイプ
	 - プロトタイプ：時間に紐付けされたイベントの集合`[Event<a>]`
	 - ストリーム： 一定間隔で表現されるデータ列
		 - この際Control/Audioの2タイプでもいい
	
`時間に紐付けされたイベントの集合Event<a>`に関しては、トラックの出力に接続する際にストリームに変換される必要がある

- オーディオクリップも広い意味では`[Event<AudioClip>]`的なデータ
	- だが、レコーディング、再生の際のストリームデータへの変換は暗黙的に行われている

```
struct Clip<a>{
	dur:Number
	data:a
}
type MonoAudioClip = Event<Clip<Vec<Number>>>

type AudioTrackProto = [MonoAudioClip]

```

MIDIトラックの場合はもっと複雑。タイムスタンプが一つ一つに付属したデータの集合になるけど、記録時にはそれをさらにタイムスタンプ付きClipとしてグループ化、クリップスタートの相対時間として記録している

入出力のデータ型がジェネリックになるとすると、その読み書きはなんかジェネリックなシリアライズ・デシリアライズができる必要あり

ライブレコーディング（モニタリング）モードだと、OSCやスライダーで動かした値がリアルタイムにオーディオに反映される

そのうえで、レコーディングすればその値の履歴が書き込める


## エフェクター的なもの

- あるトラックの出力を受け取って、値->値変換をするだけ
- ただしパラメーターはグループ化されていて欲しい



## どうやってジェネラティブ性を組み込むか

- 録音の代わりに、クリップデータの生成
- クリップ→クリップのノンリニアな変換
- 


