at.atmosynth.module

atmosynth.at

Documentation

A module, held in its author's own repository.

main record

A module, held in its author's own repository.

Record Key tid Timestamp-based ID

Properties

audioInputs array of ref #port Required

Zero or more individually identified audio inputs.

audioOutputs array of ref #port Required

No description available.

automation array of ref #automation Optional

Scheduled AudioParam envelopes. Web Audio has no envelope node, so these are their own structure.

connections array of ref #connection Required

No description available.

createdAt string datetime Required

An RFC 3339 formatted timestamp.

description string Required

No description available.

maxLength: 3000 bytes
descriptionVersion integer Required

Version of the module description this record follows. A reader accepts any version at or below its own.

minimum: 1
forkedFrom ref #lineage Optional

No description available.

midiInputs array of ref #port Required

Zero or more note inputs. A note input carries note events — what is played, and when — from any note source: a sequencer's note output, or the player, which is the on-screen keys, the computer keyboard and every MIDI device at once. "MIDI" is the historical name; nothing arriving here need have come from MIDI.

moduleId string Required

Stable identity shared by every published version of this module.

maxLength: 128 bytes
name string Required

No description available.

maxLength: 200 bytesminLength: 1 bytes
nodes array of ref #node Required

No description available.

noteOutputs array of ref #port Optional

Zero or more note outputs. A note output carries note events — what is played, and when — rather than a signal, so it is wired to another instance's note input (`midiInputs`) rather than to an audio input. A module that declares one is a source of what is played; a module that declares none is what plays it.

noteSource string Optional

What this module emits notes by, where it is not made of Web Audio nodes at all. A note source has no `nodes` and no `connections`: it produces note events, and the behaviour that produces them is named here rather than described, because there is no vocabulary of nodes for a thing that makes no sound. A reader that does not know the named behaviour cannot run the module, and says so rather than guessing.

maxLength: 64 bytes
Known values: keyboard, sequencer
parameters array of ref #parameter Optional

No description available.

sampleSlots array of ref #sampleSlot Optional

No description available.

versionKey string Optional

The record key this version is published under, repeated in the record so a reader holding only the record knows which version it is. A patch's `moduleRef.versionKey` is this value, and it is the record key a reader fetches: a record whose `versionKey` differs from its own key is pinned by the key and misdescribed by this field.

maxLength: 128 bytes
View raw schema
{
  "key": "tid",
  "type": "record",
  "record": {
    "type": "object",
    "required": [
      "descriptionVersion",
      "moduleId",
      "name",
      "description",
      "audioInputs",
      "audioOutputs",
      "midiInputs",
      "nodes",
      "connections",
      "createdAt"
    ],
    "properties": {
      "name": {
        "type": "string",
        "maxLength": 200,
        "minLength": 1
      },
      "nodes": {
        "type": "array",
        "items": {
          "ref": "#node",
          "type": "ref"
        }
      },
      "moduleId": {
        "type": "string",
        "maxLength": 128,
        "description": "Stable identity shared by every published version of this module."
      },
      "createdAt": {
        "type": "string",
        "format": "datetime"
      },
      "automation": {
        "type": "array",
        "items": {
          "ref": "#automation",
          "type": "ref"
        },
        "description": "Scheduled AudioParam envelopes. Web Audio has no envelope node, so these are their own structure."
      },
      "forkedFrom": {
        "ref": "#lineage",
        "type": "ref"
      },
      "midiInputs": {
        "type": "array",
        "items": {
          "ref": "#port",
          "type": "ref"
        },
        "description": "Zero or more note inputs. A note input carries note events — what is played, and when — from any note source: a sequencer's note output, or the player, which is the on-screen keys, the computer keyboard and every MIDI device at once. \"MIDI\" is the historical name; nothing arriving here need have come from MIDI."
      },
      "noteSource": {
        "type": "string",
        "maxLength": 64,
        "description": "What this module emits notes by, where it is not made of Web Audio nodes at all. A note source has no `nodes` and no `connections`: it produces note events, and the behaviour that produces them is named here rather than described, because there is no vocabulary of nodes for a thing that makes no sound. A reader that does not know the named behaviour cannot run the module, and says so rather than guessing.",
        "knownValues": [
          "keyboard",
          "sequencer"
        ]
      },
      "parameters": {
        "type": "array",
        "items": {
          "ref": "#parameter",
          "type": "ref"
        }
      },
      "versionKey": {
        "type": "string",
        "maxLength": 128,
        "description": "The record key this version is published under, repeated in the record so a reader holding only the record knows which version it is. A patch's `moduleRef.versionKey` is this value, and it is the record key a reader fetches: a record whose `versionKey` differs from its own key is pinned by the key and misdescribed by this field."
      },
      "audioInputs": {
        "type": "array",
        "items": {
          "ref": "#port",
          "type": "ref"
        },
        "description": "Zero or more individually identified audio inputs."
      },
      "connections": {
        "type": "array",
        "items": {
          "ref": "#connection",
          "type": "ref"
        }
      },
      "description": {
        "type": "string",
        "maxLength": 3000
      },
      "noteOutputs": {
        "type": "array",
        "items": {
          "ref": "#port",
          "type": "ref"
        },
        "description": "Zero or more note outputs. A note output carries note events — what is played, and when — rather than a signal, so it is wired to another instance's note input (`midiInputs`) rather than to an audio input. A module that declares one is a source of what is played; a module that declares none is what plays it."
      },
      "sampleSlots": {
        "type": "array",
        "items": {
          "ref": "#sampleSlot",
          "type": "ref"
        }
      },
      "audioOutputs": {
        "type": "array",
        "items": {
          "ref": "#port",
          "type": "ref"
        }
      },
      "descriptionVersion": {
        "type": "integer",
        "minimum": 1,
        "description": "Version of the module description this record follows. A reader accepts any version at or below its own."
      }
    }
  },
  "description": "A module, held in its author's own repository."
}
automation object

A breakpoint envelope scheduled onto an AudioParam. Breakpoints up to and including sustainAt are scheduled on note-on; those after it on note-off.

Properties

breakpoints array of ref#breakpoint Required

No description available.

minLength: 1 items
id string Required

No description available.

maxLength: 64 bytesminLength: 1 bytes
label string Optional

No description available.

maxLength: 200 bytes
sustainAt integer Optional

Index into breakpoints where the value holds while a note is held. Absent means a one-shot.

minimum: 0
target ref #paramTarget Required

No description available.

View raw schema
{
  "type": "object",
  "required": [
    "id",
    "target",
    "breakpoints"
  ],
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 64,
      "minLength": 1
    },
    "label": {
      "type": "string",
      "maxLength": 200
    },
    "target": {
      "ref": "#paramTarget",
      "type": "ref"
    },
    "sustainAt": {
      "type": "integer",
      "minimum": 0,
      "description": "Index into breakpoints where the value holds while a note is held. Absent means a one-shot."
    },
    "breakpoints": {
      "type": "array",
      "items": {
        "ref": "#breakpoint",
        "type": "ref"
      },
      "minLength": 1
    }
  },
  "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."
}
breakpoint object

No description available.

Properties

curve string Optional

How the value travels from the previous breakpoint.

Known values: step, linear, exponential
time integer Required

Milliseconds from the trigger.

minimum: 0
value string Required

The param's value at this instant, as its decimal form — "0.25", "1" — because the ATproto data model has no floating-point type and a PDS refuses one. An automation is numeric by definition, so a reader turns it back into a number without asking anything else.

maxLength: 200 bytes
View raw schema
{
  "type": "object",
  "required": [
    "time",
    "value"
  ],
  "properties": {
    "time": {
      "type": "integer",
      "minimum": 0,
      "description": "Milliseconds from the trigger."
    },
    "curve": {
      "type": "string",
      "description": "How the value travels from the previous breakpoint.",
      "knownValues": [
        "step",
        "linear",
        "exponential"
      ]
    },
    "value": {
      "type": "string",
      "maxLength": 200,
      "description": "The param's value at this instant, as its decimal form — \"0.25\", \"1\" — because the ATproto data model has no floating-point type and a PDS refuses one. An automation is numeric by definition, so a reader turns it back into a number without asking anything else."
    }
  }
}
connection object

An audio connection from a node output to either an audio input or a named AudioParam.

Properties

from ref #source Required

No description available.

to ref #target Required

No description available.

View raw schema
{
  "type": "object",
  "required": [
    "from",
    "to"
  ],
  "properties": {
    "to": {
      "ref": "#target",
      "type": "ref"
    },
    "from": {
      "ref": "#source",
      "type": "ref"
    }
  },
  "description": "An audio connection from a node output to either an audio input or a named AudioParam."
}
lineage object

The module this one was forked from, and its author.

Properties

authorDid string did Required

A decentralized identifier (DID).

moduleId string Optional

No description available.

maxLength: 128 bytes
uri string at-uri Required

An AT Protocol URI (e.g., at://did:plc:xyz/app.bsky.feed.post/abc).

View raw schema
{
  "type": "object",
  "required": [
    "uri",
    "authorDid"
  ],
  "properties": {
    "uri": {
      "type": "string",
      "format": "at-uri"
    },
    "moduleId": {
      "type": "string",
      "maxLength": 128
    },
    "authorDid": {
      "type": "string",
      "format": "did"
    }
  },
  "description": "The module this one was forked from, and its author."
}
node object

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.

Properties

id string Required

No description available.

maxLength: 64 bytesminLength: 1 bytes
kind string Required

No description available.

maxLength: 64 bytesminLength: 1 bytes
options unknown Optional

The node's settings, as its kind defines them. This is an object — which is the whole of what `unknown` means here — so the data model applies inside it: a whole number is an ordinary integer, and a number that is not a whole number is carried as its decimal string, "0.5" rather than 0.5, because the ATproto data model has no floating-point type and a PDS refuses one. That is the one difference from the fields this description types as strings, which have nowhere to put an integer.

View raw schema
{
  "type": "object",
  "required": [
    "id",
    "kind"
  ],
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 64,
      "minLength": 1
    },
    "kind": {
      "type": "string",
      "maxLength": 64,
      "minLength": 1
    },
    "options": {
      "type": "unknown",
      "description": "The node's settings, as its kind defines them. This is an object — which is the whole of what `unknown` means here — so the data model applies inside it: a whole number is an ordinary integer, and a number that is not a whole number is carried as its decimal string, \"0.5\" rather than 0.5, because the ATproto data model has no floating-point type and a PDS refuses one. That is the one difference from the fields this description types as strings, which have nowhere to put an integer."
    }
  },
  "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."
}
paramTarget object

No description available.

Properties

node string Required

No description available.

maxLength: 64 bytesminLength: 1 bytes
param string Required

No description available.

maxLength: 64 bytesminLength: 1 bytes
View raw schema
{
  "type": "object",
  "required": [
    "node",
    "param"
  ],
  "properties": {
    "node": {
      "type": "string",
      "maxLength": 64,
      "minLength": 1
    },
    "param": {
      "type": "string",
      "maxLength": 64,
      "minLength": 1
    }
  }
}
parameter object

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.

Properties

default string Optional

The value used where a patch sets none, always as text. A number is its decimal form — "0.5", and "2" for a whole one — because the ATproto data model has no floating-point type and a string is the only type that carries both a number and a word. Where this parameter declares a closed value set, it is one of those strings instead, and a label that looks like a number stays the label it is.

maxLength: 200 bytes
id string Required

No description available.

maxLength: 64 bytesminLength: 1 bytes
label string Required

No description available.

maxLength: 200 bytesminLength: 1 bytes
range ref #range Optional

No description available.

targets array of ref#parameterTarget Required

No description available.

minLength: 1 items
values array of string Optional

A closed value set, where the parameter is not numeric.

View raw schema
{
  "type": "object",
  "required": [
    "id",
    "label",
    "targets"
  ],
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 64,
      "minLength": 1
    },
    "label": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1
    },
    "range": {
      "ref": "#range",
      "type": "ref"
    },
    "values": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 200
      },
      "description": "A closed value set, where the parameter is not numeric."
    },
    "default": {
      "type": "string",
      "maxLength": 200,
      "description": "The value used where a patch sets none, always as text. A number is its decimal form — \"0.5\", and \"2\" for a whole one — because the ATproto data model has no floating-point type and a string is the only type that carries both a number and a word. Where this parameter declares a closed value set, it is one of those strings instead, and a label that looks like a number stays the label it is."
    },
    "targets": {
      "type": "array",
      "items": {
        "ref": "#parameterTarget",
        "type": "ref"
      },
      "minLength": 1
    }
  },
  "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."
}
parameterTarget object

One of: {node, param}, {node, option}, or {automation, breakpoint, field}.

Properties

automation string Optional

No description available.

maxLength: 64 bytes
breakpoint integer Optional

No description available.

minimum: 0
field string Optional

No description available.

Known values: time, value
node string Optional

No description available.

maxLength: 64 bytes
option string Optional

No description available.

maxLength: 64 bytes
param string Optional

No description available.

maxLength: 64 bytes
View raw schema
{
  "type": "object",
  "properties": {
    "node": {
      "type": "string",
      "maxLength": 64
    },
    "field": {
      "type": "string",
      "knownValues": [
        "time",
        "value"
      ]
    },
    "param": {
      "type": "string",
      "maxLength": 64
    },
    "option": {
      "type": "string",
      "maxLength": 64
    },
    "automation": {
      "type": "string",
      "maxLength": 64
    },
    "breakpoint": {
      "type": "integer",
      "minimum": 0
    }
  },
  "description": "One of: {node, param}, {node, option}, or {automation, breakpoint, field}."
}
port object

One individually identified audio or MIDI boundary of the module.

Properties

id string Required

No description available.

maxLength: 64 bytesminLength: 1 bytes
label string Optional

No description available.

maxLength: 200 bytes
View raw schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 64,
      "minLength": 1
    },
    "label": {
      "type": "string",
      "maxLength": 200
    }
  },
  "description": "One individually identified audio or MIDI boundary of the module."
}
range object

No description available.

Properties

max string Required

The high bound, as its decimal form — "20000", "0.5" — because the ATproto data model has no floating-point type and a PDS refuses one. A range is numeric by definition, so a reader turns it back into a number without asking anything else.

maxLength: 200 bytes
min string Required

The low bound, as its decimal form — "0.0001", "-1" — because the ATproto data model has no floating-point type and a PDS refuses one. A range is numeric by definition, so a reader turns it back into a number without asking anything else.

maxLength: 200 bytes
View raw schema
{
  "type": "object",
  "required": [
    "min",
    "max"
  ],
  "properties": {
    "max": {
      "type": "string",
      "maxLength": 200,
      "description": "The high bound, as its decimal form — \"20000\", \"0.5\" — because the ATproto data model has no floating-point type and a PDS refuses one. A range is numeric by definition, so a reader turns it back into a number without asking anything else."
    },
    "min": {
      "type": "string",
      "maxLength": 200,
      "description": "The low bound, as its decimal form — \"0.0001\", \"-1\" — because the ATproto data model has no floating-point type and a PDS refuses one. A range is numeric by definition, so a reader turns it back into a number without asking anything else."
    }
  }
}
sampleRef object

A sample blob and the account that holds it.

Properties

blob blob Required

No description available.

maxSize: 2.1 MB
ownerDid string did Required

A decentralized identifier (DID).

View raw schema
{
  "type": "object",
  "required": [
    "blob",
    "ownerDid"
  ],
  "properties": {
    "blob": {
      "type": "blob",
      "accept": [
        "audio/wav"
      ],
      "maxSize": 2097152
    },
    "ownerDid": {
      "type": "string",
      "format": "did"
    }
  },
  "description": "A sample blob and the account that holds it."
}
sampleSlot object

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.

Properties

default ref #sampleRef Optional

No description available.

id string Required

No description available.

maxLength: 64 bytesminLength: 1 bytes
label string Optional

No description available.

maxLength: 200 bytes
node string Required

No description available.

maxLength: 64 bytesminLength: 1 bytes
property string Required

No description available.

Known values: buffer
View raw schema
{
  "type": "object",
  "required": [
    "id",
    "node",
    "property"
  ],
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 64,
      "minLength": 1
    },
    "node": {
      "type": "string",
      "maxLength": 64,
      "minLength": 1
    },
    "label": {
      "type": "string",
      "maxLength": 200
    },
    "default": {
      "ref": "#sampleRef",
      "type": "ref"
    },
    "property": {
      "type": "string",
      "knownValues": [
        "buffer"
      ]
    }
  },
  "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."
}
source object

No description available.

Properties

node string Required

No description available.

maxLength: 64 bytesminLength: 1 bytes
output integer Optional

No description available.

minimum: 0
View raw schema
{
  "type": "object",
  "required": [
    "node"
  ],
  "properties": {
    "node": {
      "type": "string",
      "maxLength": 64,
      "minLength": 1
    },
    "output": {
      "type": "integer",
      "minimum": 0
    }
  }
}
target object

Exactly one of `input` or `param` is present. `param` is modulation: a node output reaching a named AudioParam.

Properties

input integer Optional

No description available.

minimum: 0
node string Required

No description available.

maxLength: 64 bytesminLength: 1 bytes
param string Optional

No description available.

maxLength: 64 bytes
View raw schema
{
  "type": "object",
  "required": [
    "node"
  ],
  "properties": {
    "node": {
      "type": "string",
      "maxLength": 64,
      "minLength": 1
    },
    "input": {
      "type": "integer",
      "minimum": 0
    },
    "param": {
      "type": "string",
      "maxLength": 64
    }
  },
  "description": "Exactly one of `input` or `param` is present. `param` is modulation: a node output reaching a named AudioParam."
}

Lexicon Garden

@