Repository navigation
Bass pitch analysis
In mix[flow], open the bug button beside Settings and choose Bass pitch. This is an interactive workbench for checking a separated bass recording against its pitch analysis.
Choose a track with a bass stem and press Analyze bass. A new analysis keeps the continuous pitch estimates beside the existing MIDI and tab. Older note-only analyses need one new pass; after that the map is cached. The existing tab and its octave correction remain available. Missing evidence is never replaced with example notes.
The rows share one time axis:
- Bass mono shows the waveform used by the pitch tracker.
- Pitch / MIDI shows voiced estimates in green, rejected estimates in pink, derived notes in amber, and an imported reference in white. Slides and cents are retained.
- Periodicity shows model support, which is not a probability that a note is correct.
- Key candidates shows possible major/minor regions inferred from the bass map.
Click the pitch row to read the exact time, frequency, note/cents, periodicity and signal level. Change the visible MIDI range to inspect low or high material; the map is not restricted to four-string bass tab.
Scroll to pan and Shift-scroll to zoom. Shift-drag the time ruler to select a passage, then Frame selection to zoom it, or enter passage times in From/To. Play comparison plays that passage, or the visible range when nothing is selected. Choose the separated bass or original full song and compare it with triangle synthesis of the derived MIDI notes. Source and MIDI have separate levels and mutes. Loop repeats the passage; Stop ends it. Click pitch to seek while playing. Leaving the tab stops its audition. The synthesized notes are the model's interpretation, not a reference performance; continuous slides are visible in the map but not rendered as MIDI bends.
To play an Ableton instrument directly, press Create mix[flow] Bass port. On macOS, mix[flow] Bass appears in Live's MIDI inputs. Enable Track for that input in Live's MIDI settings, select it on a MIDI track with an instrument, and set Monitor to In (or Auto and arm the track). Press Play comparison in the lab. Close mix[flow] Bass port removes the port; leaving the lab also closes it. No IAC setup is needed.
External MIDI is optional and initially Off. Press Find MIDI outputs, then select a device and channel explicitly to send notes during playback. Use a dedicated synth channel. Changing device, channel or timing offset stops playback; Stop and Mute MIDI cancel pending notes and release held notes. MIDI level changes new note velocities. Switch Triangle synth off to hear only your external synth alongside the recording. The timing offset compensates for external hardware latency. Unavailable MIDI access, and missing devices are reported. No clock, transport, program changes or SysEx are sent. Physical hardware has not yet been verified.
Replacing selected stem passages with synthesized fundamentals remains a future direction; this experiment currently supports listening and inspection.
The rejected-estimate and derived-note switches help compare model evidence with its interpretation. Tuning cents affects key suggestions only. Choose the key-analysis window to inspect whether a possible change persists over a longer phrase. Click a key region to select it for listening.
Key labels are suggestions. Relative major and minor may remain paired; sparse or unclear material remains Unknown. A different label in the next window does not by itself prove a modulation. The lab alone does not save a library key; use the debug backfill below.
For independent checking, Import reference JSON accepts time/frequency annotations
with the exact bass file's SHA-256, a kind (human, synthetic, or resynthesized) and
a provenance description. Each frames entry has time in seconds and hz; zero is
explicitly unvoiced and null is unannotated. Wrong-source files are rejected. The lab
scores the visible range and Next disagreement selects a passage to inspect.
The current tracker cannot reliably cover notes below C1, including low B0. Generated test signals exercise pitch motion, missing fundamentals, silence and noise, but accuracy on separated real bass has not been established against independent annotations. The workbench makes that checking possible; its graphs alone do not prove accuracy.
Return to Mixing stems.
The library shows one plain Key, or Unknown, with no uncertainty badge. The default is libkeyfinder on the whole original song; bass stems are not required. Click a key to correct it. Save key keeps a manual correction (including Unknown); Use detected clears the correction and shows the automatic result. Detect from original checks that song and refreshes the library. Corrections survive reanalysis.
The Key heading sorts with Unknown last, and the Key filter combines with Artist, Album and text. Drag the heading to reorder it. The column can narrow to 80 px without shrinking the editor; its width survives closing/reopening.
New imports preserve the original audio, then attempt key detection. A failed or busy detector leaves the song imported and reports that its key needs retrying. The installed macOS Apple Silicon app carries its detector; no experiment setup or end-user compiler is needed. These are practical guesses, with provenance available in Debug.
Open Debug & experiments → Key detection → Update library keys. This is the canonical library operation: it checks all recordings, reuses matching results and saves the default libkeyfinder key. Manual corrections remain intact.
Under Advanced · library key detection, Analyze missing keys skips current results, including Unknown. Enable Include current detected keys to check those as well. Stop after current, closing the workspace or switching tabs stops scheduling further songs; completed results remain saved. Per-song errors remain visible.
The new native backend must be installed before these controls enable. A stale backend shows a restart message. Old bass guesses stay available diagnostically but are not presented as the new original-song key. Previously completed libkeyfinder experiments are reused only when the exact original fingerprint, detector version and settings match; no blind promotion or automatic whole-library job occurs on opening the panel.
The developer equivalent is node tools/mix-key-backfill.ts to preview, --run for
missing keys, or --run --reanalyze to check all. Valid current results are reused.
Expand Compare detectors · experiments for the visual libkeyfinder/Essentia matrix. Its Analyze library button saves separate experiments, not canonical library keys. Bass is an optional cached baseline. Overview cards show analyzed coverage and matches over scored reference/result pairs; unevaluated results say Not evaluated.
Sources & selected-song details preserves published raw keys, direct links, version notes and detector evidence. Settings & diagnostics contains detector choices, refresh/download, custom batches and logs. Equivalent spellings display consistently, with original labels retained in details. Major/minor disagreements remain disagreements. Runtime includes process startup and detector execution, not shared decoding or all other pipeline overhead.
Published references are fallible. Disputed, missing, unmatched-version and stale references are unscored. Unknown/ambiguous predictions abstain; detector agreement is not proof of accuracy. A separately verified experimental reference does not change an editable library key.
The September 11 inventory covers 24 recordings: 10 published references, 9 disputed, 3 needing version confirmation and 2 without published keys. The user’s completed batch saved 24 paired results in about 39 seconds. Median detector time was 0.42 seconds for libkeyfinder and 0.79 seconds for Essentia; the earlier 45-second cold smoke invocation was not representative. They agreed on 16 of 23 music recordings (excluding the spoken video). Published-reference matches were 9/10 and 10/10 respectively. The user chose libkeyfinder as a practical default, with manual correction available.
Essentia remains an optional local research installation via
node tools/mix-key-experiments-setup.ts. The shipped standalone libkeyfinder helper
includes its GPL licenses, corresponding source and rebuild instructions separately;
the application’s root license is unchanged.