Commit Graph
750 Commits
Author SHA1 Message Date
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
Brandon Thomas 50b0f68363 Merge pull request #320 from grovebit/range-shortcuts
Make the Zoom Preset, Waveform Zoom and Clip Rating keys work; add Commands Focus 1–5 and N
2026-10-13 04:43:26 -04:00
Brandon Thomas 6c836b4389 Merge pull request #308 from grovebit/automation-overwrite
Automation passes replace the automation they play over, in one undo step
2026-10-13 04:43:21 -04:00
Brandon Thomas ed42ac49f9 Merge pull request #299 from grovebit/marker-rename
Rename a marker by double-clicking it in the ruler
2026-10-13 04:43:16 -04:00
Brandon Thomas 1831b4173a Merge pull request #298 from grovebit/tempo-drag
Drag or type the tempo in the toolbar
2026-10-13 04:43:12 -04:00
Brandon Thomas 116ccfac5b Merge pull request #297 from grovebit/track-list-reorder
Reorder tracks by dragging them in the Tracks list
2026-10-13 04:43:05 -04:00
Brandon Thomas 0ef67b795b Merge pull request #210 from grovebit/realtime-safety
Stop allocating and freeing memory on the audio thread
2026-10-13 04:43:00 -04:00
Brandon Thomas b764e299bc Merge pull request #326 from grovebit/long-renders
Refuse renders too long to finish instead of cutting the audio short
2026-10-13 04:42:56 -04:00
Brandon Thomas 3d5b4dec8d Merge pull request #389 from grovebit/tab-focus
Keep shortcuts working after Tab
2026-10-13 04:42:51 -04:00
Brandon Thomas b81bd5e064 Merge pull request #361 from grovebit/track-name-menu
Right-click a track's name for the track menu, in Edit and Mix
2026-10-13 04:42:46 -04:00
Brandon Thomas 007e6ab78f Merge pull request #359 from grovebit/grid-over-clips
Draw grid lines over clips in the Edit window
2026-10-13 04:42:42 -04:00
Brandon Thomas f08581b545 Merge pull request #378 from grovebit/tracks-scroll-bar
Mark the Tracks panel's edge with a scroll bar
2026-10-13 04:42:38 -04:00
Brandon Thomas e5ca24cc3e Merge pull request #397 from grovebit/mix-narrow-headers
Fit the section names in narrow Mix strips
2026-10-13 04:42:33 -04:00
Brandon Thomas 7676de2749 Merge pull request #383 from grovebit/pt-track-headers
Lay out Edit window tracks and plugin slots like Pro Tools
2026-10-13 04:42:30 -04:00
Brandon Thomas 7347e98e79 Merge pull request #363 from grovebit/more-shortcuts
Pro Tools keys for nudging, Grid and Nudge values, playlists and windows
2026-10-13 04:42:25 -04:00
Brandon ThomasandClaude Opus 5.5 33a6c3dfbc Test Mix in a separate window: the toggle and closing it
window.mix_separate toggles (and takes a value), Toggle Mix/Edit keeps Edit
in the main window while Mix is separate, a few frames draw both, and
closing the Mix window brings Mix back into the main one. The close handling
moves into mix_window::separate_closed so the test can reach it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 04:38:59 -04:00
Brandon ThomasandClaude Opus 5.5 74b3278a19 control server: cap request lines at about 86 MiB, not 256 MiB
256 MiB per line times 16 connections let a peer make the app buffer about
4 GiB. 16 MiB would break a legitimate request: mix.insert_state carries a
plugin's state as base64 inline, and the engine accepts states of up to
b64::MAX_DECODED_BYTES (64 MiB), about 85.3 MiB of base64. Nothing else sent
to the app is that large (screenshots are replies, which this doesn't bound).
So the cap is that base64 length plus 1 MiB for the JSON around it, derived
from the same constant so the two stay in step; a compile-time check keeps it
under 96 MiB, about 1.5 GiB across all 16 connections.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 04:37:04 -04:00
Brandon ThomasandClaude Opus 5.5 41c8561d51 Signal Generator refuses a selection longer than one render
It cut the new clip at MAX_RENDER_SAMPLES / channels without a word, after
allocating up to 2 GiB for it. Refuse such a selection up front, as #326
does for other renders, before anything is generated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 04:33:35 -04:00
Brandon Thomas c7a4c544c0 Merge pull request #261 from Silvertree2010/fix/cli-convert-validation
Reject invalid --rate and --bit-depth in convert (#256)
2026-10-13 04:33:02 -04:00
Brandon Thomas 16335b8259 Merge pull request #259 from Silvertree2010/fix/bar-start-tick-overflow
Saturate the bar offset for bars before 1 (#249)
2026-10-13 04:32:58 -04:00
Brandon Thomas bdff15defb Merge pull request #387 from itrycodinganditsbad/fix-250
Keep later meter changes on their bars when an earlier meter is edited
2026-10-13 04:32:53 -04:00
Brandon Thomas aa91e47073 Merge pull request #303 from marcoarnulfo/fix/restore-last-selection
Restore Last Selection brings back the previous selection
2026-10-13 04:32:49 -04:00
Brandon Thomas 3b7415db90 Merge pull request #291 from marcoarnulfo/fix/tempo-constant-range
fix(event): Constant tempo applies only over its range (#238)
2026-10-13 04:32:45 -04:00
Brandon ThomasandClaude Opus 5.5 f4460e1ec7 Merge refs/pr/326 (refuse over-long renders) into fix328
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 04:31:59 -04:00
Brandon ThomasandClaude Opus 5.5 285d9fecd5 Bounce Mix: a session path without a folder starts in the default one
A relative session path has an empty parent, which made the default
"/<name> Bounce.wav". Ignore an empty parent so it falls back to the
default folder, as for a session never saved.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 04:31:47 -04:00
Brandon ThomasandClaude Opus 5.5 8222048c10 Pass the Feet+Frames start to parse_position in the bar-offset test (after #294)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 04:30:30 -04:00
Brandon Thomas 7c061de737 Merge main into #261
# Conflicts:
#	ROADMAP.md
2026-10-13 04:30:18 -04:00
Brandon Thomas f4233dc8f7 Merge main into #259
# Conflicts:
#	ROADMAP.md
#	contributors/people.toml
2026-10-13 04:30:18 -04:00
Brandon Thomas ba4c234344 Merge main into #387
# Conflicts:
#	crates/engine/src/cmd/event.rs
2026-10-13 04:30:17 -04:00
Brandon Thomas 0f6bd8a573 Merge main into #303
# Conflicts:
#	crates/engine/src/cmd/edit.rs
2026-10-13 04:30:17 -04:00
Brandon Thomas 52294bd4a3 Merge main into #291
# Conflicts:
#	crates/engine/src/cmd/event.rs
2026-10-13 04:30:17 -04:00
Brandon Thomas 12d9f4dde6 Merge pull request #260 from Silvertree2010/fix/timecode-overflow
Compute timecode frame counts in i128 and clamp (#248)
2026-10-13 04:29:45 -04:00
Brandon Thomas 6dfa00590b Merge pull request #304 from marcoarnulfo/fix/midi-track-offsets
Apply MIDI track offsets when scheduling notes
2026-10-13 04:29:40 -04:00
Brandon Thomas 6bab8365e6 Merge pull request #289 from marcoarnulfo/fix/clear-trim-automation
fix(track): Clear Trim Automation removes the trim lane (#233)
2026-10-13 04:29:36 -04:00
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