Skip to content

Releases: Redrum624/Auditorium

Auditorium v1.39.0 — one track per speaker

Choose a tag to compare

@Redrum624 Redrum624 released this 06 Sep 14:58

Separate Voice now hears the people in the room: it counts the speakers, shows
you the count before anything lands, and gives you one full-length track per
speaker plus Backing.

Added

  • Separate Voice lands one track per speaker. Pipeline → Separate Voice
    is the same command, and when more than one person is talking it goes one
    step further. It runs three stages instead of one: the existing HT-Demucs
    separation, then speaker segmentation (pyannote-segmentation-3.0 over 10 s
    windows shifted by 1 s — SEG_WINDOW / SEG_SHIFT in
    electron/diarizeHost.cjs) and speaker embedding (WeSpeaker ResNet34-LM with
    per-utterance mean subtraction) in a new utility process, then clustering and
    assembly in the renderer. Then it stops: a confirmation step shows the
    count it found, each speaker's speech time and share, and the memory a
    landing would take. Nothing lands until you press Land, and changing the
    count re-groups the measurements already taken — instantly, with no second
    model run. Landing produces <name> — Speaker 1 … Speaker N plus
    <name> — Backing. A count of one lands exactly the Voice + Backing result it
    always did. The two models are one 32.5 MB download (5,992,913 B
    segmentation + 26,530,550 B embedder = DIARIZE_MODEL_BYTES 32,523,463 in
    src/services/diarizeService.ts), offered beside the 166 MB separation model.
    The grouping policy is fixed and in code: threshold 0.55, minimum cluster
    size 4, minimum speaker share 5 %, at most 6 speakers
    (DIARIZE_THRESHOLD / MIN_CLUSTER_SIZE / MIN_SPEAKER_SHARE in
    src/dsp/diarization.ts, MAX_SPEAKERS in src/dsp/speakerClustering.ts).
    New: src/dsp/diarization.ts, src/dsp/spanMask.ts,
    electron/diarizeHost.cjs, electron/diarizeManager.cjs,
    src/services/diarizeService.ts, scripts/diarize-bench.cjs,
    scripts/fetch-diarization-assets.cjs; changed:
    src/components/Dialogs/SeparateDialog.tsx, src/services/stemLanding.ts,
    electron/main.cjs, electron/preload.cjs, src/App.tsx.
  • A speaker track is the whole voice with the other people silenced, and the
    landing carries no exact-sum claim.
    Each speaker track is the full-length
    voice stem with everything outside that speaker's turns taken to silence, and
    every kept turn faded in and out over 10 ms so its edges do not click.
    Where two people talk at once, that audio is written into both their
    tracks. So speakers + Backing does not add back up to the source — unlike
    Separate into Stems (bit-exact) and the one-voice landing (within float32
    rounding, worst 4.32e-7). The dialog says so before you land and prints no
    exactness note afterwards; the Backing on its own is unchanged and still adds
    back. The full write-up is in docs/KNOWN_LIMITATIONS.md under A speaker
    split is a COUNT that was right four times out of four, and nothing finer
    .
  • What the count rests on — and what it does not. From
    docs/bench/diarize-bench-baseline.json (written by
    scripts/diarize-bench.cjs): on the four test recordings the counts came out
    2 / 2 / 2 / 4 against a truth of 2 / 2 / 2 / 44 of 4 — in both
    measured conditions, --direct (16 kHz speech straight into the speaker step)
    and --full-chain (what the tool actually does: HT-Demucs first, then the
    Vocals stem). Audio-anchored consistency was 100 / 100 / 96.5 / 100 % direct
    and 100 / 91.9 / 96.8 / 100 % through the chain. That is the whole of the
    evidence, and the same file says what it is not: four recordings, about
    162 s in total; the truth shipped with them is a speaker count per
    file and nothing finer, so there is no diarization error rate — a row can
    have the right count with the wrong turns, and nothing here measures who spoke
    when. One of the four is the only four-speaker case and it is Mandarin read
    by an English-trained embedder
    (WeSpeaker VoxCeleb ResNet34-LM). Overlapping
    speech is near-absent in all four, so overlap handling is untested end to
    end, and recordings with many short turns or heavy crosstalk were not in the
    set. The count is a control you can overrule for exactly that reason, and the
    panel prints the limit beside it.

Changed

  • The Separate Voice time estimate and its progress bar carry the measured
    stage rates.
    Both seeds were re-derived from
    docs/bench/diarize-bench-baseline.json on an idle machine — segmentation
    10 ms and embedding 75 ms per audio second (MEASURED_SEGMENT_MS_PER_S
    and MEASURED_EMBED_MS_PER_S, src/services/diarizeService.ts), replacing 8
    and 55, which came from an early spike that had timed a different embedder
    (CAM++, which this feature does not ship). The weighted bar now hands Demucs
    88.6 % of the run instead of 91.3 % (stageWeights(), computed from those
    two seeds and MEASURED_REALTIME_FACTOR = 1.52 in
    src/services/stemService.ts). The estimate assumes an otherwise idle
    machine.
    Its Demucs term is the conservative end of the app's own two stem
    measurements, while this bench measured the stem stage at 1.97–2.07× realtime
    (msPerAudioSecond.stem 483.2–507.2 across the four full-chain rows), so on
    an idle machine the panel reads long — the safe direction. On a busy one
    it reads short: docs/KNOWN_LIMITATIONS.md records the same bench run beside
    a full test suite putting the chain at 1,150–1,230 ms per audio second, about
    40 % over what the panel predicts. The per-stage spread through the chain
    is in the baseline: segmentation 6.0–11.9 ms and embedding 39.9–110.1 ms per
    audio second. Affects: src/services/diarizeService.ts.
  • The speaker landing's memory gate prices the Backing document too. A
    landing allocates N speaker documents plus a full-length Backing, so the
    panel quotes and refuses on (N + 1) × the document size. At 15 minutes of
    44.1 kHz stereo one document is 317.5 MB, so two speakers cost 952.6 MB (not
    635.0 MB) and three cost 1.3 GB; a landing above 1.2 GB
    (SPEAKER_LANDING_BUDGET_BYTES, src/services/stemLanding.ts) is refused
    with the figure in hand rather than landed short. None of these documents has
    been written to disk, so a project save writes every one of them into the
    project file — export the speakers you want and close the rest. Affects:
    src/components/Dialogs/SeparateDialog.tsx, src/services/stemLanding.ts.

Verify your download (see SHA256SUMS.txt):

CertUtil -hashfile "Auditorium Setup 1.39.0.exe" SHA256

Auditorium v1.38.0 — the bar, the gaps, the voice, the podcast

Choose a tag to compare

@Redrum624 Redrum624 released this 05 Sep 19:06

The edit line becomes the thing everything aims at — zoom and Play both — plus
gaps you can select and close, and two new Pipeline tools for the voice.

Changed

  • Zoom anchors on the edit line, everywhere. Every zoom gesture on both
    surfaces — Ctrl+wheel and the toolbar's /+, in the waveform, spectral
    and multitrack views — now keeps the edit line at its on-screen x, and centres
    the view on it when it is off screen. The pointer is no longer a zoom anchor
    anywhere: the four gestures used to disagree (the wheel anchored on the
    pointer, the buttons on the line), so the same zoom step landed somewhere
    different depending on which control you reached for. One pure helper computes
    the request for all four callers. Shift+wheel scroll and Fit are
    unchanged. Affects: src/services/zoomAnchor.ts (new),
    src/components/Editor/useEditorGestures.ts,
    src/components/Multitrack/useMultitrackZoom.ts,
    src/components/Layout/Toolbar.tsx.
  • Play starts at the edit line, and Pause moves the line. In the waveform and
    spectral views Space now always begins at the line — the engine's hidden
    paused position is never consulted — and Pause writes the paused position back
    to the line, so Space·Space is still a resume and the only mark left on
    screen is the one playback will use. The one exception: with a selection whose
    span the line sits outside, Play starts at selection.start, because the
    region about to play is the selection. A ruler click DURING playback still
    does not re-seek (unchanged, deliberate) — pause first, then click. Stop is
    unchanged; the multitrack already started at its own cursor. Affects:
    src/services/transportService.ts.
  • The multitrack bar, its handle and the playhead hide when they leave the
    lane
    instead of painting over the track headers or trailing off the right
    edge. Affects: src/components/Multitrack/MultitrackView.tsx.

Added

  • Gaps are selectable and closable in the Multitrack view. Double-click the
    empty stretch on a track — between two of its clips, or between the start of
    the timeline and its first clip — and it is selected as a translucent band the
    full height of that lane. Del or Shift+Del then closes it: every clip on
    that track starting at or after the gap's end moves left by the gap's
    length, in one Close gap undo entry, and no other track moves. The band and
    the clip selection are mutually exclusive; Escape clears it, and so does a
    click on empty lane space outside it. No keyboard shortcut selects a gap, the
    open stretch after the last clip is not one, and neither is anywhere two clips
    overlap. Affects: src/multitrack/gaps.ts (new),
    src/multitrack/sessionStore.ts, src/components/Multitrack/TrackLane.tsx,
    src/services/menuActions.ts.
  • Separate Voice (Pipeline → Voice). The same separation as Separate into
    Stems, landed as two tracks instead of five: <name> — Voice and
    <name> — Backing (drums + bass + everything else + residual). Same model,
    same download/progress/cancel, same landing shape. The two add back up to the
    source within float32 rounding — measured worst 4.32e-7, never claimed as
    bit-exact; the five-stem landing keeps that claim. It opens the Voice group.
    Affects: src/services/menuActions.ts, src/services/stemLanding.ts
    (landVoice), src/components/Dialogs/SeparateDialog.tsx (a mode prop).
  • Podcast Chain (Pipeline → Voice, after Cover Chain). Ten speech-tuned
    stages in one pass and one undo entry: DC removal · noise reduction (only when
    the take has a quiet passage to learn a print from) · de-hum · shortened pauses
    (to 400 ms) · noise gate · compressor (3:1, threshold placed for ~6 dB of gain
    reduction on the loud passages) · de-esser · parametric EQ (80 Hz high-pass,
    −2 dB at 250 Hz, +2 dB at 3 kHz) · loudness to −16.0 LUFS stereo /
    −19.0 LUFS mono · limiter at −1.0 dBFS sample peak (not oversampled, so
    never a true-peak figure). Every stage is switchable and reports what it
    derived or the measurement that made it decline; the gate has no manual
    threshold here and its decline points at the Vocal Chain's. Documents with more
    than two channels are refused ("convert to stereo first") rather than
    mis-measured. Affects: src/services/podcastChain.ts (new),
    src/components/Dialogs/PodcastChainDialog.tsx (new),
    src/services/menuActions.ts.
  • Integrated loudness measurement (ITU-R BS.1770-4). K-weighting derived for
    the document's own sample rate (not the 48 kHz coefficient table copied),
    400 ms blocks at 75 % overlap, absolute −70 LUFS then relative −10 LU gating,
    channel weights 1.0 — mono/stereo-accurate, null when every block gates out.
    Pinned against EBU Tech 3341 cases. Affects: src/dsp/loudness.ts (new).

Verify your download (see SHA256SUMS.txt):

CertUtil -hashfile "Auditorium Setup 1.38.0.exe" SHA256

Auditorium v1.37.0 — Merge Clips in the multitrack

Choose a tag to compare

@Redrum624 Redrum624 released this 04 Sep 21:29

One multitrack verb: Merge Clips.

Added

  • Merge Clips in the Multitrack view. Edit → Merge Clips or the pill's new Merge button (no shortcut, directly after Split) turns the clips you have selected on a track into one clip running from the earliest start to the latest end, with silence in the gaps — every track with two or more selected clips at once, in a single undo step. The audio is rendered into a new Merge N document in the Files panel, the Mix Down pattern: each member's clip gain and fades (an armed crossfade between two members included) are baked in, while track volume, pan, mute, solo and automation stay on the track. Unselected clips inside the span are overlapped, not absorbed. The edges — a mono clip merged with a stereo one, undoing a merge, a crossfade with a clip outside the selection — are written up in docs/KNOWN_LIMITATIONS.md under Merge Clips bakes the members into a new document.

Verify your download (see SHA256SUMS.txt):

CertUtil -hashfile "Auditorium Setup 1.37.0.exe" SHA256

Auditorium v1.36.0 - ten editor items: project save, multitrack export, Split, inline effect cards

Choose a tag to compare

@Redrum624 Redrum624 released this 23 Aug 14:22

Ten items of editor feedback, in five lanes.

Changed

  • Save writes the project, in every view. Ctrl+S / Save / Save As write the .audm project — the session plus every open document, referenced by a clip or not — to a remembered path. It never overwrites an audio file any more: to get audio out, you Export. The project file moves to v4 (v3 still opens); Open Project restores every embedded document into the Files panel; the StatusBar shows <project> * while unsaved.
  • Delete and Ctrl+X keep the length. Delete zero-fills the selection in place (markers stay put); Ctrl+X cuts the selection — or, with no selection, the segment under the cursor — to the clipboard and leaves the span empty. Ripple delete moved to Shift+Del in the editors.
  • Cut is now Split. The Scissors button and Ctrl+K (Split at Cursor) drop a marker at the cursor (or one at each selection edge); every marker is a segment boundary — double-click selects the segment under the pointer. M (Add Marker) is now editor-only.
  • The Effects module lists effects only — the ten Pipeline tools no longer appear a second time under it (the Mix/Spatial row stays).
  • Effects open on one click, as a card — not a modal. An effect opens between the module bar and the module card; the waveform, transport and edit pill stay usable while it previews, and Escape closes it. Apply commits only to the document as it was when clicked — an edit, a document switch or a close mid-run writes nothing and says so.

Added

  • Split in the Multitrack view. Ctrl+K / the pill's Split button splits every clip under the edit cursor on the tracks that own a selected clip — several selected tracks split at once — in one undo step, fades kept on the outer edges, the seam clean. Copy / Paste / Trim / Silence stay greyed there, and each tooltip now says why.
  • Export in the Multitrack view renders the mixdown — the session as played (muted tracks out, solo, automation and fades honored, byte-identical to Mix Down), not the editor's hidden document.
  • Leaving Multitrack with a clip selected shows that clip — switching to Waveform or Spectral activates the clip's source document and fits its span.

Verify your download (see SHA256SUMS.txt):

CertUtil -hashfile "Auditorium Setup 1.36.0.exe" SHA256

Auditorium v1.35.1 - the shortcuts get their icon back

Choose a tag to compare

@Redrum624 Redrum624 released this 18 Aug 12:08

Fixed

  • Blank desktop and start-menu icons after install. The NSIS installer passes package.json's description verbatim as the shortcut comment, and ours had grown to 574 characters — past the ~260-character shell-link comment limit, which corrupts the .lnk's icon-location field (the v1.35.0 shortcuts carried a slice of the description where the icon path belongs). The description is now a 183-character one-liner, pinned by a regression test; the full pitch lives in the README, where it always belonged.

Note on the AI models: nothing about model handling changed in this release — the installer intentionally ships no models (~1.03 GB across four features). Each AI dialog (Separate, Transcribe, Voice Changer, Align Lyrics) offers a Download Model button with progress; files are sha256-verified and land in %APPDATA%\audition_app\models.

Verify your download (see SHA256SUMS.txt):

CertUtil -hashfile "Auditorium Setup 1.35.1.exe" SHA256