# at.atmosynth.defs

> Published by [atmosynth.at](https://lexicon.garden/identity/did:plc:fzjkahpwapmoqxybwdjb6ysf)

✓ This is the authoritative definition for this NSID.

## Description

What the arrangement, its tracks, its clips, its effect chains, its samples and the parts offered to it share: musical time, credit, reuse, and the objects an arrangement holds inline and every one of them also publishes as a record of its own. Time here is counted in ticks, 960 to the beat, a beat being a quarter note whatever the meter says. A patch's own loops keep the 96 to the beat the patch description counts in, so a loop copied into a clip is multiplied by ten and loses nothing.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:fzjkahpwapmoqxybwdjb6ysf/at.atmosynth.defs)
- [Documentation](https://lexicon.garden/lexicon/did:plc:fzjkahpwapmoqxybwdjb6ysf/at.atmosynth.defs/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:fzjkahpwapmoqxybwdjb6ysf/at.atmosynth.defs/examples)

## Definitions

### `at.atmosynth.defs#audio`

**Type**: `object`

A recording, by its blob and the account holding it. In a record this service publishes it is always that record's own account, since a PDS writes a record only if every blob it names is in that account; a reader still follows `ownerDid` wherever it points.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `blob` | `blob` | Yes |  |
| `ownerDid` | `string` (did) | Yes |  |

### `at.atmosynth.defs#audioClip`

**Type**: `object`

A recording over a length of time: what an audio track plays. The same object stands in a track, where it is placed at a tick, and in an at.atmosynth.audioClip record of its own, where it is not.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `at` | `integer` | No | The tick of the arrangement this clip starts at. Absent in a clip that is a record of its own. |
| `audio` | `ref` → `#audio` | Yes |  |
| `fadeIn` | `integer` | No | Ticks over which the clip rises from silence at its start. Optional: absent is none. |
| `fadeOut` | `integer` | No | Ticks over which the clip falls to silence at its end. Optional: absent is none. |
| `gain` | `string` | No | The clip's own gain, in decibels, from -96 to 24, as decimal text. Optional: absent is 0. |
| `length` | `integer` | Yes | How many ticks the clip lasts. The recording is cut off at its end. |
| `loopLength` | `integer` | No | Where the clip loops: what it plays from its start to this many ticks is played again and again until `length`, so a two-bar loop fills sixteen bars as one clip. Each pass starts where the clip does, at `offset` or where its warp markers place tick 0, and counts its ticks from there. The fades are the clip's, at its start and its end, and not each pass's. Optional: absent plays the recording once, over the whole length. |
| `name` | `string` | No |  |
| `offset` | `string` | No | Where in the recording the clip starts, in seconds from its beginning, as decimal text. Optional: absent is the beginning. Read only where the clip has no warp markers, which say it themselves. |
| `origin` | `ref` → `#origin` | No |  |
| `warp` | `array` | No | How the recording follows the arrangement's tempo: markers in order, each later than the one before in ticks and in seconds. Between two markers the recording is stretched so that the one moment meets the one tick and the next the next; before the first and after the last the nearest pair's stretch goes on. Two markers stretch a whole loop evenly, and more correct a recording that drifts. Optional: absent plays the recording at the speed it was recorded at, from `offset`, whatever the tempo. |

### `at.atmosynth.defs#automationLane`

**Type**: `object`

One target's automation across the whole arrangement.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `points` | `array` | Yes | In order of `at`, one to a tick. Before the first point the target is at the first point's value; after the last, at the last's. |
| `target` | `union` | Yes |  |

### `at.atmosynth.defs#automationPoint`

**Type**: `object`

The value a target takes at one tick.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `at` | `integer` | Yes | The tick of the arrangement, or of the track where the track is a record of its own. |
| `hold` | `boolean` | No | Whether the value is held until the next point, which is jumped to. Optional: absent is a straight line, and only `true` is written. |
| `value` | `string` | Yes | The value, in the units the target is written in: decibels and the pan's -1 to 1 for a strip, and for a parameter what its patch writes it as. Between points the value travels in a straight line along the target's own scale — a parameter's as its module declares it, decibels for a level — so a cutoff swept between two points sweeps as its knob would. |

### `at.atmosynth.defs#bendPoint`

**Type**: `object`

How far from its pitch a note is at one moment of it.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `at` | `integer` | Yes | The tick of the note this point is at, counted from the note's own start. |
| `value` | `string` | Yes | Semitones from the note's pitch, from -96 to 96, as decimal text. Upwards is positive. |

### `at.atmosynth.defs#insert`

**Type**: `object`

One effect in a chain: a patch that takes audio in through its input stage and passes it on through its output stage.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `enabled` | `boolean` | No | Whether the effect is heard. Optional: absent is on, and only `false` is written. A switched-off insert passes its input on unchanged. |
| `id` | `string` | Yes | This insert's name within its track, for automation to address. Unique in the track. |
| `origin` | `ref` → `#origin` | No |  |
| `patch` | `unknown` | Yes | An at.atmosynth.patch record, `$type` and all, held here whole. It holds an input stage, which is where the track's audio arrives and, on its second output, the key its `sidechain` names. |
| `sidechain` | `string` | No | The id of the track whose audio reaches this effect as a key: read there, never summed into what is heard. Optional: absent is no key. |

### `at.atmosynth.defs#key`

**Type**: `object`

A key: a tonic and a mode.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `mode` | `string` | Yes | The mode. `minor` is the natural minor. A reader meeting a mode it does not know still knows the tonic. |
| `tonic` | `integer` | Yes | The tonic as a pitch class, 0 being C and 11 B. How it is spelt, F♯ or G♭, is the reader's to decide. |

### `at.atmosynth.defs#keyPoint`

**Type**: `object`

The key from one tick on.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `at` | `integer` | Yes | The tick this key starts at. The first point is at 0, and each after it later than the one before. |
| `key` | `ref` → `#key` | Yes |  |

### `at.atmosynth.defs#license`

**Type**: `string`

What its creator lets others do with a record, as the SPDX identifier of a Creative Commons licence. A record that says nothing grants nothing, which is copyright's own default: anybody wanting to use it asks its creator first. A reader meeting an identifier it does not know reads it as granting nothing it can be sure of.

**Known Values**:
- `CC0-1.0`
- `CC-BY-4.0`
- `CC-BY-SA-4.0`
- `CC-BY-NC-4.0`
- `CC-BY-NC-SA-4.0`
- `CC-BY-ND-4.0`
- `CC-BY-NC-ND-4.0`

**Constraints**: maxLength: 64

### `at.atmosynth.defs#lineage`

**Type**: `object`

One record this one came from, how, and its creator. Written here and not there, so it survives that record being changed or deleted.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `cid` | `string` (cid) | No | The version of that record this came from. Optional: absent where it was not known. |
| `creatorDid` | `string` (did) | Yes |  |
| `relation` | `string` | Yes | `fork`: this began as a copy of that, and changed. `import`: that was taken into this as it was — a clip from a patch's loop, a track from somebody's arrangement. A reader meeting another value still has a parent, and should say only that this came from it. |
| `uri` | `string` (at-uri) | No | Where that record is. Absent where the record is somewhere a public record may not point, such as a band: the entry is then credit, the parent's creator and the relation and nothing more. |
| `within` | `string` | No | Which part of that record this came from, where it was a part: a track's `id` in an arrangement, or a sequencer's instance id and a loop as `<instanceId>/<loop>` in a patch. Optional: absent is the whole record. |

### `at.atmosynth.defs#marker`

**Type**: `object`

A named moment of an arrangement: Intro, Drop, the second verse.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `at` | `integer` | Yes |  |
| `name` | `string` | Yes |  |

### `at.atmosynth.defs#meterPoint`

**Type**: `object`

The meter from one bar line on. Every position in an arrangement is a tick rather than a bar, so a change of meter moves the bar lines and the grid and never a note.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `at` | `integer` | Yes | The tick this meter starts at: 0 for the first point, and for every later one a bar line of the meter before it. |
| `timeSignature` | `ref` → `at.atmosynth.patch#timeSignature` | Yes |  |

### `at.atmosynth.defs#note`

**Type**: `object`

One note of a clip: struck at a tick, held for so many, as hard and as often as it says.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `at` | `integer` | Yes | The tick of the clip this note is struck at, counted from the clip's start. |
| `bend` | `array` | No | How the note is bent while it is held: points in order of `at`, one to a tick, joined by straight lines, the first point's value before it and the last's after it. Optional: absent is not bent. |
| `hold` | `integer` | Yes | How many ticks it is held for. A note is cut off by the next note of its own pitch, since the same pitch overlapping itself is one voice rather than two. |
| `note` | `integer` | Yes | The MIDI note number. 60 is middle C. |
| `probability` | `integer` | No | How likely it is to be struck each time it comes round, in percent, asked afresh every time. Optional: absent is every time. |
| `velocity` | `integer` | No | How hard it is struck, on the MIDI scale. Optional: absent is 100. |

### `at.atmosynth.defs#noteClip`

**Type**: `object`

Notes over a length of time: what an instrument track plays. The same object stands in a track, where it is placed at a tick, and in an at.atmosynth.noteClip record of its own, where it is not.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `at` | `integer` | No | The tick of the arrangement this clip starts at. Absent in a clip that is a record of its own, which is placed nowhere until somebody places it. |
| `glide` | `ref` → `at.atmosynth.patch#glide` | No | How the clip's notes slide into one another, as a sequencer's do. Optional: absent is no slide. |
| `length` | `integer` | Yes | How many ticks the clip lasts. A note still held at its end is let go there. |
| `loopLength` | `integer` | No | Where the clip loops: the notes from its start to this many ticks are played again and again until `length`, so one bar of a groove fills eight bars as one bar of notes. A note held past the loop's end is let go there. Optional: absent plays the notes once, over the whole length. |
| `name` | `string` | No |  |
| `notes` | `array` | Yes | The notes, each before the loop's end, or the clip's where it does not loop. |
| `origin` | `ref` → `#origin` | No |  |
| `resolution` | `ref` → `at.atmosynth.patch#resolution` | No | The grid the clip is drawn and snapped to. A guide, not part of what is played. Optional: absent is sixteenths. |
| `swing` | `ref` → `at.atmosynth.patch#swing` | No | How the clip swings, counted in pairs from its own start. The notes stay at the ticks they are written at; the swing is applied as they are played. Optional: absent is straight. |

### `at.atmosynth.defs#origin`

**Type**: `object`

Where an inline copy was imported from, and whether it still is that record. An import is a snapshot and a link: the arrangement holds the copy, so it plays whatever becomes of the original, and the link says which version was copied, so a reader can tell when the original has since changed and offer it.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `cid` | `string` (cid) | Yes | The version that was copied. |
| `linked` | `boolean` | No | Whether this copy is still that version, unchanged. The first edit to the copy removes it, and the copy is the arrangement's own from then on, still credited to where it came from. Only `true` is written. |
| `uri` | `string` (at-uri) | Yes |  |

### `at.atmosynth.defs#parameterTarget`

**Type**: `object`

Automation of one parameter of one instance in the track's instrument or in one of its inserts.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `insert` | `string` | No | The id of the insert whose patch holds the instance. Optional: absent is the track's instrument. |
| `instanceId` | `string` | Yes |  |
| `parameterId` | `string` | Yes |  |

### `at.atmosynth.defs#send`

**Type**: `object`

Some of a track's audio sent to a bus as well as to where the track goes.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `level` | `string` | Yes | How much, in decibels, from -96 to 6, as decimal text. |
| `tap` | `string` | No | Whether it leaves the track before its level and pan are applied or after. Optional: absent is `postFader`. |
| `to` | `string` | Yes | The id of the bus track it is sent to. |

### `at.atmosynth.defs#strip`

**Type**: `object`

Where a track ends: its level, its pan, whether it is heard, and what it sends. A track is heard when it is not muted and, where any track of the arrangement is soloed, it is one of them.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `level` | `string` | No | In decibels, from -96 to 6, as decimal text; -96 is silence. Optional: absent is 0. |
| `mute` | `boolean` | No | Only `true` is written. |
| `pan` | `string` | No | From -1, all left, to 1, all right, as decimal text. Optional: absent is the middle. |
| `sends` | `array` | No |  |
| `solo` | `boolean` | No | Only `true` is written. |

### `at.atmosynth.defs#stripTarget`

**Type**: `object`

Automation of a track's own strip.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `control` | `string` | Yes |  |
| `to` | `string` | No | Which send, by the bus it goes to, where `control` is `send`. |

### `at.atmosynth.defs#tempoPoint`

**Type**: `object`

The tempo from one tick on.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `at` | `integer` | Yes | The tick this tempo starts at. The first point of a tempo map is at 0, and each after it later than the one before. |
| `bpm` | `string` | Yes | Beats per minute, a beat being a quarter note, from 20 to 999, written as its decimal text, as every number in these descriptions that need not be whole is. |
| `ramp` | `boolean` | No | Whether the tempo travels from this point to the next in a straight line, in beats per minute over ticks, rather than holding until the next point. Optional: absent is held, and only `true` is written. A ramp on the last point means nothing. |

### `at.atmosynth.defs#track`

**Type**: `object`

One row of an arrangement: an instrument playing note clips, an audio track playing audio clips, or a bus taking other tracks' audio. Each runs through its inserts in order into its strip, and on to the one place it goes. The same object stands in an arrangement, a part, and an at.atmosynth.track record of its own.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `audioClips` | `array` | No | An audio track's clips. Two clips of one track do not overlap. |
| `automation` | `array` | No | One lane to a target. |
| `colour` | `string` | No | The colour it is drawn in, as `#rrggbb`. Decoration only: nothing is said by it alone. |
| `id` | `string` | Yes | This track's name within its arrangement, for routing and automation to address. Unique in the arrangement, the tracks of every part it includes among them. `master` is the arrangement's master bus. |
| `inserts` | `array` | No | The effects the track's audio runs through, in order, before its strip. |
| `instrument` | `unknown` | No | An instrument track's instrument: an at.atmosynth.patch record, `$type` and all, held here whole. Its note clips are played to every Keyboard block in it as the player's keys would be, and what its output stage would send to the speakers goes on into the track's inserts. Its own tempo is not heard: the arrangement's is. |
| `kind` | `string` | Yes | `instrument` plays its note clips through its instrument; `audio` plays its audio clips; `bus` plays no clips and hears whatever names it as its `to`, a send, or both. A reader meeting a kind it does not know plays the track as silence and says so. |
| `name` | `string` | No |  |
| `noteClips` | `array` | No | An instrument track's clips. Two clips of one track do not overlap. |
| `origin` | `ref` → `#origin` | No |  |
| `strip` | `ref` → `#strip` | No |  |
| `to` | `string` | No | The id of the bus this track's audio goes to. Optional: absent is `master`, and the master itself goes to the speakers and names nothing. Every track goes to one place, and nothing returns to where it came from by any `to`, send or sidechain. |

### `at.atmosynth.defs#warpMarker`

**Type**: `object`

One moment of a recording pinned to one tick of its clip.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `at` | `integer` | Yes | The tick of the clip, counted from its start. |
| `seconds` | `string` | Yes | The moment of the recording, in seconds from its beginning, as decimal text. |

## Raw Schema

```json
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "audio": {
      "description": "A recording, by its blob and the account holding it. In a record this service publishes it is always that record's own account, since a PDS writes a record only if every blob it names is in that account; a reader still follows `ownerDid` wherever it points.",
      "properties": {
        "blob": {
          "accept": [
            "audio/wav",
            "audio/flac"
          ],
          "maxSize": 52428800,
          "type": "blob"
        },
        "ownerDid": {
          "format": "did",
          "type": "string"
        }
      },
      "required": [
        "blob",
        "ownerDid"
      ],
      "type": "object"
    },
    "audioClip": {
      "description": "A recording over a length of time: what an audio track plays. The same object stands in a track, where it is placed at a tick, and in an at.atmosynth.audioClip record of its own, where it is not.",
      "properties": {
        "at": {
          "description": "The tick of the arrangement this clip starts at. Absent in a clip that is a record of its own.",
          "minimum": 0,
          "type": "integer"
        },
        "audio": {
          "ref": "#audio",
          "type": "ref"
        },
        "fadeIn": {
          "description": "Ticks over which the clip rises from silence at its start. Optional: absent is none.",
          "minimum": 0,
          "type": "integer"
        },
        "fadeOut": {
          "description": "Ticks over which the clip falls to silence at its end. Optional: absent is none.",
          "minimum": 0,
          "type": "integer"
        },
        "gain": {
          "description": "The clip's own gain, in decibels, from -96 to 24, as decimal text. Optional: absent is 0.",
          "maxLength": 32,
          "type": "string"
        },
        "length": {
          "description": "How many ticks the clip lasts. The recording is cut off at its end.",
          "minimum": 1,
          "type": "integer"
        },
        "loopLength": {
          "description": "Where the clip loops: what it plays from its start to this many ticks is played again and again until `length`, so a two-bar loop fills sixteen bars as one clip. Each pass starts where the clip does, at `offset` or where its warp markers place tick 0, and counts its ticks from there. The fades are the clip's, at its start and its end, and not each pass's. Optional: absent plays the recording once, over the whole length.",
          "minimum": 1,
          "type": "integer"
        },
        "name": {
          "maxGraphemes": 64,
          "maxLength": 320,
          "minLength": 1,
          "type": "string"
        },
        "offset": {
          "description": "Where in the recording the clip starts, in seconds from its beginning, as decimal text. Optional: absent is the beginning. Read only where the clip has no warp markers, which say it themselves.",
          "maxLength": 32,
          "type": "string"
        },
        "origin": {
          "ref": "#origin",
          "type": "ref"
        },
        "warp": {
          "description": "How the recording follows the arrangement's tempo: markers in order, each later than the one before in ticks and in seconds. Between two markers the recording is stretched so that the one moment meets the one tick and the next the next; before the first and after the last the nearest pair's stretch goes on. Two markers stretch a whole loop evenly, and more correct a recording that drifts. Optional: absent plays the recording at the speed it was recorded at, from `offset`, whatever the tempo.",
          "items": {
            "ref": "#warpMarker",
            "type": "ref"
          },
          "maxLength": 1024,
          "type": "array"
        }
      },
      "required": [
        "length",
        "audio"
      ],
      "type": "object"
    },
    "automationLane": {
      "description": "One target's automation across the whole arrangement.",
      "properties": {
        "points": {
          "description": "In order of `at`, one to a tick. Before the first point the target is at the first point's value; after the last, at the last's.",
          "items": {
            "ref": "#automationPoint",
            "type": "ref"
          },
          "maxLength": 8192,
          "type": "array"
        },
        "target": {
          "refs": [
            "#stripTarget",
            "#parameterTarget"
          ],
          "type": "union"
        }
      },
      "required": [
        "target",
        "points"
      ],
      "type": "object"
    },
    "automationPoint": {
      "description": "The value a target takes at one tick.",
      "properties": {
        "at": {
          "description": "The tick of the arrangement, or of the track where the track is a record of its own.",
          "minimum": 0,
          "type": "integer"
        },
        "hold": {
          "description": "Whether the value is held until the next point, which is jumped to. Optional: absent is a straight line, and only `true` is written.",
          "type": "boolean"
        },
        "value": {
          "description": "The value, in the units the target is written in: decibels and the pan's -1 to 1 for a strip, and for a parameter what its patch writes it as. Between points the value travels in a straight line along the target's own scale — a parameter's as its module declares it, decibels for a level — so a cutoff swept between two points sweeps as its knob would.",
          "maxLength": 64,
          "type": "string"
        }
      },
      "required": [
        "at",
        "value"
      ],
      "type": "object"
    },
    "bendPoint": {
      "description": "How far from its pitch a note is at one moment of it.",
      "properties": {
        "at": {
          "description": "The tick of the note this point is at, counted from the note's own start.",
          "minimum": 0,
          "type": "integer"
        },
        "value": {
          "description": "Semitones from the note's pitch, from -96 to 96, as decimal text. Upwards is positive.",
          "maxLength": 32,
          "type": "string"
        }
      },
      "required": [
        "at",
        "value"
      ],
      "type": "object"
    },
    "insert": {
      "description": "One effect in a chain: a patch that takes audio in through its input stage and passes it on through its output stage.",
      "properties": {
        "enabled": {
          "description": "Whether the effect is heard. Optional: absent is on, and only `false` is written. A switched-off insert passes its input on unchanged.",
          "type": "boolean"
        },
        "id": {
          "description": "This insert's name within its track, for automation to address. Unique in the track.",
          "maxLength": 64,
          "minLength": 1,
          "type": "string"
        },
        "origin": {
          "ref": "#origin",
          "type": "ref"
        },
        "patch": {
          "description": "An at.atmosynth.patch record, `$type` and all, held here whole. It holds an input stage, which is where the track's audio arrives and, on its second output, the key its `sidechain` names.",
          "type": "unknown"
        },
        "sidechain": {
          "description": "The id of the track whose audio reaches this effect as a key: read there, never summed into what is heard. Optional: absent is no key.",
          "maxLength": 64,
          "type": "string"
        }
      },
      "required": [
        "id",
        "patch"
      ],
      "type": "object"
    },
    "key": {
      "description": "A key: a tonic and a mode.",
      "properties": {
        "mode": {
          "description": "The mode. `minor` is the natural minor. A reader meeting a mode it does not know still knows the tonic.",
          "knownValues": [
            "major",
            "minor",
            "dorian",
            "phrygian",
            "lydian",
            "mixolydian",
            "locrian"
          ],
          "maxLength": 32,
          "type": "string"
        },
        "tonic": {
          "description": "The tonic as a pitch class, 0 being C and 11 B. How it is spelt, F♯ or G♭, is the reader's to decide.",
          "maximum": 11,
          "minimum": 0,
          "type": "integer"
        }
      },
      "required": [
        "tonic",
        "mode"
      ],
      "type": "object"
    },
    "keyPoint": {
      "description": "The key from one tick on.",
      "properties": {
        "at": {
          "description": "The tick this key starts at. The first point is at 0, and each after it later than the one before.",
          "minimum": 0,
          "type": "integer"
        },
        "key": {
          "ref": "#key",
          "type": "ref"
        }
      },
      "required": [
        "at",
        "key"
      ],
      "type": "object"
    },
    "license": {
      "description": "What its creator lets others do with a record, as the SPDX identifier of a Creative Commons licence. A record that says nothing grants nothing, which is copyright's own default: anybody wanting to use it asks its creator first. A reader meeting an identifier it does not know reads it as granting nothing it can be sure of.",
      "knownValues": [
        "CC0-1.0",
        "CC-BY-4.0",
        "CC-BY-SA-4.0",
        "CC-BY-NC-4.0",
        "CC-BY-NC-SA-4.0",
        "CC-BY-ND-4.0",
        "CC-BY-NC-ND-4.0"
      ],
      "maxLength": 64,
      "type": "string"
    },
    "lineage": {
      "description": "One record this one came from, how, and its creator. Written here and not there, so it survives that record being changed or deleted.",
      "properties": {
        "cid": {
          "description": "The version of that record this came from. Optional: absent where it was not known.",
          "format": "cid",
          "type": "string"
        },
        "creatorDid": {
          "format": "did",
          "type": "string"
        },
        "relation": {
          "description": "`fork`: this began as a copy of that, and changed. `import`: that was taken into this as it was — a clip from a patch's loop, a track from somebody's arrangement. A reader meeting another value still has a parent, and should say only that this came from it.",
          "knownValues": [
            "fork",
            "import"
          ],
          "maxLength": 32,
          "type": "string"
        },
        "uri": {
          "description": "Where that record is. Absent where the record is somewhere a public record may not point, such as a band: the entry is then credit, the parent's creator and the relation and nothing more.",
          "format": "at-uri",
          "type": "string"
        },
        "within": {
          "description": "Which part of that record this came from, where it was a part: a track's `id` in an arrangement, or a sequencer's instance id and a loop as `<instanceId>/<loop>` in a patch. Optional: absent is the whole record.",
          "maxLength": 256,
          "type": "string"
        }
      },
      "required": [
        "relation",
        "creatorDid"
      ],
      "type": "object"
    },
    "marker": {
      "description": "A named moment of an arrangement: Intro, Drop, the second verse.",
      "properties": {
        "at": {
          "minimum": 0,
          "type": "integer"
        },
        "name": {
          "maxGraphemes": 32,
          "maxLength": 320,
          "minLength": 1,
          "type": "string"
        }
      },
      "required": [
        "at",
        "name"
      ],
      "type": "object"
    },
    "meterPoint": {
      "description": "The meter from one bar line on. Every position in an arrangement is a tick rather than a bar, so a change of meter moves the bar lines and the grid and never a note.",
      "properties": {
        "at": {
          "description": "The tick this meter starts at: 0 for the first point, and for every later one a bar line of the meter before it.",
          "minimum": 0,
          "type": "integer"
        },
        "timeSignature": {
          "ref": "at.atmosynth.patch#timeSignature",
          "type": "ref"
        }
      },
      "required": [
        "at",
        "timeSignature"
      ],
      "type": "object"
    },
    "note": {
      "description": "One note of a clip: struck at a tick, held for so many, as hard and as often as it says.",
      "properties": {
        "at": {
          "description": "The tick of the clip this note is struck at, counted from the clip's start.",
          "minimum": 0,
          "type": "integer"
        },
        "bend": {
          "description": "How the note is bent while it is held: points in order of `at`, one to a tick, joined by straight lines, the first point's value before it and the last's after it. Optional: absent is not bent.",
          "items": {
            "ref": "#bendPoint",
            "type": "ref"
          },
          "maxLength": 256,
          "type": "array"
        },
        "hold": {
          "description": "How many ticks it is held for. A note is cut off by the next note of its own pitch, since the same pitch overlapping itself is one voice rather than two.",
          "minimum": 1,
          "type": "integer"
        },
        "note": {
          "description": "The MIDI note number. 60 is middle C.",
          "maximum": 127,
          "minimum": 0,
          "type": "integer"
        },
        "probability": {
          "description": "How likely it is to be struck each time it comes round, in percent, asked afresh every time. Optional: absent is every time.",
          "maximum": 100,
          "minimum": 1,
          "type": "integer"
        },
        "velocity": {
          "description": "How hard it is struck, on the MIDI scale. Optional: absent is 100.",
          "maximum": 127,
          "minimum": 1,
          "type": "integer"
        }
      },
      "required": [
        "at",
        "hold",
        "note"
      ],
      "type": "object"
    },
    "noteClip": {
      "description": "Notes over a length of time: what an instrument track plays. The same object stands in a track, where it is placed at a tick, and in an at.atmosynth.noteClip record of its own, where it is not.",
      "properties": {
        "at": {
          "description": "The tick of the arrangement this clip starts at. Absent in a clip that is a record of its own, which is placed nowhere until somebody places it.",
          "minimum": 0,
          "type": "integer"
        },
        "glide": {
          "description": "How the clip's notes slide into one another, as a sequencer's do. Optional: absent is no slide.",
          "ref": "at.atmosynth.patch#glide",
          "type": "ref"
        },
        "length": {
          "description": "How many ticks the clip lasts. A note still held at its end is let go there.",
          "minimum": 1,
          "type": "integer"
        },
        "loopLength": {
          "description": "Where the clip loops: the notes from its start to this many ticks are played again and again until `length`, so one bar of a groove fills eight bars as one bar of notes. A note held past the loop's end is let go there. Optional: absent plays the notes once, over the whole length.",
          "minimum": 1,
          "type": "integer"
        },
        "name": {
          "maxGraphemes": 64,
          "maxLength": 320,
          "minLength": 1,
          "type": "string"
        },
        "notes": {
          "description": "The notes, each before the loop's end, or the clip's where it does not loop.",
          "items": {
            "ref": "#note",
            "type": "ref"
          },
          "maxLength": 8192,
          "type": "array"
        },
        "origin": {
          "ref": "#origin",
          "type": "ref"
        },
        "resolution": {
          "description": "The grid the clip is drawn and snapped to. A guide, not part of what is played. Optional: absent is sixteenths.",
          "ref": "at.atmosynth.patch#resolution",
          "type": "ref"
        },
        "swing": {
          "description": "How the clip swings, counted in pairs from its own start. The notes stay at the ticks they are written at; the swing is applied as they are played. Optional: absent is straight.",
          "ref": "at.atmosynth.patch#swing",
          "type": "ref"
        }
      },
      "required": [
        "length",
        "notes"
      ],
      "type": "object"
    },
    "origin": {
      "description": "Where an inline copy was imported from, and whether it still is that record. An import is a snapshot and a link: the arrangement holds the copy, so it plays whatever becomes of the original, and the link says which version was copied, so a reader can tell when the original has since changed and offer it.",
      "properties": {
        "cid": {
          "description": "The version that was copied.",
          "format": "cid",
          "type": "string"
        },
        "linked": {
          "description": "Whether this copy is still that version, unchanged. The first edit to the copy removes it, and the copy is the arrangement's own from then on, still credited to where it came from. Only `true` is written.",
          "type": "boolean"
        },
        "uri": {
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "cid"
      ],
      "type": "object"
    },
    "parameterTarget": {
      "description": "Automation of one parameter of one instance in the track's instrument or in one of its inserts.",
      "properties": {
        "insert": {
          "description": "The id of the insert whose patch holds the instance. Optional: absent is the track's instrument.",
          "maxLength": 64,
          "type": "string"
        },
        "instanceId": {
          "maxLength": 64,
          "minLength": 1,
          "type": "string"
        },
        "parameterId": {
          "maxLength": 64,
          "minLength": 1,
          "type": "string"
        }
      },
      "required": [
        "instanceId",
        "parameterId"
      ],
      "type": "object"
    },
    "send": {
      "description": "Some of a track's audio sent to a bus as well as to where the track goes.",
      "properties": {
        "level": {
          "description": "How much, in decibels, from -96 to 6, as decimal text.",
          "maxLength": 32,
          "type": "string"
        },
        "tap": {
          "description": "Whether it leaves the track before its level and pan are applied or after. Optional: absent is `postFader`.",
          "knownValues": [
            "preFader",
            "postFader"
          ],
          "maxLength": 32,
          "type": "string"
        },
        "to": {
          "description": "The id of the bus track it is sent to.",
          "maxLength": 64,
          "minLength": 1,
          "type": "string"
        }
      },
      "required": [
        "to",
        "level"
      ],
      "type": "object"
    },
    "strip": {
      "description": "Where a track ends: its level, its pan, whether it is heard, and what it sends. A track is heard when it is not muted and, where any track of the arrangement is soloed, it is one of them.",
      "properties": {
        "level": {
          "description": "In decibels, from -96 to 6, as decimal text; -96 is silence. Optional: absent is 0.",
          "maxLength": 32,
          "type": "string"
        },
        "mute": {
          "description": "Only `true` is written.",
          "type": "boolean"
        },
        "pan": {
          "description": "From -1, all left, to 1, all right, as decimal text. Optional: absent is the middle.",
          "maxLength": 32,
          "type": "string"
        },
        "sends": {
          "items": {
            "ref": "#send",
            "type": "ref"
          },
          "maxLength": 64,
          "type": "array"
        },
        "solo": {
          "description": "Only `true` is written.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "stripTarget": {
      "description": "Automation of a track's own strip.",
      "properties": {
        "control": {
          "knownValues": [
            "level",
            "pan",
            "send"
          ],
          "maxLength": 32,
          "type": "string"
        },
        "to": {
          "description": "Which send, by the bus it goes to, where `control` is `send`.",
          "maxLength": 64,
          "type": "string"
        }
      },
      "required": [
        "control"
      ],
      "type": "object"
    },
    "tempoPoint": {
      "description": "The tempo from one tick on.",
      "properties": {
        "at": {
          "description": "The tick this tempo starts at. The first point of a tempo map is at 0, and each after it later than the one before.",
          "minimum": 0,
          "type": "integer"
        },
        "bpm": {
          "description": "Beats per minute, a beat being a quarter note, from 20 to 999, written as its decimal text, as every number in these descriptions that need not be whole is.",
          "maxLength": 32,
          "type": "string"
        },
        "ramp": {
          "description": "Whether the tempo travels from this point to the next in a straight line, in beats per minute over ticks, rather than holding until the next point. Optional: absent is held, and only `true` is written. A ramp on the last point means nothing.",
          "type": "boolean"
        }
      },
      "required": [
        "at",
        "bpm"
      ],
      "type": "object"
    },
    "track": {
      "description": "One row of an arrangement: an instrument playing note clips, an audio track playing audio clips, or a bus taking other tracks' audio. Each runs through its inserts in order into its strip, and on to the one place it goes. The same object stands in an arrangement, a part, and an at.atmosynth.track record of its own.",
      "properties": {
        "audioClips": {
          "description": "An audio track's clips. Two clips of one track do not overlap.",
          "items": {
            "ref": "#audioClip",
            "type": "ref"
          },
          "maxLength": 1024,
          "type": "array"
        },
        "automation": {
          "description": "One lane to a target.",
          "items": {
            "ref": "#automationLane",
            "type": "ref"
          },
          "maxLength": 256,
          "type": "array"
        },
        "colour": {
          "description": "The colour it is drawn in, as `#rrggbb`. Decoration only: nothing is said by it alone.",
          "maxLength": 7,
          "type": "string"
        },
        "id": {
          "description": "This track's name within its arrangement, for routing and automation to address. Unique in the arrangement, the tracks of every part it includes among them. `master` is the arrangement's master bus.",
          "maxLength": 64,
          "minLength": 1,
          "type": "string"
        },
        "inserts": {
          "description": "The effects the track's audio runs through, in order, before its strip.",
          "items": {
            "ref": "#insert",
            "type": "ref"
          },
          "maxLength": 32,
          "type": "array"
        },
        "instrument": {
          "description": "An instrument track's instrument: an at.atmosynth.patch record, `$type` and all, held here whole. Its note clips are played to every Keyboard block in it as the player's keys would be, and what its output stage would send to the speakers goes on into the track's inserts. Its own tempo is not heard: the arrangement's is.",
          "type": "unknown"
        },
        "kind": {
          "description": "`instrument` plays its note clips through its instrument; `audio` plays its audio clips; `bus` plays no clips and hears whatever names it as its `to`, a send, or both. A reader meeting a kind it does not know plays the track as silence and says so.",
          "knownValues": [
            "instrument",
            "audio",
            "bus"
          ],
          "maxLength": 32,
          "type": "string"
        },
        "name": {
          "maxGraphemes": 64,
          "maxLength": 320,
          "minLength": 1,
          "type": "string"
        },
        "noteClips": {
          "description": "An instrument track's clips. Two clips of one track do not overlap.",
          "items": {
            "ref": "#noteClip",
            "type": "ref"
          },
          "maxLength": 1024,
          "type": "array"
        },
        "origin": {
          "ref": "#origin",
          "type": "ref"
        },
        "strip": {
          "ref": "#strip",
          "type": "ref"
        },
        "to": {
          "description": "The id of the bus this track's audio goes to. Optional: absent is `master`, and the master itself goes to the speakers and names nothing. Every track goes to one place, and nothing returns to where it came from by any `to`, send or sidechain.",
          "maxLength": 64,
          "type": "string"
        }
      },
      "required": [
        "id",
        "kind"
      ],
      "type": "object"
    },
    "warpMarker": {
      "description": "One moment of a recording pinned to one tick of its clip.",
      "properties": {
        "at": {
          "description": "The tick of the clip, counted from its start.",
          "minimum": 0,
          "type": "integer"
        },
        "seconds": {
          "description": "The moment of the recording, in seconds from its beginning, as decimal text.",
          "maxLength": 32,
          "type": "string"
        }
      },
      "required": [
        "at",
        "seconds"
      ],
      "type": "object"
    }
  },
  "description": "What the arrangement, its tracks, its clips, its effect chains, its samples and the parts offered to it share: musical time, credit, reuse, and the objects an arrangement holds inline and every one of them also publishes as a record of its own. Time here is counted in ticks, 960 to the beat, a beat being a quarter note whatever the meter says. A patch's own loops keep the 96 to the beat the patch description counts in, so a loop copied into a clip is multiplied by ten and loses nothing.",
  "id": "at.atmosynth.defs",
  "lexicon": 1
}
```
