Files
quartz-research-note/content/DAWのプロジェクトというデータ構造.md
松浦 知也 Matsuura Tomoya aae4317eb9
All checks were successful
Build / build (push) Successful in 10m1s
[obsidian] vault backup: 2025-09-24 18:14:41[
2025-09-24 18:14:41 +09:00

70 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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やスライダーで動かした値がリアルタイムにオーディオに反映される
そのうえで、レコーディングすればその値の履歴が書き込める
## エフェクター的なもの
- あるトラックの出力を受け取って、値->値変換をするだけ
- ただしパラメーターはグループ化されていて欲しい
## どうやってジェネラティブ性を組み込むか
- 録音の代わりに、クリップデータの生成
- クリップ→クリップのノンリニアな変換
-