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としてグループ化、クリップスタートの相対時間として記録している

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

エフェクター的なもの

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

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

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