Commit Graph
838 Commits
Author SHA1 Message Date
Limestudio90andClaude Opus 5.5 fbee545a5e ROADMAP: no blank line inside the progress log (rebase leftover)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 11:44:51 +02:00
Limestudio90andClaude Opus 5.5 7eb643fc5e clap-host: host embedded plugin editors on Windows
Plugins that offer no floating editor (most CLAP plugins on Windows) now
get a host window of SoundCraft's: the GUI is created embedded, parented
to a top-level HWND owned by the app window, sized from get_size, resized
on request_resize (applied by the editor's idle on the main thread, then
set_size), and torn down when the user closes the window. Floating
editors work as before; other platforms still report embedded editors
as unsupported.

Docs: plugin-parity editor rows and the roadmap log.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 11:44:15 +02:00
Limestudio90andClaude Opus 5.5 927eeb58cf vst3-host: host plugin editors on Windows
Adds a Windows implementation of the editor host window: a top-level HWND
owned by the app's active window (no taskbar button), sized from the
view's rect, resized on IPlugFrame::resizeView, hidden on close and torn
down by the editor link's idle like on macOS. The main thread is the one
Rust names "main", where the app runs its message loop.

Also fixes two Windows-only build problems that kept the VST3 tests from
running there: the fixture's bus flags (the vst3 bindings use i32 enums
with MSVC) and an unused variable in a unix-only test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 11:44:07 +02:00
Brandon Thomas 857882c740 Merge main into #332 2026-10-13 05:40:16 -04:00
Brandon Thomas 92ed201515 Merge #332 2026-10-13 05:40:16 -04:00
Brandon Thomas 67f486d4c4 Merge main into #296 2026-10-13 05:34:50 -04:00
Brandon Thomas 7fb734dab8 Merge #296 2026-10-13 05:34:50 -04:00
Brandon ThomasandClaude Opus 5.5 ca1a6d443e Fix build after merging main into #306
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 05:31:48 -04:00
Brandon Thomas cbfaff70e7 Merge #306 2026-10-13 05:31:48 -04:00
Brandon Thomas 056bc288c4 Merge main into #306 2026-10-13 05:31:14 -04:00
Brandon Thomas 468125aaf4 Merge main into #209 2026-10-13 05:27:22 -04:00
Brandon Thomas 262392cd23 Merge #209 2026-10-13 05:27:22 -04:00
Brandon ThomasandClaude Opus 5.5 e927e295bb Fix build after merging main into #360
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 05:24:58 -04:00
Brandon Thomas 4ebdc35b04 Merge #360 2026-10-13 05:24:58 -04:00
Brandon Thomas 70c9bcf7dd Merge main into #360 2026-10-13 05:24:45 -04:00
Brandon Thomas 3f3f64746f Merge main into #384 2026-10-13 05:21:33 -04:00
Brandon Thomas dec75a8086 Merge #384 2026-10-13 05:21:33 -04:00
Brandon ThomasandClaude Opus 5.5 bb3a6bdd9a Fix build after merging main into #365
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 05:17:58 -04:00
Brandon Thomas cd981d723e Merge #365 2026-10-13 05:17:58 -04:00
Brandon Thomas 2bba5c334d Merge main into #365 2026-10-13 05:17:58 -04:00
NetterSilver dd3ef4b11a Docs: update the progress docs for this change 2026-10-13 11:17:57 +02:00
NetterSilver 1c2128ec37 Engine: mix.instrument takes the instrument's parameters and refuses unknown fields (#265)
mix.instrument only read `plugin` and `track` and ignored every other field, so a
synth setting written beside `plugin` (cutoff, amp_sustain, level…) came back
as success and the render never changed.

It now takes the built-in instrument's parameters in `params`, validated before
anything is changed (unknown ids and non-numbers are errors, values are
clamped into range), and refuses any other field with a message that points to
`params` and mix.instrument_param.
2026-10-13 11:17:57 +02:00
Brandon Thomas 5051b4a45f Merge main into #393 2026-10-13 05:12:31 -04:00
Brandon Thomas edcdf770b2 Merge #393 2026-10-13 05:12:31 -04:00
Brandon Thomas e32c16b82e Merge main into #367 2026-10-13 05:11:18 -04:00
Brandon Thomas 9c994f3f7b Merge #367 2026-10-13 05:11:18 -04:00
NetterSilver c4573d7fc8 Docs: update the progress docs for this change 2026-10-13 11:11:12 +02:00
NetterSilver 446a059faf Mix: delay compensation covers the master faders' inserts (#351)
The master faders process the main mix after every track and aux return has been
summed, so a lookahead insert on them (the Maximizer: 71 samples at 48 kHz)
delays the whole main mix. The mix's compensation latency, which a bounce drops
from the head of the render, left it out, so the bounce came out late by the
insert's latency (the voice was 71 samples later than in the same mix without
the Maximizer).

The latency of the master inserts is now part of the mix latency. With Delay
Compensation off nothing changes.
2026-10-13 11:11:12 +02:00
Brandon Thomas c46d6efd4c Merge #369 2026-10-13 05:08:27 -04:00
Brandon Thomas a47135b228 Merge main into #369 2026-10-13 05:08:26 -04:00
Brandon Thomas 5d98ddfa69 Merge main into #215 2026-10-13 05:03:15 -04:00
Brandon Thomas 574b3117e7 Merge #215 2026-10-13 05:03:15 -04:00
NetterSilver 3498db9e51 Docs: update the progress docs for this change 2026-10-13 11:01:34 +02:00
NetterSilver 5cd155bb64 Mix: a bus bounce compensates the aux returns onto it (#246)
render_bus dropped only the track-insert latency from a bus, but an aux that
returns onto a bus delays it by the slowest aux return as well. With Delay
Compensation on, a bounce of such a bus came out late (a 5 ms lookahead left
240 leading silent frames) and its last impulse fell outside the requested end.

The engine now knows which busses an aux returns onto. A bounce of one drops
the aux latency too, and the tracks routed straight to that bus wait for it, as
the tracks routed to the main mix already do, so the two kinds of signal on the
bus arrive together. Other busses and the main mix are unchanged.
2026-10-13 11:01:34 +02:00
Vikram Bhaskaran 456cb859b3 Restrict MIDI note insertion to the Pencil tool to prevent accidental edits.
Signed-off-by: Vikram Bhaskaran <vikram.bhaskaran@outlook.com>
2026-10-13 20:00:52 +11:00
Brandon Thomas b4f7c4af6d Merge #328 2026-10-13 04:59:31 -04:00
Brandon Thomas 0eee82a49c Merge main into #328 2026-10-13 04:59:30 -04:00
Brandon Thomas d4b7300a1e Merge main into #300 2026-10-13 04:56:48 -04:00
Brandon Thomas ae7155d95f Merge #300 2026-10-13 04:56:48 -04:00
Brandon Thomas 93181762ee Merge #368 2026-10-13 04:56:40 -04:00
Brandon ThomasandClaude Opus 5.5 3cc0dc77cb Fix build after merging main into #368
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 04:56:26 -04:00
Brandon Thomas 46399aa729 Merge main into #368 2026-10-13 04:50:04 -04:00
Brandon Thomas 8d5b38ab3a Merge pull request #406 from storytold/fix/reachability-ratchet
Fix main: drop now-reachable commands from the reachability ratchet
2026-10-13 04:49:40 -04:00
Brandon ThomasandClaude Opus 5.5 391a0aa66c Drop track.timebase and track.elastic from the unreachable-commands list
Both gained a UI path from PRs that landed today, so the reachability
ratchet from #358 now fails on main.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 04:49:31 -04:00
Brandon ThomasandClaude Opus 5.5 3d1a30b61d Audio device: keep the new choice only once the devices reopen with it
ui.audio_device and Playback Engine › Apply wrote ui.audio before
apply_audio_config could refuse (while recording), so the saved choice no
longer matched the open device. apply_audio_config now takes the new
configuration and stores it only after the refusal check. Adds a test for
ui.audio_device: no-op query, a bad rate, refusal while recording, and an
applied change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 04:43:55 -04:00
Brandon Thomas 5495378d7a Merge pull request #309 from isaac-levine/mcp-automation-roots
MCP: confine file access with --automation-read-root and --automation-write-root
2026-10-13 04:43:44 -04:00
Brandon Thomas 9c7e5018b3 Merge pull request #333 from grovebit/strip-silence-long
Stop Strip Silence deleting clips late in long selections
2026-10-13 04:43:41 -04:00
Brandon Thomas 849d1a6b07 Merge pull request #331 from grovebit/corrupt-audio
Refuse corrupt audio files instead of crashing
2026-10-13 04:43:37 -04:00
Brandon Thomas 663ccd0004 Merge pull request #330 from grovebit/new-track-button
Add tracks from the Tracks list and the empty space below the tracks
2026-10-13 04:43:34 -04:00
Brandon Thomas 061c238e68 Merge pull request #329 from grovebit/record-unarmed
Say at the Record button why Record did nothing
2026-10-13 04:43:30 -04:00