Commit Graph

576 Commits

Author SHA1 Message Date
Brandon Thomas cc1bf5a62d
Merge pull request #296 from grovebit/new-midi-clip
Create MIDI clips with the Pencil, Consolidate and the MIDI Editor
2026-10-13 06:30:57 -04:00
Brandon Thomas 123ae65e2b
Merge pull request #306 from grovebit/plugin-safety
Plugin safety: read plugin state off the audio thread, keep refused settings, contain NaN plugins
2026-10-13 06:30:53 -04:00
Brandon Thomas 5b824e46c8
Merge pull request #209 from grovebit/zoom-toggle
Zoom Toggle: E zooms in on the edit selection and back out, as in Pro Tools
2026-10-13 06:30:49 -04:00
Brandon Thomas d438c753e1
Merge pull request #360 from grovebit/session-copies
Share the session with the UI instead of copying it every frame
2026-10-13 06:30:45 -04:00
Brandon Thomas 69aea8fad3
Merge pull request #384 from grovebit/track-height-drag
Track height: resize live while dragging, Pro Tools modifiers and Ctrl+Up/Down
2026-10-13 06:30:40 -04:00
Brandon Thomas 768629a8ce
Merge pull request #365 from grovebit/edit-modes
Make the Shuffle, Slip, Spot and Grid edit modes work like Pro Tools
2026-10-13 06:30:33 -04:00
Brandon Thomas a8594684a1
Merge pull request #393 from grovebit/bounce-streaming
Stream bounces to disk and keep the app responsive while bouncing
2026-10-13 06:30:29 -04:00
Brandon Thomas bbafeb85f6
Merge pull request #367 from grovebit/plugin-transport-midi
Give plugins the session's tempo and transport, and play MIDI controllers
2026-10-13 06:30:26 -04:00
Brandon Thomas 695811ad13
Merge pull request #369 from grovebit/live-take-waveform
Draw each take in the Edit window while it records
2026-10-13 06:30:22 -04:00
Brandon Thomas 82a83ae6f4
Merge pull request #215 from SteamSmith/fix/control-line-limits
control server: bound request lines and concurrent connections
2026-10-13 06:30:18 -04:00
Brandon Thomas 376e9f03ff
Merge pull request #328 from grovebit/generator-render
Signal Generator fills the selection with a new clip
2026-10-13 06:30:13 -04:00
Brandon Thomas 2a675b7ae4
Merge pull request #300 from grovebit/bounce-browse
Bounce Mix: Browse for the file, and start in the session folder
2026-10-13 06:30:09 -04:00
Brandon Thomas 65829dbb1c
Merge pull request #368 from grovebit/recording-safety
Keep takes when the input, output or disk fails, or the app crashes
2026-10-13 06:30:06 -04:00
Brandon Thomas baea184bd1 Keep one VST3 controller-sync path after merging #306's latest
The landing branch already syncs host-set values to the controller before
saving state (lock-free atomics + EditorLink::sync_param); the PR's later
ControllerPending table did the same, so keep one. Keeps the PR's new
'a loaded state replaces earlier edits' assertion, which passes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 06:26:54 -04:00
Brandon Thomas f29b4ef325 Merge #296's latest into the landing branch 2026-10-13 06:25:56 -04:00
Brandon Thomas bd5b5f17fa Merge #209's latest into the landing branch 2026-10-13 06:25:56 -04:00
Brandon Thomas 03815fbf4d Merge #360's latest into the landing branch 2026-10-13 06:25:56 -04:00
Brandon Thomas 19b1f33eb5 Merge #384's latest into the landing branch 2026-10-13 06:25:56 -04:00
Brandon Thomas 9b362a7244 Merge #365's latest into the landing branch 2026-10-13 06:25:56 -04:00
Brandon Thomas 0dc7b1ebec Merge #393's latest into the landing branch 2026-10-13 06:25:56 -04:00
Brandon Thomas 0c30ecffcc Merge #367's latest into the landing branch 2026-10-13 06:25:56 -04:00
Brandon Thomas 7a6df4cbbd Merge #306's latest into the landing branch 2026-10-13 06:25:56 -04:00
Brandon Thomas d434cf6b15 Merge #369's latest into the landing branch 2026-10-13 06:25:55 -04:00
grovebit 2895fa7dd0 Merge origin/main into plugin-transport-midi
#304's MIDI Track Offset shifts the block schedule_notes reads, which
now carries this branch's controllers too. chase_controllers takes the
same offset, so a seek chases the controller values in effect where the
offset puts the track, not at the raw transport position. New test: with
the track 0.5 s late, starting at 1.25 s chases the sustain pedal still
down (without the offset it sent the pedal-up that only plays at 1.5 s).

Also: reset() sets the chase flag beside #301's alignment flush, the
VST3 Instance keeps #400's set_normalized beside midi_mapping, and the
mix tests keep #210's Keys plugin beside this branch's Clock and Ears.
2026-10-13 11:06:09 +01:00
grovebit 221661a46a Merge origin/main into edit-modes
Timecode::to_frames takes main's i128 version (#260), which already
covers the overflow this branch guarded with saturating arithmetic.
The Spot dialog formats and parses through Session::format_position
and parse_position, so it also gets #294's feet+frames start. Nudge
keeps #363's `next` parameter beside this branch's Edit Mode, Snap to
Grid and Shuffle Lock commands. The mode tooltips use main's `fkey`.
2026-10-13 11:03:29 +01:00
grovebit 7ec362962c Merge origin/main into session-copies
Main's track rows (#382 tint, #383 headers, #359 grid over clips) take
this branch's borrowed track and shared session snapshot. The ruler
labels use main's format_position with the feet+frames start, but keep
the frame rate timebase_ruler is given, so the second timecode ruler
still shows its own rate without a session copy.
2026-10-13 11:03:01 +01:00
grovebit dd57e2a9e6 Merge origin/main into bounce-streaming
#309 confines file writes to the automation write root: make_dir,
write_path and replace_file now check every path first. This branch
bounces through Bounce, which streams to a .part file and renames it
over the target, so Bounce::new now checks both paths before it creates
the part file. That covers Bounce Mix, bus bounces and stems, which
main writes through write_file and write_path. Stems keep the 4-hour
limit and use make_dir. replace_file keeps #309's checks in front of
this branch's replace_with. automation_roots' bounce cases pass.
2026-10-13 11:01:51 +01:00
grovebit 776a7af06c Merge origin/main into plugin-safety
#400 (fixes #257) made Vst3Plugin::save_state tell the edit controller
the values the host set before taking the snapshot. This branch reads
plugin state on the UI thread through EditorLink instead, and removes
Vst3Plugin::save_state, so keeping its side of that conflict would have
dropped the fix.

The values now wait in a ControllerPending table shared by the instance
and its EditorLink: one AtomicU64 slot per parameter, which set_param
fills on the audio thread without locking or allocating.
EditorLink::save_state sends the waiting values with setParamNormalized
under its lock, before it reads the controller's state. A state load
clears them, as #400's refresh did. Instance::set_normalized, which only
the old save_state used, is gone. #400's round-trip test passes, plus a
check that a loaded state replaces earlier host edits.

#327's a_new_instance_replaces_a_matching_one_in_its_slot told the two
instances apart through MixEngine::capture_states, which this branch
removes (states are read on the UI thread). The two instances now
differ in gain instead (-6 and -20 dB), and the test checks that the new
level plays and that the old instance is retired.

Also: Side::new sets #210's old_sessions field.
2026-10-13 10:58:07 +01:00
grovebit 2094c7fbd2 Merge remote-tracking branch 'origin/main' into track-height-drag
# Conflicts:
#	crates/engine/src/cmd/track.rs
#	crates/ui-egui/src/edit_window.rs
#	crates/ui-egui/src/shortcuts.rs
2026-10-13 10:56:01 +01:00
grovebit 41f6670889 Merge remote-tracking branch 'origin/main' into new-midi-clip
# Conflicts:
#	crates/engine/src/cmd/edit.rs
2026-10-13 10:51:30 +01:00
grovebit 338411b99a Merge remote-tracking branch 'origin/main' into zoom-toggle
# Conflicts:
#	crates/model/src/lib.rs
2026-10-13 10:51:29 +01:00
grovebit fd1348f1b3 Merge remote-tracking branch 'origin/main' into live-take-waveform
# Conflicts:
#	crates/ui-egui/src/edit_window.rs
2026-10-13 10:51:29 +01:00
Brandon Thomas 67f486d4c4 Merge main into #296 2026-10-13 05:34:50 -04:00
Brandon Thomas 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 Thomas 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 Thomas 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
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