at.atmosynth.arrangement
Schema Diff
+29 -0
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 8 non-breaking changes.
Breaking Changes (2)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.atmosynth.arrangement#loopRange", src: "at.atmosynth.arrangement#loopRange", tgt: "at.atmosynth.arrangement#loopRange.start", kind: "prop", name: Some("start") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.atmosynth.arrangement#loopRange", src: "at.atmosynth.arrangement#loopRange", tgt: "at.atmosynth.arrangement#loopRange.end", kind: "prop", name: Some("end") }
Non-Breaking Changes (8)
- AddedVertex AddedVertex { vertex_id: "at.atmosynth.arrangement#loopRange" }
- AddedVertex AddedVertex { vertex_id: "at.atmosynth.arrangement#loopRange.end" }
- AddedVertex AddedVertex { vertex_id: "at.atmosynth.arrangement#loopRange.on" }
- AddedVertex AddedVertex { vertex_id: "at.atmosynth.arrangement#loopRange.start" }
- AddedVertex AddedVertex { vertex_id: "at.atmosynth.arrangement:body.loop" }
- AddedEdge AddedEdge { src: "at.atmosynth.arrangement#loopRange", tgt: "at.atmosynth.arrangement#loopRange.on", kind: "prop", name: Some("on") }
- AddedEdge AddedEdge { src: "at.atmosynth.arrangement:body", tgt: "at.atmosynth.arrangement:body.loop", kind: "prop", name: Some("loop") }
- AddedEdge AddedEdge { src: "at.atmosynth.arrangement:body.loop", tgt: "at.atmosynth.arrangement#loopRange", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "at.atmosynth.arrangement#loopRange" }AddedVertex { vertex_id: "at.atmosynth.arrangement#loopRange.end" }AddedVertex { vertex_id: "at.atmosynth.arrangement#loopRange.on" }AddedVertex { vertex_id: "at.atmosynth.arrangement#loopRange.start" }AddedVertex { vertex_id: "at.atmosynth.arrangement:body.loop" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "at.atmosynth.arrangement#loopRange", src: "at.atmosynth.arrangement#loopRange", tgt: "at.atmosynth.arrangement#loopRange.start", kind: "prop", name: Some("start") }
- Breaking: RequiredEdgeAdded { vertex_id: "at.atmosynth.arrangement#loopRange", src: "at.atmosynth.arrangement#loopRange", tgt: "at.atmosynth.arrangement#loopRange.end", kind: "prop", name: Some("end") }
- Non-breaking: AddedEdge { src: "at.atmosynth.arrangement#loopRange", tgt: "at.atmosynth.arrangement#loopRange.on", kind: "prop", name: Some("on") }
- Non-breaking: AddedEdge { src: "at.atmosynth.arrangement:body", tgt: "at.atmosynth.arrangement:body.loop", kind: "prop", name: Some("loop") }
- Non-breaking: AddedEdge { src: "at.atmosynth.arrangement:body.loop", tgt: "at.atmosynth.arrangement#loopRange", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"includedPart": {
5
5
"description": "One part this arrangement includes, and how its creator mixes it.",
6
6
"properties": {
7
7
"mix": {
8
8
"description": "The arrangement's creator's mix of the part's tracks, which stands in place of the part's own strips and destinations wherever it names a track. A track it does not name is heard as the part writes it.",
9
9
"items": {
10
10
"ref": "#partMix",
11
11
"type": "ref"
12
12
},
13
13
"maxLength": 32,
14
14
"type": "array"
15
15
},
16
16
"part": {
17
17
"description": "The part, and the version of it that was included. The part is heard as it is now; the version says what the arrangement's creator agreed to, so a change since can be shown to them.",
18
18
"ref": "com.atproto.repo.strongRef",
19
19
"type": "ref"
20
20
}
21
21
},
22
22
"required": [
23
23
"part"
24
24
],
25
25
"type": "object"
26
26
},
27
+
"loopRange": {
28
+
"description": "A range of the timeline, in ticks, played over and over while the loop is on.",
29
+
"properties": {
30
+
"end": {
31
+
"description": "Where the range ends, in ticks: after `start`.",
32
+
"minimum": 1,
33
+
"type": "integer"
34
+
},
35
+
"on": {
36
+
"description": "Whether the loop is on. Optional: absent is off, and only `true` is written.",
37
+
"type": "boolean"
38
+
},
39
+
"start": {
40
+
"description": "Where the range starts, in ticks.",
41
+
"minimum": 0,
42
+
"type": "integer"
43
+
}
44
+
},
45
+
"required": [
46
+
"start",
47
+
"end"
48
+
],
49
+
"type": "object"
50
+
},
27
51
"main": {
28
52
"description": "An arrangement, held in its creator's own repository.",
29
53
"key": "tid",
30
54
"record": {
31
55
"properties": {
32
56
"createdAt": {
33
57
"format": "datetime",
34
58
"type": "string"
35
59
},
36
60
"description": {
37
61
"maxLength": 3000,
38
62
"type": "string"
39
63
},
40
64
"keys": {
41
65
"description": "The key map: the first point at 0, each later than the one before. Optional: absent says no key, which is an arrangement's to leave unsaid.",
42
66
"items": {
43
67
"ref": "at.atmosynth.defs#keyPoint",
44
68
"type": "ref"
45
69
},
46
70
"maxLength": 1024,
47
71
"type": "array"
48
72
},
49
73
"length": {
50
74
"description": "Where the arrangement ends, in ticks. Optional: absent ends it with its last clip.",
51
75
"minimum": 1,
52
76
"type": "integer"
53
77
},
54
78
"license": {
55
79
"ref": "at.atmosynth.defs#license",
56
80
"type": "ref"
57
81
},
58
82
"lineage": {
59
83
"description": "Where the arrangement came from: the arrangement it was forked from, the patch it was made of, and every record anything in it was imported from, so its credits are complete without reading anything else.",
60
84
"items": {
61
85
"ref": "at.atmosynth.defs#lineage",
62
86
"type": "ref"
63
87
},
64
88
"maxLength": 64,
65
89
"type": "array"
66
90
},
91
+
"loop": {
92
+
"description": "The range its creator loops over while working on it. Optional: absent is no loop range. A reader that does not loop, such as a renderer, ignores it: an arrangement played through is played once, from start to end.",
93
+
"ref": "#loopRange",
94
+
"type": "ref"
95
+
},
67
96
"markers": {
68
97
"description": "Named moments, in order of `at`.",
69
98
"items": {
70
99
"ref": "at.atmosynth.defs#marker",
71
100
"type": "ref"
72
101
},
73
102
"maxLength": 1024,
74
103
"type": "array"
75
104
},
76
105
"meter": {
77
106
"description": "The meter map: the first point at 0, each later one on a bar line of the meter before it. Optional: absent is 4/4 throughout.",
78
107
"items": {
79
108
"ref": "at.atmosynth.defs#meterPoint",
80
109
"type": "ref"
81
110
},
82
111
"maxLength": 1024,
83
112
"type": "array"
84
113
},
85
114
"name": {
86
115
"maxLength": 200,
87
116
"minLength": 1,
88
117
"type": "string"
89
118
},
90
119
"openToParts": {
91
120
"description": "Whether parts offered to this arrangement and not yet included are shown to everybody, rather than to its creator alone. Anybody may write a part naming any arrangement in their own repository; this only decides what the arrangement's own page lists. Optional: absent is its creator alone, and only `true` is written.",
92
121
"type": "boolean"
93
122
},
94
123
"parts": {
95
124
"description": "Parts other people wrote for this arrangement, in their own repositories, which its creator has included. An included part is heard as it is now; a part its writer has since deleted is no longer heard.",
96
125
"items": {
97
126
"ref": "#includedPart",
98
127
"type": "ref"
99
128
},
100
129
"maxLength": 64,
101
130
"type": "array"
102
131
},
103
132
"tags": {
104
133
"description": "Freely created tags, lower-cased on write.",
105
134
"items": {
106
135
"maxLength": 128,
107
136
"type": "string"
108
137
},
109
138
"maxLength": 32,
110
139
"type": "array"
111
140
},
112
141
"tempo": {
113
142
"description": "The tempo map: the first point at 0, each later than the one before. One point is an arrangement at one tempo. A player that is a host with a clock of its own, a DAW, plays at its tempo instead.",
114
143
"items": {
115
144
"ref": "at.atmosynth.defs#tempoPoint",
116
145
"type": "ref"
117
146
},
118
147
"maxLength": 1024,
119
148
"minLength": 1,
120
149
"type": "array"
121
150
},
122
151
"tracks": {
123
152
"description": "The tracks, in the order they are shown. One of them is the bus `master`, which every track reaches in the end and which alone goes to the speakers.",
124
153
"items": {
125
154
"ref": "at.atmosynth.defs#track",
126
155
"type": "ref"
127
156
},
128
157
"maxLength": 256,
129
158
"minLength": 1,
130
159
"type": "array"
131
160
}
132
161
},
133
162
"required": [
134
163
"name",
135
164
"tempo",
136
165
"tracks",
137
166
"createdAt"
138
167
],
139
168
"type": "object"
140
169
},
141
170
"type": "record"
142
171
},
143
172
"partMix": {
144
173
"description": "The arrangement creator's mix of one track of an included part.",
145
174
"properties": {
146
175
"strip": {
147
176
"ref": "at.atmosynth.defs#strip",
148
177
"type": "ref"
149
178
},
150
179
"to": {
151
180
"description": "The id of the bus in this arrangement the track goes to, in place of the part's own `to`.",
152
181
"maxLength": 64,
153
182
"type": "string"
154
183
},
155
184
"track": {
156
185
"description": "The id of the track in the part.",
157
186
"maxLength": 64,
158
187
"minLength": 1,
159
188
"type": "string"
160
189
}
161
190
},
162
191
"required": [
163
192
"track"
164
193
],
165
194
"type": "object"
166
195
}
167
196
},
168
197
"description": "An arrangement: tracks of clips over one timeline, mixed through busses into a master, with the tempo, the meter and the key it is counted in. Its instruments and effects are patches held inside it whole, and what it took from other people's records it holds as copies that remember where they came from. Parts that other people wrote for it in their own repositories are included by address.",
169
198
"id": "at.atmosynth.arrangement",
170
199
"lexicon": 1
171
200
}