sequencer play fix.

This commit is contained in:
Johannes Findeisen 2026-11-06 22:00:35 +01:00
commit d6ded83beb
16 changed files with 372 additions and 16 deletions

View file

@ -12,9 +12,12 @@ Creation adds an instrument-to-output route if no instrument exists. Existing
instruments retain their routes; use Modular Graph to connect them as needed.
Scheduled MIDI clips now apply their track mix/automation before summing to
paired stereo instrument buffers; live input stays centered and unassigned. No
hardware ports are connected automatically. Connect a MIDI source to the
backend's `midi_in` JACK port, and route audio output explicitly to hear it
while Play is running.
hardware ports are needed for built-in song playback. Preferences can restore
selected MIDI routes on Play/Record; disconnected devices are skipped with a
warning and their names remain saved for the next start. See
[MIDI device preferences](MIDI_WORKFLOWS.md). You can also connect a MIDI source
to the backend's `midi_in` JACK port manually. Route audio output explicitly to
hear it while Play is running.
The piano roll shows all 128 pitches and edits clip-source time. Click blank
space to draw a one-beat note (velocity 100, filtered channel or channel 0);

View file

@ -50,8 +50,11 @@ ports are visible only when the host exposes them through its MIDI bridge.
Input channel `-1` accepts all channels; `0..15` selects MIDI channel 1..16.
Output channel `-1` preserves note channels; `0..15` forces a channel. Thru
defaults off. Apply saves these choices; the next Play/Record restores the
selected routes. A missing port rejects that start and stops the backend,
preserving the saved choice for retry. Reconnect audio after server loss, then
available selected routes. Missing ports produce a nonblocking warning; playback
continues with built-in instruments and audio clips. Saved device choices remain
unchanged and are checked again on every start, including Record. An available
counterpart still connects. Backend activation and other routing errors remain
errors. Reconnect audio after server loss, then
retry Play. Defaults also apply when playback resumes after a loop edit. MIDI
input/thru currently requires active transport. Existing editing and
project_defaults tabs contain note length, velocity, channel, filters and

View file

@ -3705,6 +3705,40 @@ is unaffected.
---
## Phase 112 — Playback without production MIDI devices
### Tasks and acceptance criteria
- [x] Reproduce the playback failure caused by disconnected saved MIDI devices.
- [x] Skip unavailable MIDI input/output routes in the GUI without changing saved
preferences; connect available counterparts and retry devices on each start.
- [x] Show a nonblocking warning while allowing built-in instruments and audio
playback. Preserve genuine enumeration, activation and routing failures.
- [x] Add a self-contained four-bar `examples/projects/playback-test.xtc` song.
- [x] Cover absent input/output/both, returning devices, retained preferences and
real backend failures in the fake-backend GUI regression.
- [x] Verify the example offline and test real Play/Stop/Space, playhead movement
and finite nonzero stereo output through a private JACK software probe.
- [x] Update MIDI/preferences help, example and integration-test documentation.
### Implementation status
Implemented on 2026-11-06. The saved-device failure was reproduced with the live
GUI test before the fix. GUI starts now enumerate optional MIDI routes before
calling the strict backend start API. Missing devices warn without preventing
playback; the C backend API retains its strict routing contract. No settings
format or audio callback changes are required. The example uses only a built-in
sine instrument, needs no external files or plugins, and renders eight seconds
at 120 BPM. Audio outputs still require normal JACK routing to hear speakers.
The live regression connects only to a private software probe and uses temporary
preferences; no physical listening/hardware qualification is claimed.
Validation: the warning-enabled CMake build and all 57 default CTests passed,
including offline example rendering and GUI MIDI-device regressions. The live
Play/Stop/Space/stereo check also passed. See the integration-test guide for commands.
---
## Recommended Execution Order
Reorder the phases when the audit reveals a blocking dependency. Do not mark a