at.atmosynth.module
Schema Diff
+5 -1
Compatibility Analysis
Backward Compatible
No changes detected.
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"automation": {
5
5
"description": "A breakpoint envelope scheduled onto an AudioParam. Breakpoints up to and including sustainAt are scheduled on note-on; those after it on note-off.",
6
6
"properties": {
7
7
"breakpoints": {
8
8
"items": {
9
9
"ref": "#breakpoint",
10
10
"type": "ref"
11
11
},
12
12
"minLength": 1,
13
13
"type": "array"
14
14
},
15
15
"id": {
16
16
"maxLength": 64,
17
17
"minLength": 1,
18
18
"type": "string"
19
19
},
20
20
"label": {
21
21
"maxLength": 200,
22
22
"type": "string"
23
23
},
24
24
"sustainAt": {
25
25
"description": "Index into breakpoints where the value holds while a note is held. Absent means a one-shot.",
26
26
"minimum": 0,
27
27
"type": "integer"
28
28
},
29
29
"target": {
30
30
"ref": "#paramTarget",
31
31
"type": "ref"
32
32
}
33
33
},
34
34
"required": [
35
35
"id",
36
36
"target",
37
37
"breakpoints"
38
38
],
39
39
"type": "object"
40
40
},
41
41
"breakpoint": {
42
42
"properties": {
43
43
"curve": {
44
44
"description": "How the value travels from the previous breakpoint.",
45
45
"knownValues": [
46
46
"step",
47
47
"linear",
48
48
"exponential"
49
49
],
50
50
"type": "string"
51
51
},
52
52
"time": {
53
53
"description": "Milliseconds from the trigger.",
54
54
"minimum": 0,
55
55
"type": "integer"
56
56
},
57
57
"value": {
58
-
"description": "The param's value at this instant.",
58
+
"description": "The param's value at this instant. A number that is not a whole number is carried as its decimal string — \"0.5\", not 0.5 — because the ATproto data model has no floating-point type and a PDS refuses one. A whole number is an ordinary integer, and a reader turns such a string back into a number.",
59
59
"type": "unknown"
60
60
}
61
61
},
62
62
"required": [
63
63
"time",
64
64
"value"
65
65
],
66
66
"type": "object"
67
67
},
68
68
"connection": {
69
69
"description": "An audio connection from a node output to either an audio input or a named AudioParam.",
70
70
"properties": {
71
71
"from": {
72
72
"ref": "#source",
73
73
"type": "ref"
74
74
},
75
75
"to": {
76
76
"ref": "#target",
77
77
"type": "ref"
78
78
}
79
79
},
80
80
"required": [
81
81
"from",
82
82
"to"
83
83
],
84
84
"type": "object"
85
85
},
86
86
"lineage": {
87
87
"description": "The module this one was forked from, and its author.",
88
88
"properties": {
89
89
"authorDid": {
90
90
"format": "did",
91
91
"type": "string"
92
92
},
93
93
"moduleId": {
94
94
"maxLength": 128,
95
95
"type": "string"
96
96
},
97
97
"uri": {
98
98
"format": "at-uri",
99
99
"type": "string"
100
100
}
101
101
},
102
102
"required": [
103
103
"uri",
104
104
"authorDid"
105
105
],
106
106
"type": "object"
107
107
},
108
108
"main": {
109
109
"description": "A module, held in its author's own repository.",
110
110
"key": "tid",
111
111
"record": {
112
112
"properties": {
113
113
"audioInputs": {
114
114
"description": "Zero or more individually identified audio inputs.",
115
115
"items": {
116
116
"ref": "#port",
117
117
"type": "ref"
118
118
},
119
119
"type": "array"
120
120
},
121
121
"audioOutputs": {
122
122
"items": {
123
123
"ref": "#port",
124
124
"type": "ref"
125
125
},
126
126
"type": "array"
127
127
},
128
128
"automation": {
129
129
"description": "Scheduled AudioParam envelopes. Web Audio has no envelope node, so these are their own structure.",
130
130
"items": {
131
131
"ref": "#automation",
132
132
"type": "ref"
133
133
},
134
134
"type": "array"
135
135
},
136
136
"connections": {
137
137
"items": {
138
138
"ref": "#connection",
139
139
"type": "ref"
140
140
},
141
141
"type": "array"
142
142
},
143
143
"createdAt": {
144
144
"format": "datetime",
145
145
"type": "string"
146
146
},
147
147
"description": {
148
148
"maxLength": 3000,
149
149
"type": "string"
150
150
},
151
151
"descriptionVersion": {
152
152
"description": "Version of the module description this record follows. A reader accepts any version at or below its own.",
153
153
"minimum": 1,
154
154
"type": "integer"
155
155
},
156
156
"forkedFrom": {
157
157
"ref": "#lineage",
158
158
"type": "ref"
159
159
},
160
160
"midiInputs": {
161
161
"items": {
162
162
"ref": "#port",
163
163
"type": "ref"
164
164
},
165
165
"type": "array"
166
166
},
167
167
"moduleId": {
168
168
"description": "Stable identity shared by every published version of this module.",
169
169
"maxLength": 128,
170
170
"type": "string"
171
171
},
172
172
"name": {
173
173
"maxLength": 200,
174
174
"minLength": 1,
175
175
"type": "string"
176
176
},
177
177
"nodes": {
178
178
"items": {
179
179
"ref": "#node",
180
180
"type": "ref"
181
181
},
182
182
"type": "array"
183
183
},
184
184
"parameters": {
185
185
"items": {
186
186
"ref": "#parameter",
187
187
"type": "ref"
188
188
},
189
189
"type": "array"
190
190
},
191
191
"sampleSlots": {
192
192
"items": {
193
193
"ref": "#sampleSlot",
194
194
"type": "ref"
195
195
},
196
196
"type": "array"
197
197
},
198
198
"versionKey": {
199
199
"description": "This record's own key within the series. Informational; the record key is authoritative.",
200
200
"maxLength": 128,
201
201
"type": "string"
202
202
}
203
203
},
204
204
"required": [
205
205
"descriptionVersion",
206
206
"moduleId",
207
207
"name",
208
208
"description",
209
209
"audioInputs",
210
210
"audioOutputs",
211
211
"midiInputs",
212
212
"nodes",
213
213
"connections",
214
214
"createdAt"
215
215
],
216
216
"type": "object"
217
217
},
218
218
"type": "record"
219
219
},
220
220
"node": {
221
221
"description": "One Web Audio node. `kind` is drawn from a closed vocabulary; `options` are its construction-time settings, which are not AudioParams and cannot be modulated.",
222
222
"properties": {
223
223
"id": {
224
224
"maxLength": 64,
225
225
"minLength": 1,
226
226
"type": "string"
227
227
},
228
228
"kind": {
229
229
"maxLength": 64,
230
230
"minLength": 1,
231
231
"type": "string"
232
232
},
233
233
"options": {
234
+
"description": "The node's settings, as its kind defines them. A number that is not a whole number is carried as its decimal string — \"0.5\", not 0.5 — because the ATproto data model has no floating-point type and a PDS refuses one. A whole number is an ordinary integer, and a reader turns such a string back into a number.",
234
235
"type": "unknown"
235
236
}
236
237
},
237
238
"required": [
238
239
"id",
239
240
"kind"
240
241
],
241
242
"type": "object"
242
243
},
243
244
"paramTarget": {
244
245
"properties": {
245
246
"node": {
246
247
"maxLength": 64,
247
248
"minLength": 1,
248
249
"type": "string"
249
250
},
250
251
"param": {
251
252
"maxLength": 64,
252
253
"minLength": 1,
253
254
"type": "string"
254
255
}
255
256
},
256
257
"required": [
257
258
"node",
258
259
"param"
259
260
],
260
261
"type": "object"
261
262
},
262
263
"parameter": {
263
264
"description": "A parameter the module exposes for a patch to set. Each target reaches an AudioParam, a construction option, or one field of an automation breakpoint.",
264
265
"properties": {
265
266
"default": {
267
+
"description": "The value used where a patch sets none. A number that is not a whole number is carried as its decimal string — \"0.5\", not 0.5 — because the ATproto data model has no floating-point type and a PDS refuses one. A whole number is an ordinary integer, and a reader turns such a string back into a number. Where this parameter declares a closed value set, it is one of those strings.",
266
268
"type": "unknown"
267
269
},
268
270
"id": {
269
271
"maxLength": 64,
270
272
"minLength": 1,
271
273
"type": "string"
272
274
},
273
275
"label": {
274
276
"maxLength": 200,
275
277
"minLength": 1,
276
278
"type": "string"
277
279
},
278
280
"range": {
279
281
"ref": "#range",
280
282
"type": "ref"
281
283
},
282
284
"targets": {
283
285
"items": {
284
286
"ref": "#parameterTarget",
285
287
"type": "ref"
286
288
},
287
289
"minLength": 1,
288
290
"type": "array"
289
291
},
290
292
"values": {
291
293
"description": "A closed value set, where the parameter is not numeric.",
292
294
"items": {
293
295
"maxLength": 200,
294
296
"type": "string"
295
297
},
296
298
"type": "array"
297
299
}
298
300
},
299
301
"required": [
300
302
"id",
301
303
"label",
302
304
"targets"
303
305
],
304
306
"type": "object"
305
307
},
306
308
"parameterTarget": {
307
309
"description": "One of: {node, param}, {node, option}, or {automation, breakpoint, field}.",
308
310
"properties": {
309
311
"automation": {
310
312
"maxLength": 64,
311
313
"type": "string"
312
314
},
313
315
"breakpoint": {
314
316
"minimum": 0,
315
317
"type": "integer"
316
318
},
317
319
"field": {
318
320
"knownValues": [
319
321
"time",
320
322
"value"
321
323
],
322
324
"type": "string"
323
325
},
324
326
"node": {
325
327
"maxLength": 64,
326
328
"type": "string"
327
329
},
328
330
"option": {
329
331
"maxLength": 64,
330
332
"type": "string"
331
333
},
332
334
"param": {
333
335
"maxLength": 64,
334
336
"type": "string"
335
337
}
336
338
},
337
339
"type": "object"
338
340
},
339
341
"port": {
340
342
"description": "One individually identified audio or MIDI boundary of the module.",
341
343
"properties": {
342
344
"id": {
343
345
"maxLength": 64,
344
346
"minLength": 1,
345
347
"type": "string"
346
348
},
347
349
"label": {
348
350
"maxLength": 200,
349
351
"type": "string"
350
352
}
351
353
},
352
354
"required": [
353
355
"id"
354
356
],
355
357
"type": "object"
356
358
},
357
359
"range": {
358
360
"properties": {
359
361
"max": {
362
+
"description": "The high bound. A number that is not a whole number is carried as its decimal string — \"0.5\", not 0.5 — because the ATproto data model has no floating-point type and a PDS refuses one. A whole number is an ordinary integer, and a reader turns such a string back into a number.",
360
363
"type": "unknown"
361
364
},
362
365
"min": {
366
+
"description": "The low bound. A number that is not a whole number is carried as its decimal string — \"0.5\", not 0.5 — because the ATproto data model has no floating-point type and a PDS refuses one. A whole number is an ordinary integer, and a reader turns such a string back into a number.",
363
367
"type": "unknown"
364
368
}
365
369
},
366
370
"required": [
367
371
"min",
368
372
"max"
369
373
],
370
374
"type": "object"
371
375
},
372
376
"sampleRef": {
373
377
"description": "A sample blob and the account that holds it.",
374
378
"properties": {
375
379
"blob": {
376
380
"accept": [
377
381
"audio/wav"
378
382
],
379
383
"maxSize": 2097152,
380
384
"type": "blob"
381
385
},
382
386
"ownerDid": {
383
387
"format": "did",
384
388
"type": "string"
385
389
}
386
390
},
387
391
"required": [
388
392
"blob",
389
393
"ownerDid"
390
394
],
391
395
"type": "object"
392
396
},
393
397
"sampleSlot": {
394
398
"description": "A named slot a patch instance may fill with its own sample. `node` names a node in this graph and `property` the thing the sample feeds.",
395
399
"properties": {
396
400
"default": {
397
401
"ref": "#sampleRef",
398
402
"type": "ref"
399
403
},
400
404
"id": {
401
405
"maxLength": 64,
402
406
"minLength": 1,
403
407
"type": "string"
404
408
},
405
409
"label": {
406
410
"maxLength": 200,
407
411
"type": "string"
408
412
},
409
413
"node": {
410
414
"maxLength": 64,
411
415
"minLength": 1,
412
416
"type": "string"
413
417
},
414
418
"property": {
415
419
"knownValues": [
416
420
"buffer"
417
421
],
418
422
"type": "string"
419
423
}
420
424
},
421
425
"required": [
422
426
"id",
423
427
"node",
424
428
"property"
425
429
],
426
430
"type": "object"
427
431
},
428
432
"source": {
429
433
"properties": {
430
434
"node": {
431
435
"maxLength": 64,
432
436
"minLength": 1,
433
437
"type": "string"
434
438
},
435
439
"output": {
436
440
"minimum": 0,
437
441
"type": "integer"
438
442
}
439
443
},
440
444
"required": [
441
445
"node"
442
446
],
443
447
"type": "object"
444
448
},
445
449
"target": {
446
450
"description": "Exactly one of `input` or `param` is present. `param` is modulation: a node output reaching a named AudioParam.",
447
451
"properties": {
448
452
"input": {
449
453
"minimum": 0,
450
454
"type": "integer"
451
455
},
452
456
"node": {
453
457
"maxLength": 64,
454
458
"minLength": 1,
455
459
"type": "string"
456
460
},
457
461
"param": {
458
462
"maxLength": 64,
459
463
"type": "string"
460
464
}
461
465
},
462
466
"required": [
463
467
"node"
464
468
],
465
469
"type": "object"
466
470
}
467
471
},
468
472
"description": "A reusable synth module: Web Audio nodes wired together, with declared audio and MIDI boundaries, exposed parameters, automation and sample slots. Each published version is its own record; records sharing a moduleId form a series.",
469
473
"id": "at.atmosynth.module",
470
474
"lexicon": 1
471
475
}