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としてグループ化、クリップスタートの相対時間として記録している
入出力のデータ型がジェネリックになるとすると、その読み書きはなんかジェネリックなシリアライズ・デシリアライズができる必要あり
エフェクター的なもの
- あるトラックの出力を受け取って、値→値変換をするだけ
- ただしパラメーターはグループ化されていて欲しい
どうやってジェネラティブ性を組み込むか
- 録音の代わりに、クリップデータの生成
- クリップ→クリップのノンリニアな変換