openmixer — generated API reference
    Preparing search index...

    Interface TakeSummary

    ONE TAKE AS THE LIBRARY PUBLISHES IT — the header /takes and /takes/{id} answer.

    A HEADER, NOT THE DOCUMENT, for the reason import('./session.js').SessionSummary is one of import('./session.js').SavedSession: the library rows exist so an operator can PICK a take, and the body is used through the doors that consume it — /vsc's takeId load and /takes/{id}/render — never read field by field off the wire. Publishing SavedTake whole would put every track (a channel contributes up to three, §0.3) and every rendered band of every take into one frame that re-streams to every open surface on every change.

    EVERY FIELD IS ON THE RECORD OR DERIVED FROM IT — nothing here is measured, guessed or defaulted, because a picker that shows a fabricated number is one an operator cannot check. That is why there is no bytes: the store keeps no size, lengthFrames × rate × tracks is the float32 arithmetic and NOT what is on the disk (RF64 headers, and a rendered file beside each original once /takes/{id}/render has run), so a byte count here would be a measurement the console never took. It is also why sessionId and render are absent: both are honestly carried, neither has a reader, and a column with no reader is a comment.

    interface TakeSummary {
        emptyTrackCount: number;
        id: string;
        lengthFrames: number;
        name: string;
        rate: number;
        recordedAt: number;
        taps: readonly string[];
        trackCount: number;
        unlinkedCount: number;
        unmeasuredTrackCount: number;
        unsealedTrackCount: number;
        xrun: boolean;
    }
    Index
    emptyTrackCount: number

    HOW MANY TRACKS ARE KNOWN EMPTY — tracks whose TakeTrack.frames is 0.

    A strip whose input port carries no buffer is skipped by the RT walk above the capture line, so its ring is armed and never written: the file is a header and nothing else, and xrun is honestly false because nothing was ever lost. Emptiness and xrun are two facts and neither implies the other, so the library reports both or reports a take it cannot describe.

    id: string

    The take's id — the folder's name, the row's address, and what /vsc's takeId is set to.

    lengthFrames: number

    Frames per track at rate. With it, the take's duration.

    name: string

    The operator's label. What a picker shows and what a rename moves.

    rate: number

    The rate the capture ran at. ON THE HEADER because a load REFUSES on a mismatch (§5: the VSC path has no resampler by design), so a picker that could not show it would offer takes the desk is about to turn down with no way for the operator to see why beforehand.

    recordedAt: number

    Epoch milliseconds at the start of capture — the library's order, newest first.

    taps: readonly string[]

    WHICH TAP POINTS this take actually holds, in the catalogue's signal order.

    A channel contributes several tracks now (§0.3), so the tap set is what says what a take can be USED for: only an input tap can be replayed into the strip head, and a take of nothing but post-fader tracks cannot drive a soundcheck at all. Derived by filtering import('./session.js').RECORD_TAP_POINTS, so the order is the catalogue's and never a string sort — tap-points.ts refuses any other order for a reason that holds here too.

    trackCount: number

    How many track files the take holds — tracks.length, derived, never a stored count.

    unlinkedCount: number

    HOW MANY CHANNELS THIS TAKE LEFT OUT — the length of SavedTake.unlinked.

    A channel dropped from the arm set in silence is found at soundcheck, on a strip playing nothing. The count rides the header for emptyTrackCount's reason: a picker exists so an operator can CHOOSE a take, and the names belong where the take is opened.

    A take carrying no unlinked key reads 0 — it was written before the recorder answered the question, and unmeasuredTrackCount === trackCount is the field that already says so.

    unmeasuredTrackCount: number

    HOW MANY TRACKS THE CONSOLE CANNOT SPEAK FOR — tracks with no TakeTrack.frames.

    Separate from emptyTrackCount because absence is not zero. A take written before the recorder carried a frame count has every track unmeasured and none known empty; folded into one number it would read as a clean take. unmeasuredTrackCount === trackCount is "this take predates the measurement", which is a different sentence and earns different words on a picker. Anything that must know for certain measures the file.

    unsealedTrackCount: number

    HOW MANY TRACKS CARRY A HEADER THAT CANNOT BE BELIEVED — the take.unsealed state (R-074, recording-vsc §2.1, operator ruling 2026-09-17).

    An unsealed track's audio is ON THE PLATTER and plays; its header claims a different length, because a capture's finalize never ran or the file was cut short after it did. The desk's own 2026-09-01 take is one: data size 0, ninety minutes behind it.

    ON THE HEADER for emptyTrackCount's exact reason — a picker exists so an operator can CHOOSE a take, and a take the console cannot fully vouch for must say so in the list rather than only once opened.

    A THIRD FACT, not a spelling of SavedTake.tracks' xrun or of emptiness. xrun is "frames were lost during capture", empty is "nothing was ever written", unsealed is "the bytes are there and the header does not admit it" — and only the last one is repaired by the recorder's next start.

    MEASURED, NEVER STORED (R-049). The sidecar carries no seal flag: one would go stale the instant the recorder sealed the header, and the file is the only thing that can answer the question. So this count is not derivable from a SavedTake and is passed IN — see takeSummary. undefined in, 0 out, and unmeasuredTrackCount === trackCount is already the field that says the console has not measured this take's files.

    xrun: boolean

    Whether ANY track in this take dropped frames. Capture is best-effort by design — the recording is sacrificed before the live audio ever is (§5) — so the flaw belongs where the take is CHOSEN, not only where it is opened.