Commit Graph
389 Commits
Author SHA1 Message Date
Brandon Thomas cd1ddff0c0 Merge pull request #324 from iannitram/fix/gate-on-windows-and-rust-1.95
Make cargo xtask ci pass on Windows, and on Rust 1.95
2026-10-13 04:29:32 -04:00
Brandon Thomas ec67064398 Merge pull request #355 from mroxso/fix/ui-test-palette-lock-323
fix(ui-egui): own the test palette lock for every SoundApp lifetime (#323)
2026-10-13 04:29:27 -04:00
Brandon Thomas e59f079a02 Merge pull request #342 from mroxso/t3code/76964692
fix(mix): mix.insert_params rejects unknown parameter names
2026-10-13 04:29:23 -04:00
Brandon Thomas b0339a418f Merge pull request #401 from Claudio911015/fix/273-clip-loop-unloop-consistency
Make clip.loop / clip.unloop self-consistent (loop_id tag)
2026-10-13 04:29:19 -04:00
Brandon Thomas d9b959ed6c Merge pull request #400 from marcoarnulfo/fix/vst3-set-param-controller-sync
VST3: hand host-set parameter values to the controller before saving state
2026-10-13 04:29:15 -04:00
Brandon Thomas 75e019dde3 Merge pull request #301 from marcoarnulfo/fix/seek-flushes-state
Locate clears plugin and delay-compensation state
2026-10-13 04:29:11 -04:00
Brandon Thomas e5ca13d07f Merge pull request #327 from Limestudio90/fix-replaced-instance
mix: a newly adopted plugin instance replaces a matching one in its slot
2026-10-13 04:29:07 -04:00
Brandon Thomas a307f767ba Merge pull request #212 from itrycodinganditsbad/consolidate-selection
Consolidate covers the whole edit selection (#164)
2026-10-13 04:28:45 -04:00
Brandon Thomas f868c2678f Merge pull request #386 from itrycodinganditsbad/fix-240
fix(meter): keep K-weighting stable below ~3.4 kHz sample rates
2026-10-13 04:28:41 -04:00
Brandon Thomas 34117efc24 Merge pull request #354 from webdevtodayjason/automation-thin-tolerance
Keep automation thinning within its tolerance
2026-10-13 04:28:36 -04:00
Brandon Thomas 651b9049a8 Merge pull request #353 from webdevtodayjason/trim-keeps-clip-gain
Keep the clip gain line where a clip is trimmed or separated
2026-10-13 04:28:31 -04:00
Brandon Thomas a89c0c4db5 Merge pull request #379 from webdevtodayjason/trim-to-selection-order
Keep clips in order after Trim to Selection
2026-10-13 04:28:26 -04:00
Brandon Thomas 54254639cc Merge pull request #358 from sajibsrs/fix/282-new-midi-clip-menu
Add Clip › New MIDI Clip so an empty MIDI track can get a clip (#282)
2026-10-13 04:28:22 -04:00
Brandon Thomas fe8270e6dc Merge pull request #293 from MarekSpodBiedry/m4b-open
Open .m4b audiobook files like .m4a
2026-10-13 04:28:17 -04:00
Brandon Thomas 2d1f25b1bb Merge pull request #264 from TheMojoMan/toolbar-horizontal-scroll
fix(ui): horizontally scroll the Edit toolbar
2026-10-13 04:28:12 -04:00
Brandon Thomas 8eb1d1aa77 Merge pull request #313 from lunar-me/fix-docs/issue-008
docs: fix grammar issue in docs/target-app-parity.md
2026-10-13 04:28:07 -04:00
Brandon Thomas d85889aafa Merge pull request #312 from lunar-me/fix-docs/issue-007
docs: fix grammar issue in docs/target-app-parity.md
2026-10-13 04:28:03 -04:00
Brandon Thomas 63717328c5 Merge pull request #311 from lunar-me/fix-docs/issue-002
docs: fix grammar issue in README.md
2026-10-13 04:27:58 -04:00
Brandon Thomas 18579f546c Merge pull request #295 from marcoarnulfo/fix/pan-automation-bounce
fix(mix): pan automation reads the same in playback and bounce
2026-10-13 04:27:50 -04:00
Brandon Thomas 3c53d25413 Merge pull request #294 from marcoarnulfo/fix/feet-frames-reference
Apply the Feet+Frames reference to counters and typed positions
2026-10-13 04:27:47 -04:00
Brandon Thomas 3ef50746c8 Merge pull request #292 from marcoarnulfo/fix/trim-no-overlap
fix(edit): trims stop at the neighbouring clips instead of overlapping them (#228, #229)
2026-10-13 04:27:43 -04:00
Brandon Thomas 704ebc3c76 Merge pull request #288 from marcoarnulfo/fix/clip-gain-cut-clipboard
fix(edit): cut clip gain keeps the removed gain for paste (#230)
2026-10-13 04:27:37 -04:00
Brandon Thomas db9ea775fc Merge pull request #287 from marcoarnulfo/fix/midi-backspace-rename
fix(midi-editor): Backspace in a text field leaves the selected notes alone (#223)
2026-10-13 04:27:30 -04:00
Brandon Thomas 8c33cefe1c Merge pull request #286 from marcoarnulfo/fix/modulation-feedback-tail
fix(dsp): chorus and flanger tails follow their feedback (#242)
2026-10-13 04:27:23 -04:00
Brandon Thomas 5bb3e7b3b6 Merge pull request #285 from marcoarnulfo/fix/pitch-shift-full-range
fix(dsp): pitch_shift reaches ±48 semitones (#243)
2026-10-13 04:27:18 -04:00
Brandon Thomas f58da8fe8a Merge pull request #284 from marcoarnulfo/fix/elastic-properties-ratio
fix(clip): Elastic Properties stretches the clip by the requested ratio (#227)
2026-10-13 04:27:14 -04:00
Brandon Thomas 99dbd4d628 Merge pull request #283 from marcoarnulfo/fix/marker-edit-name
fix(markers): markers.edit applies the documented name (#236)
2026-10-13 04:27:10 -04:00
Brandon Thomas 741010d50c Merge pull request #281 from marcoarnulfo/fix/h264-param-set-overflow
fix(video): H.264 parameter sets check their arithmetic before range checks (#251, #252)
2026-10-13 04:27:06 -04:00
Brandon Thomas 3726c57d78 Merge pull request #280 from marcoarnulfo/fix/eq-discrete-redesign
fix(eq): switches and choices redesign the filter on a running EQ (#239)
2026-10-13 04:27:02 -04:00
Brandon Thomas e5787ab7ac Merge pull request #279 from marcoarnulfo/fix/midi-quantize-grid
fix(midi-editor): Quantize snaps to the grid the editor shows (#226)
2026-10-13 04:26:56 -04:00
Brandon Thomas f146bc359f Merge pull request #278 from marcoarnulfo/fix/pencil-plugin-range
fix(edit-window): Pencil clicks on plugin lanes use the plugin's range (#224)
2026-10-13 04:26:53 -04:00
Brandon Thomas 12224df8f5 Merge pull request #277 from marcoarnulfo/fix/hide-floating-automation
fix(window): Hide All Floating Windows also hides Automation (#253)
2026-10-13 04:26:49 -04:00
Brandon Thomas baf102e13f Merge pull request #276 from marcoarnulfo/fix/filmstrip-clip-start
fix(video-universe): filmstrip thumbnails use the clip's own movie time (#225)
2026-10-13 04:26:45 -04:00
Brandon Thomas bd7e8f271f Merge pull request #275 from marcoarnulfo/fix/video-selection-midi-target
fix(midi-editor): a selected video clip is not a MIDI target (#258)
2026-10-13 04:26:42 -04:00
Brandon Thomas b8e206273c Merge pull request #272 from marcoarnulfo/fix/midi-front-keeps-editor
fix(window): keep the MIDI Editor open on Bring to Front (#254)
2026-10-13 04:26:37 -04:00
Brandon Thomas 5c1f9d7dc8 Merge pull request #271 from marcoarnulfo/fix/command-filter-ui-rows
fix(control): apply the engine.commands filter to UI commands (#255)
2026-10-13 04:26:33 -04:00
Brandon Thomas d14edcd51c Merge pull request #270 from marcoarnulfo/fix/track-vca-null
fix(track): vca: null clears a VCA assignment, as documented (#237)
2026-10-13 04:26:28 -04:00
Brandon Thomas 06a4b21663 Merge pull request #269 from marcoarnulfo/fix/pitch-detect-large-rate
fix(dsp): a huge finite sample rate is no pitch, not an overflow (#241)
2026-10-13 04:25:54 -04:00
Brandon ThomasandClaude Opus 5.5 5183bc4dba rustfmt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 04:22:21 -04:00
Claudio bee999584f Make clip.unloop recognise loops made by clip.loop, even after edits
clip.unloop found loop copies only by comparing content of back-to-back
clips. As soon as the source clip's notes were edited, its content no
longer matched the copies and unloop answered "the selection is not a
looped clip" for the very loop that clip.loop had just created.

clip.loop now tags the origin and its copies with a shared `loop_id`
(new optional Clip field, serde default so old sessions load), and
unloop treats equal-length adjacent clips with the same loop_id as one
loop. The content comparison stays as a fallback for loops without a
tag. unloop with mode=flatten clears the tag so the copies become
ordinary independent clips.

Propagating edits from the source to the copies is not part of this
change.
2026-10-12 23:54:33 -06:00
Marco Arnulfo 40c5e9b42a VST3: hand host-set parameter values to the controller before saving state (fixes #257)
Plugin::set_param only queues the value for the processor, so a parameter that lives in the controller alone (no processor state) was saved with the controller's old value and came back wrong after load_state. set_param may run on the audio thread, so it now just marks the value; save_state, which already calls into the controller, pushes the marked values with setParamNormalized before taking the snapshot.
2026-10-13 07:06:22 +02:00
Fabio LussiandClaude Opus 5.5 81ec430341 fix(meter): keep K-weighting stable below ~3.4 kHz sample rates
The shelf corner (~1682 Hz) sits at or above Nyquist for rates under
~3.4 kHz. The bilinear prewarp tan() then wraps negative (unstable
poles, +750 LUFS readings, -144 integrated) or aliases. Hold the
design frequency below Nyquist (0.49 * sr, as Coeffs::design does).
Coefficients at 8 kHz and above are unchanged.

Fixes #240

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 23:45:03 +02:00
webdevtodayjason 950f3e7085 Keep clips in order after Trim to Selection 2026-10-12 16:09:01 -05:00
Sajidur RahmanandClaude Opus 5.5 7a62ab3be0 Add Clip › New MIDI Clip menu entry and command reachability test
midi.new_clip had no UI path, so an empty instrument/MIDI track could
never get a MIDI clip (#282). The menu bar is built from the catalog,
so the entry is added to menus::tree() and placed first in Clip.

The new test checks every mutating command is reachable from the GUI
(built menu tree, shortcut, or UI reference), with today's gaps listed.

Closes #282

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 02:44:59 +06:00
highperfocused d6ea8cf001 fix(ui-egui): own the test palette lock for every SoundApp lifetime
Parallel test runs could flake: theme::LIGHT_THEME is process-wide, and
the edit_window harness tests ran whole frames without holding
lock_test_palette(), so a theme test could flip the palette between a
harness test painting rows and looking them up by colour (and a harness
frame could reset it to dark mid-theme-test).

Make the test palette lock re-entrant per thread and take it inside
SoundApp::new (test builds only), so every test that builds an app owns
the palette for the app's whole lifetime. Adds a regression test that
the lock is re-entrant on the owning thread and excludes others.

Fixes #323
2026-10-12 22:43:33 +02:00
webdevtodayjason c39773b62d Keep automation thinning within its tolerance 2026-10-12 15:32:48 -05:00
webdevtodayjason 34d8488284 Keep the clip gain line where a clip is trimmed or separated 2026-10-12 15:32:40 -05:00
webdevtodayjason 8716dc9025 Add Jason Brashear to the contributor names 2026-10-12 15:32:40 -05:00
highperfocused c8021d4c90 fix(mix): mix.insert_params rejects unknown parameter names
Unknown keys in `params` were silently dropped, so a typo like `gain_db`
reported `ok: true, set: 0` — indistinguishable from a successful no-op.
The command now fails and lists the unrecognized keys (and non-numeric
values), matching how `mix.insert` already validates its params. Preset
recall in the plugin menu drops stale keys before calling the command.

Fixes #266
2026-10-12 21:41:43 +02:00
Limestudio90andClaude Opus 5.5 acaa91008c mix: a newly adopted instance replaces a matching one in its slot
When a third-party plugin was removed and re-added (same id, same channel
count) and both session updates reached the audio thread in one drain, sync
saw an unchanged slot, kept the old instance and retired the new one as an
unclaimed leftover. The host-side editor belonged to the new, retired
instance, so reopening it failed with "the plugin is gone", and the old
instance kept running with no editor.

The host only hands over an instance when it no longer tracks the one in
the slot, so an instance waiting for a slot now always replaces it (inserts
and instruments). Debug logs record instance creation and release on the
UI thread.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 19:27:12 +02:00