Skip to content

Interchange capability matrix

What each interchange format can carry, per concept. The tables below are generated from the same JSON the C++ capability tables are generated from, so a row here is the behavior, not a description of it.

The world is closed. A concept a format does not list is refused on import and reported as a loss on export -- support is something a format declares, never something it gets by default.

A row changes away from none only through a decision made on the document model's own merits. Turning rows green to widen a format's reach is not a reason to add a model feature.

Concepts

Concept Observable in a document Meaning
unknown format-only A construct the reader could not classify. No format lists it, so it always refuses.
track.flat yes A track holding clips directly, with no children.
track.group format-only A track that contains other tracks (folder/group/nested scope).
track.video format-only A track whose content is picture rather than audio or notes.
clip.musical yes A clip anchored to musical time (canonical ticks).
clip.absolute yes A clip anchored to absolute time (samples at a rational rate).
clip.note yes Clip content that is a set of note events.
clip.media yes Clip content that references a media asset.
clip.gain yes Per-clip gain applied to the clip's content.
clip.fades yes Per-clip fade in and fade out durations.
clip.crossfade format-only An overlap between two adjacent clips authored as one transition item.
clip.warp format-only A time-warp map deforming clip content against timeline time.
clip.launch yes Non-arrangement clip playback (scenes, launcher grids).
gap.explicit format-only A gap between clips authored as a first-class item rather than absence.
tempo.single yes One tempo governing the whole document.
tempo.map yes Tempo changing over the document at more than one point.
meter.single yes One time signature governing the whole document.
meter.map yes Time signature changing over the document at more than one point.
marker yes A named point or range on the timeline.
timecode.origin yes The wall-clock timecode the document's zero position represents.
media.provenance format-only Where a media asset came from: source timecode, reel or tape name, original locator.
mixer.track-gain yes Static per-track gain.
mixer.track-pan yes Static per-track pan position.
mixer.sends format-only Track routing to busses and auxiliary sends.
automation.device-param yes An automation lane targeting a device parameter.
automation.track-gain yes An automation lane targeting a track's gain.
automation.track-pan yes An automation lane targeting a track's pan.
device.placement yes A device occupying a slot in a track's chain, by identity.
device.payload yes A device's type and saved parameter state.
effect.timewarp format-only An effect that remaps time rather than processing content.
take.lane yes An alternate recording lane holding takes alongside the arrangement.
take.comp yes A composite assembled by selecting segments across takes.
track.freeze yes A sealed offline render standing in for a track's live output.
asset.sealed-hash yes Media identity derived from a content hash of the actual bytes.
asset.embedded-media yes Media bytes carried inside the document package.
asset.referenced-media yes Media referenced by locator, stored outside the document.
sequence.multiple yes More than one sequence in the document.
sequence.nested yes A clip whose content is another sequence.
content.registered yes Typed extension clip content serialized through the schema registry.
content.opaque yes Uninterpreted clip content carried in a validated envelope.
edit-rate.non-audio format-only Positions at a rate that does not convert exactly to the document's rate.
context.chord-scale yes A sequence-owned lane of chord and scale statements that other items read while compiling.
context.groove yes A sequence-owned groove: a swing setting and a repeating table of per-step timing and accent that other items read while compiling.
clip.note-modifier yes Per-note playback modifiers: probability, pass condition, and ratchet.
clip.empty yes A positioned clip with no note, media, registered, opaque, or nested-sequence content.
tempo.ramp yes A continuous tempo curve between two tempo-map points.
clip.note-velocity-quantized yes A note velocity that cannot be encoded as a sounding nonzero 7-bit Standard MIDI Note On without changing value.
tempo.value-quantized yes A tempo value that cannot round-trip exactly through an integer-microseconds-per-quarter representation.
clip.media-window yes A media clip that plays a source subrange rather than the referenced asset's complete frame range.
clip.fade-shape yes A fade whose gain curve is not the linear ramp, so a format carrying only fade durations changes what the transition sounds like.
clip.midi-expression-lane yes A continuous controller stream authored alongside a clip's notes -- control change, pitch bend, channel or poly pressure, program change, or a registered or assignable parameter -- carrying its own points independently of any note.
sequence.section-role yes A region that names the structural part it spans, beyond its free-text name.
context.chord-bass yes A chord statement naming the pitch class in the bass, rather than sounding root position.
context.chord-extension yes A chord statement carrying added scale degrees beyond its quality.
context.chord-voicing yes A chord statement carrying a hint for how a generator should spread its tones.
tuning.project yes A document-wide statement of the tuning every instrument plays in.
tuning.instrument yes One instrument overriding the document-wide tuning with its own.
modulation.modulator yes A track-owned generator of modulation signal, by identity and declared kind.
modulation.macro yes A track-owned named performer control that drives parameters through modulation routes.
modulation.route-device-param yes A modulation route contributing a depth-scaled offset to a device parameter, on top of whatever base value is in force.
modulation.route-track-mixer yes A modulation route contributing a depth-scaled offset to a track's own gain or pan.

DAWproject

Format id dawproject. Writer registered: yes.

Import

Concept Level Detail
unknown none not declared
track.flat full
track.group none nested group tracks
track.video none not declared
clip.musical full
clip.absolute none seconds-timed lanes, clips, and notes
clip.note full
clip.media full
clip.gain none per-clip gain
clip.fades none per-clip fades
clip.crossfade none not declared
clip.warp none warped clip content
clip.launch none scenes and clip-launcher content
gap.explicit none not declared
tempo.single full
tempo.map none tempo changing after bar 1
meter.single full
meter.map none time signature changing after bar 1
marker none arrangement markers
timecode.origin none not declared
media.provenance none not declared
mixer.track-gain none channel volume
mixer.track-pan none channel pan
mixer.sends none not declared
automation.device-param none automation lanes
automation.track-gain none volume automation lanes
automation.track-pan none pan automation lanes
device.placement none device chains
device.payload none plugin state
effect.timewarp none not declared
take.lane none not declared
take.comp none not declared
track.freeze none not declared
asset.sealed-hash full
asset.embedded-media none not declared
asset.referenced-media full package-relative locator retained verbatim; identity sealed to the resolved bytes
sequence.multiple none not declared
sequence.nested none not declared
content.registered none not declared
content.opaque none not declared
edit-rate.non-audio none not declared
context.chord-scale none chord and scale context lanes
context.groove none groove templates and swing
clip.note-modifier none per-note probability, conditions, and ratchets
clip.empty full
tempo.ramp none not declared
clip.note-velocity-quantized none not declared
tempo.value-quantized none not declared
clip.media-window none not declared
clip.fade-shape none not declared
clip.midi-expression-lane none per-clip controller and expression streams
sequence.section-role none not declared
context.chord-bass none not declared
context.chord-extension none not declared
context.chord-voicing none not declared
tuning.project none not declared
tuning.instrument none not declared
modulation.modulator none not declared
modulation.macro none not declared
modulation.route-device-param none not declared
modulation.route-track-mixer none not declared

Export

Concept Level Becomes Loss class Detail
unknown drop dropped not declared
track.flat full
track.group drop dropped not declared
track.video drop dropped not declared
clip.musical full
clip.absolute drop dropped the writer cannot place sample-anchored clips on its beats-only lane, so the clip and its content are omitted
clip.note full
clip.media full
clip.gain drop dropped the writer does not emit a clip gain, so an authored clip gain is dropped and the clip exports at unity
clip.fades drop dropped the writer does not emit clip fades, so authored fade-in and fade-out durations are dropped and the clip exports with hard edges
clip.crossfade drop dropped not declared
clip.warp drop dropped not declared
clip.launch drop dropped not declared
gap.explicit drop dropped not declared
tempo.single full
tempo.map drop dropped not declared
meter.single full
meter.map drop dropped not declared
marker drop dropped the writer does not emit markers or regions, so every named point and range on the timeline is dropped
timecode.origin drop dropped the writer does not emit a session timecode origin, so the exported document starts at zero and every timecode reference shifts
media.provenance drop dropped not declared
mixer.track-gain drop dropped the writer does not emit a channel volume, so an authored track gain is dropped and the track exports at unity
mixer.track-pan drop dropped the writer does not emit a channel pan, so an authored track pan is dropped and the track exports centred
mixer.sends drop dropped not declared
automation.device-param drop dropped device identity does not survive without a device payload, so its automation has no target
automation.track-gain drop dropped a volume automation lane has no export target while channel volume itself is dropped
automation.track-pan drop dropped a pan automation lane has no export target while channel pan itself is dropped
device.placement drop dropped devices are identity-only in the document; DAWproject requires a device type to place one
device.payload drop dropped not declared
effect.timewarp drop dropped not declared
take.lane drop dropped the writer does not inspect take lanes, so alternate takes are omitted
take.comp drop dropped the writer does not flatten comp selections, so comp segment choices are omitted
track.freeze drop dropped DAWproject has no freeze concept; the authored track is exported and the sealed render is dropped
asset.sealed-hash full
asset.embedded-media drop dropped the writer does not emit embedded media bytes, so an embedded asset is omitted
asset.referenced-media full
sequence.multiple drop dropped only the root sequence is written; other sequences are dropped
sequence.nested drop dropped not declared
content.registered drop dropped the writer cannot preserve registered extension payloads, so the clip content is omitted
content.opaque drop dropped the writer cannot preserve opaque extension payloads, so the clip content is omitted
edit-rate.non-audio drop dropped not declared
context.chord-scale drop dropped not declared
context.groove drop dropped not declared
clip.note-modifier drop dropped DAWproject notes carry no probability, pass condition, or ratchet; the notes are written and play unconditionally once
clip.empty full
tempo.ramp drop dropped the writer emits only its first constant tempo, so continuous tempo curves are dropped with the rest of the tempo map
clip.note-velocity-quantized full
tempo.value-quantized full
clip.media-window drop dropped the writer references the complete media asset, so a nonzero source start or partial frame count is dropped
clip.fade-shape drop dropped the writer emits no fade at all, so a non-linear fade curve goes with the fade it shaped
clip.midi-expression-lane drop dropped the writer emits clip notes without their controller streams, so authored control change, pitch bend, pressure, program change, and parameter movement are omitted
sequence.section-role drop dropped DAWproject arrangement markers carry a name and span but no typed structural role
context.chord-bass drop dropped the DAWproject chord representation carries quality and root but no bass
context.chord-extension drop dropped the DAWproject chord representation carries no added scale degrees
context.chord-voicing drop dropped the DAWproject chord representation carries no voicing hint
tuning.project drop dropped DAWproject has no document-wide tuning statement
tuning.instrument drop dropped DAWproject has no per-instrument tuning statement
modulation.modulator drop dropped not declared
modulation.macro drop dropped not declared
modulation.route-device-param drop dropped not declared
modulation.route-track-mixer drop dropped not declared

Standard MIDI File

Format id smf. Writer registered: yes.

Import

Concept Level Detail
unknown none not declared
track.flat full
track.group none not declared
track.video none not declared
clip.musical partial positions are exact when the file division divides the canonical tick grid; otherwise import reports bounded nearest-tick rounding
clip.absolute none sample-anchored clips
clip.note full
clip.media none media clips
clip.gain none not declared
clip.fades none not declared
clip.crossfade none not declared
clip.warp none not declared
clip.launch none not declared
gap.explicit none not declared
tempo.single partial tempo periods are represented as integer microseconds and may round on import
tempo.map partial tempo positions may use bounded nearest-tick rounding on non-dividing file grids, and periods are integer microseconds
meter.single partial meter positions may use bounded nearest-tick rounding on non-dividing file grids
meter.map partial time-signature changes are admitted only when they land on canonical bar boundaries
marker none arrangement markers
timecode.origin none not declared
media.provenance none not declared
mixer.track-gain none not declared
mixer.track-pan none not declared
mixer.sends none not declared
automation.device-param none automation lanes
automation.track-gain none not declared
automation.track-pan none not declared
device.placement none device chains
device.payload none not declared
effect.timewarp none not declared
take.lane none takes and comp lanes
take.comp none not declared
track.freeze none not declared
asset.sealed-hash none not declared
asset.embedded-media none not declared
asset.referenced-media none not declared
sequence.multiple none not declared
sequence.nested none not declared
content.registered none not declared
content.opaque none not declared
edit-rate.non-audio none not declared
context.chord-scale none not declared
context.groove none not declared
clip.note-modifier none per-note probability, conditions, and ratchets
clip.empty none empty positioned clips
tempo.ramp none continuous tempo ramps
clip.note-velocity-quantized none not declared
tempo.value-quantized none not declared
clip.media-window none not declared
clip.fade-shape none not declared
clip.midi-expression-lane none per-clip controller and expression streams
sequence.section-role none not declared
context.chord-bass none not declared
context.chord-extension none not declared
context.chord-voicing none not declared
tuning.project none not declared
tuning.instrument none not declared
modulation.modulator none not declared
modulation.macro none not declared
modulation.route-device-param none not declared
modulation.route-track-mixer none not declared

Export

Concept Level Becomes Loss class Detail
unknown drop dropped not declared
track.flat full
track.group drop dropped not declared
track.video drop dropped not declared
clip.musical full
clip.absolute drop dropped sample-anchored clips cannot be placed on the Standard MIDI File tick grid, so the clip and its content are omitted
clip.note full
clip.media drop dropped Standard MIDI Files carry MIDI events rather than audio media, so media clips are omitted
clip.gain drop dropped Standard MIDI Files have no per-clip gain, so authored clip gain is omitted
clip.fades drop dropped Standard MIDI Files have no per-clip fades, so authored fade-in and fade-out durations are omitted
clip.crossfade drop dropped not declared
clip.warp drop dropped not declared
clip.launch drop dropped Standard MIDI Files describe a linear arrangement, so launcher scenes are omitted
gap.explicit drop dropped not declared
tempo.single full
tempo.map full
meter.single full
meter.map full
marker drop dropped the bounded writer does not emit marker meta-events, so markers and regions are omitted
timecode.origin drop dropped the bounded writer does not emit a session timecode origin, so the document opens at zero
media.provenance drop dropped not declared
mixer.track-gain drop dropped the bounded writer does not lower authored track gain to MIDI controller events
mixer.track-pan drop dropped the bounded writer does not lower authored track pan to MIDI controller events
mixer.sends drop dropped not declared
automation.device-param drop dropped the bounded writer does not lower device automation to MIDI controller events
automation.track-gain drop dropped the bounded writer does not lower track-gain automation to MIDI controller events
automation.track-pan drop dropped the bounded writer does not lower track-pan automation to MIDI controller events
device.placement drop dropped device chains have no Standard MIDI File representation and are omitted
device.payload drop dropped not declared
effect.timewarp drop dropped not declared
take.lane drop dropped takes and comp lanes have no Standard MIDI File representation and are omitted
take.comp drop dropped take comp selections have no Standard MIDI File representation and are omitted
track.freeze drop dropped frozen audio renders have no Standard MIDI File representation and are omitted
asset.sealed-hash drop dropped Standard MIDI Files do not carry Pulp media identity hashes
asset.embedded-media drop dropped Standard MIDI Files do not embed authored media assets
asset.referenced-media drop dropped Standard MIDI Files do not retain external media locators
sequence.multiple drop dropped only the root sequence is written; other sequences are omitted
sequence.nested drop dropped nested sequence placements have no Standard MIDI File representation and are omitted
content.registered drop dropped registered extension clip content has no Standard MIDI File representation and is omitted
content.opaque drop dropped opaque extension clip content has no Standard MIDI File representation and is omitted
edit-rate.non-audio drop dropped not declared
context.chord-scale drop dropped the bounded writer does not emit chord or scale context
context.groove drop dropped the bounded writer does not apply or serialize authored groove context
clip.note-modifier degrade clip.note degraded Standard MIDI notes carry no probability, pass condition, or ratchet, so the notes play unconditionally once
clip.empty drop dropped Standard MIDI Files have no positioned empty-clip object, so the clip is omitted
tempo.ramp degrade tempo.map approximated continuous tempo curves become discrete Set Tempo steps at the authored tempo points
clip.note-velocity-quantized degrade clip.note approximated 16-bit note velocities are quantized to the nearest nonzero 7-bit Standard MIDI velocity
tempo.value-quantized degrade tempo.map approximated tempo values are rounded to the nearest representable integer microseconds per quarter note
clip.media-window drop dropped not declared
clip.fade-shape drop dropped Standard MIDI Files have no per-clip fades, so a non-linear fade curve is omitted with the fade it shaped
clip.midi-expression-lane drop dropped Pulp's Standard MIDI File writer emits note, tempo, and meter events only, so an authored controller stream is omitted and the file plays with every controller left wherever the receiving instrument already had it
sequence.section-role drop dropped the bounded writer emits a region's name and span but not the part it names
context.chord-bass drop dropped the bounded writer does not emit chord or scale context
context.chord-extension drop dropped the bounded writer does not emit chord or scale context
context.chord-voicing drop dropped the bounded writer does not emit chord or scale context
tuning.project drop dropped Standard MIDI Files have no document-wide tuning statement
tuning.instrument drop dropped Standard MIDI Files have no per-instrument tuning statement
modulation.modulator drop dropped not declared
modulation.macro drop dropped not declared
modulation.route-device-param drop dropped not declared
modulation.route-track-mixer drop dropped not declared

Adding a format

  1. Write core/interchange/capabilities/<format>.json declaring the next stable contiguous ordinal, an enumerator, a display_name, a writer flag, and the import and export rows the format supports.
  2. Regenerate: capability_emit.py --emit concepts|tables|docs, or let the drift gate print the diff.
  3. Write the reader and writer in their own target, deriving every refusal from import_supports and every loss from the export rows.

Nothing in core/interchange changes.