Releases: Redrum624/Auditorium
Release list
Auditorium v1.39.0 — one track per speaker
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_SHIFTin
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 Nplus
<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_BYTES32,523,463 in
src/services/diarizeService.ts), offered beside the 166 MB separation model.
The grouping policy is fixed and in code: threshold0.55, minimum cluster
size4, minimum speaker share5 %, at most6speakers
(DIARIZE_THRESHOLD/MIN_CLUSTER_SIZE/MIN_SPEAKER_SHAREin
src/dsp/diarization.ts,MAX_SPEAKERSinsrc/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 indocs/KNOWN_LIMITATIONS.mdunder 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 / 4against a truth of2 / 2 / 2 / 4— 4 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.jsonon an idle machine — segmentation
10 ms and embedding 75 ms per audio second (MEASURED_SEGMENT_MS_PER_S
andMEASURED_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 andMEASURED_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.stem483.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.mdrecords 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
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 viewsSpacenow always begins at the line — the engine's hidden
paused position is never consulted — and Pause writes the paused position back
to the line, soSpace·Spaceis 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 atselection.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.DelorShift+Delthen closes it: every clip on
that track starting at or after the gap's end moves left by the gap's
length, in oneClose gapundo entry, and no other track moves. The band and
the clip selection are mutually exclusive;Escapeclears 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> — Voiceand
<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(amodeprop). - 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,nullwhen 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
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 Ndocument 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 indocs/KNOWN_LIMITATIONS.mdunder 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
Ten items of editor feedback, in five lanes.
Changed
- Save writes the project, in every view.
Ctrl+S/ Save / Save As write the.audmproject — 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+Xcuts the selection — or, with no selection, the segment under the cursor — to the clipboard and leaves the span empty. Ripple delete moved toShift+Delin 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
Fixed
- Blank desktop and start-menu icons after install. The NSIS installer passes
package.json'sdescriptionverbatim 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