daniel
a80eb76c1f
note: close every value type's domain at construction, so resolveNote is finite for every constructible input
...
Division and OffsetAmount get single normalizing doors and private constructors; fromBpm validates by running the conversions rather than their reciprocal. Readers drop their re-clamps and default labels.
2026-07-30 20:37:12 -04:00
daniel
6287534454
fix: classify future-version ledgers with changed record shape correctly, not as corrupt
...
Version-check now runs on the parseLedger failure path too, so a v3 blob whose record shape actually changed reports FutureVersion instead of Unreadable, avoiding the corrupt-blob "clear it" advice. Also closes the six minor findings.
2026-07-30 20:25:46 -04:00
daniel
d923b352ae
fix: harden note-program model against corrupt tempo/division/denomination records
...
Reject subnormal BPM that overflows to NaN, normalize Division equality, pin a single out-of-range-denomination interpretation across all readers, flag collapsed capture windows, add offset off-view editors and structural static_asserts, collapse duplicated CLAUDE.md facts.
2026-07-30 20:11:06 -04:00
daniel
45b87dc2ff
tracking: read the ledger's version, not just write it; clear owned on any block; channel-correct prune recovery
2026-07-30 20:11:05 -04:00
daniel
834a6ddcc7
note: land the programmed capture-signal model — division ladder, tempo resolution, anchored offsets, one record and one resolver
2026-07-30 19:44:15 -04:00
daniel
7f70d94228
tracking: one ledger, one authority — prune protection and replace-vs-add answered from the same records, fail-safe on unreadable state
2026-07-30 19:44:11 -04:00
daniel
0cfd9b6236
filter: sweep the corner continuously; raise the editor floor to 840x620
...
Cutoff-only re-solve (15.5 vs 56.9 ns/frame) makes the unquantized sweep
affordable, replacing the 2048-step mod quantizer. Live-compute parameters
remain blocked on a shell-architecture ruling.
2026-07-30 18:12:10 -04:00
daniel
39389c1183
fix: guard filter tail NaNs, skip static-filter envelope work, pin stereo filter path, correct stale comments
...
Codec fallback for non-finite filter fields, a modAmount==0 early-out in tickFilterCutoff,
new stereo render tests for the dual-mono mirror, and comment/test accuracy fixes flagged
in review (stale deck-width claims, restated invariants, drifted CMake link comments).
2026-07-30 17:35:45 -04:00
daniel
67215509cb
feat: run the per-voice filter between the pitch and amp stages, with its own deck
...
Params ride the one parameter set; payload v8 -> v9, off by default.
Deck composition moves to a pure deck_groups module in pitch -> filter -> amp order.
2026-07-30 15:26:14 -04:00
daniel
b9d85161e5
Merge Θ-W2-T3: full-width piano strip with uniform key widths, note tooltips, one toolbar font
2026-07-30 11:09:57 -04:00
daniel
3cb6b9de21
Fix filter test/doc claims: retracted DF1 limit-cycle rationale, notch-depth overreach, stale drive-branch wording
2026-07-30 11:04:20 -04:00
daniel
d2364eb5ac
Add an Oberheim-SEM morph law to the SVF filter: HP->notch->LP alongside HP->BP->LP, selected at prepare() time, free on the per-sample path
2026-07-30 11:04:20 -04:00
daniel
f12700c997
Filter review fixes: gate softLimit on drive, correct flush/DF1 measurement claims, pin control-law test literals, fix stale bypass state
2026-07-30 11:04:20 -04:00
daniel
902030bfba
Rebuild the instrument filter as a TPT/SVF with a continuous HP-BP-LP morph and a configurable drive stage
2026-07-30 11:04:20 -04:00
daniel
7d42d7ed29
Make the high-pass feedback tap a fixed 1/48000 s interval so resonance stops scaling with sample rate; 48k and 44.1k bit-identical
2026-07-30 11:04:20 -04:00
daniel
7af3c0c630
Fix filter DSP click-train flush and finish namespace nesting + test coverage
2026-07-30 11:04:20 -04:00
daniel
78e112d1f9
Port Cortex-M4 resonant filter to a pure vtable-free core/instrument/engine/filter module with 0.1-10 Q and log cutoff
2026-07-30 11:04:20 -04:00
daniel
e89568c1a8
Clear stale hover on capture-loss and Alt-delete; derive gutter test via chromeRects
2026-07-30 11:03:41 -04:00
daniel
9812690b96
Fix stale hover latch on drag release, tooltip anchor, border off-by-one; pin gutter golden test, drop DPI framing
2026-07-30 11:03:41 -04:00
daniel
ae23ee0882
Rebuild the chrome band: full-width piano strip with uniform key widths, note tooltips, one toolbar font
2026-07-30 11:03:41 -04:00
daniel
dfed1c77bb
Fix waveform_view comment accuracy, cut duplicate comments, align xToFrame to OverlayArea
2026-07-30 10:35:27 -04:00
daniel
fb12c53522
Type-enforce the waveform overlay contract, narrow waveformLanes to LaneSplit, fix laneCount/cache/path-fallback bugs
2026-07-30 09:35:11 -04:00
daniel
2a0d10fab5
Stack L/R waveform lanes in stereo mode, with overlays drawn once at full band height
2026-07-30 09:04:57 -04:00
daniel
81f5861ba4
Merge Θ-W1-T2: fix drag-out audio loss and FX-container drops, re-home ingest
2026-07-30 08:44:49 -04:00
daniel
e304f2b031
Fix embed use-after-free, restore golden fixture + refs tests, drop dead note_entry
2026-07-30 08:01:22 -04:00
daniel
8d4ccbf841
Retire the zone system: one capture = one parameter set, and re-seam the engine and Sample face into bands
2026-07-30 07:15:54 -04:00
daniel
c91bf03ef4
Fix drag-drop review findings: unify teardown, gate FX-add on outside-panel, trim comments
2026-07-30 06:56:20 -04:00
daniel
875d5b4632
Fix drag-handoff bugs: gate FX re-resolve on outside-panel, cache unresolvable OS-drag verdict, block double FX-add retry
2026-07-30 00:09:00 -04:00
daniel
0800760833
Fix drag-out losing audio and FX-container drops losing the capture; re-home ingest under shell/actions
2026-07-29 23:49:53 -04:00
daniel
f3be4d8cce
Q-W6: registration table (OCP) in main.cpp; bank verbs -> shell/bank_ops(Session&); persist.h + wav_trim + namespaces.h shims deleted; 61/61
...
capture.h realtime seam split to capture_realtime_shell.h; GetProjExtState grow-loop rehomed to core/wire/ext_state_read; stale persist.cpp/bank_panel.cpp comment refs fixed; CLAUDE.md persist/bank_book/actions bullets updated. Command-id suffixes, display phrases, and undo labels byte-identical.
2026-07-29 13:40:09 -04:00
daniel
75aa93f913
Q-W5: persist → session/ext_state_io/prune_fs (deletion authority concentrated); one GetProjExtState grow-loop in bridge_marshal (T2-04, ×3 rewired); bank_book JSON codec → bank_book_json via private static nameKey; persist.h stays umbrella. 61/61 green.
2026-07-29 13:06:38 -04:00
daniel
8bc5aa1257
Q-W3 review follow-ups: golden hash literal test, CLAUDE.md wav_codec bullet, dead RecordedCapture field comment, makeUniqueTag residual note
2026-07-29 11:33:28 -04:00
daniel
09f7173db2
Q-W3: main.cpp → pointers+entry+dispatch via 4 capture hoists; one pure wav_codec RIFF owner; ICaptureBackend deleted; capture_realtime rename + finalize split; shared stampCaptureSample; makeUniqueTag gains monotonic counter (fixes same-second batch collisions). 60/60 green.
2026-07-29 11:33:28 -04:00
daniel
f0f91f7698
Q-W2v review follow-ups: golden full-blob fixture test, dead-local cleanup, bool-guard static_assert, explicit VelocityCurve qualification
2026-07-29 11:29:36 -04:00
daniel
ea86f540b8
Q-W2v: split VST god-modules — editor 8 face-axis TUs (+pure layout hoist), processor 3 TUs, component_state_io codec split (extension drops the voice engine), zone_params.h, core/wire putLE; formats frozen, 61/61 green
2026-07-29 11:29:36 -04:00
daniel
2d59bbe35d
Q-W1 code-review follow-ups: restore 104 trailing newlines, relocate reasampler_uid.h to core/wire, drop ext_keys namespaces shim, add slot_map_tests, golden serialize literals for 4 modules, namespaces.h/pragma-once ordering sweep. 60/60 green.
2026-07-28 21:34:09 -04:00
daniel
847936f813
Q-W1 pt2: core/shell/app relocation + sub-namespaces; one concrete ui::Rect (LTRB fork retired); slot_map split from bank_book; BankIndex→BankModel; 59/59 green
2026-07-28 21:34:09 -04:00
daniel
67a41728f3
Q-W1 pt1: extract core/json (json::Reader/Writer), collapse wire Cursor family into core/wire, shared readFileBytes — five JSON decoders and three cursor copies deleted, byte-identical formats, 59/59 green
2026-07-28 21:34:09 -04:00
daniel
16b2a1b8ca
Q-W0 code-review remediation: pitch_shift follower self-heal, T3-03 rate bail, doc/comment riders
2026-07-28 19:28:48 -04:00
daniel
15d293b42f
fix(q-w0): six audit fix-nows — linked-lag stereo SOLA, playable-span prime bound, declick dead-state, provenance cursor hardening, rate-derived gain ramp + fade ceiling
2026-07-28 19:28:48 -04:00
daniel
ec83f14738
fix(pS-usage): close delete-ward residuals — remint on corrupt, named abort keys, truncation protect-all, abort->protect-all set
2026-07-28 13:54:10 -04:00
daniel
a4aeb9dcc8
fix(pS-usage): fail-safe prune protection — in-wire owner nonce + sticky union poison, protect-all on zero identified, abort on unreadable record, rsusage_ prefix
2026-07-28 13:32:14 -04:00
daniel
5886ae1456
pS-usage: captures held by live ReaSampler 9000 instances are un-prunable — instances publish usage_<guid> ext-state records (ComponentState v11), prune unions live holds into referenced
2026-07-28 12:56:36 -04:00
daniel
cb89dbf5c4
pS remediation: legacy lift terminates on stale-id proof; displayName in v10 refs; refs-reader range fallbacks; load path keeps owned refs
2026-07-28 12:17:36 -04:00
daniel
261a6affa5
self-contained playback — ComponentState v10 SampleRefs (path+intrinsics owned by the instance), reloadInstrument decodes bank-free, heal timer + poll-to-play removed; bank is a browser source
2026-07-28 11:45:10 -04:00
daniel
93e28f4ea5
fix(vst): reopen heal without the editor — bounded main-thread retry timer, re-armable first-poll heal, unconditional preview-off consume + Mono/drain preview tests
2026-07-28 10:56:40 -04:00
daniel
81c4658711
Preview rides the real note path: mailbox drains into VoiceEngine noteOn/noteOff at the root note; PreviewCard retired; first-poll reopen heal reloads a silent-but-should-be-loaded instrument
2026-07-28 10:30:51 -04:00
daniel
4f7e15390f
fix(pitch_shift): re-anchor fadePos_ on freeze so gNew is continuous at the freeze frame; guard left cast; add step-detector + loop-never-freezes regression
2026-07-28 10:09:23 -04:00
daniel
917626a287
fix(preserve): GA3 tail wind-down — freeze the SOLA writer at source exhaustion so the tail recycles frozen real content (no DC-splice chop through the final window + release)
2026-07-28 09:50:28 -04:00
daniel
a23ee1b000
Merge pS-ga2-clicks: bounded-blend takeover declick (mono retrig + preview + poly steal), soundingNote() gating — click-free voice restarts
2026-07-28 09:10:23 -04:00