Skip to content

Develop - #15

Merged
ruguevara merged 16 commits into
mainfrom
develop
Jun 30, 2026
Merged

Develop#15
ruguevara merged 16 commits into
mainfrom
develop

Conversation

@ruguevara

Copy link
Copy Markdown
Contributor

ruguevara and others added 16 commits March 6, 2026 15:26
PSG frames only mask registers that changed, so after a previous playback
the AY chip inherited stale register values when the playhead was
repositioned. Force all masks on for frame 0 in exportToPlaybackMidiSequence
so playback always starts from a complete, deterministic AY register state.

Add PsgListInitState test covering the full-snapshot emission and value.
Commit 19eac58 removed the version-header dependency from uZXTests, which
broke clean CI builds: AboutDialog.cpp (compiled into motool_common) includes
the generated version.h, but nothing ensured it was generated first, giving
'version.h: No such file or directory' on all three platforms.

Attach generate_version_header to motool_common instead of the individual app
targets — that covers every consumer (apps + tests) since AboutDialog.cpp
lives in the shared library.
The build matrix hardcoded --parallel 3, leaving cores idle on the 4-core
Linux/Windows runners and slowing every CI build. Pass --parallel with no
count (matrix.parallel: 0 -> empty) so CMake uses all cores; same for the
release jobs.
Unbounded --parallel OOM-killed the 16 GB ubuntu-24.04 runner (SIGTERM/143)
when compiling memory-heavy JUCE/Tracktion translation units in parallel.
Revert to --parallel 3, the previously-proven stable value, on both the test
matrix and the release jobs.
Fixed bug with playhead in uZX Studio (not in uZX Player) — root cause: failed audio device freezes audible time; now detected with an error alert + Audio Settings
On macOS, selecting an input device that differs from the output device makes
CoreAudio run them as an aggregate that never drives the audio graph, so the
audible time stays frozen and the transport keeps snapping the playhead back to
a stale position. The playhead appears stuck and unrepositionable. Player was
unaffected only because it depends on the device config, not the controller.

Prevent the unplayable configuration instead of working around the symptom:

- AudioSettingsComponent: wrap the JUCE device selector, reject a separate input
  device (input must be none or equal to the output device), reverting to the
  last valid setup with an explanatory alert. Auto-fit the dialog height to the
  selector content (width pinned to avoid the selector collapsing it).
- sanitizeAudioInputDevice(): drop a saved mismatched input at startup.
- Play guard (ensureAudioReadyForPlayback) as a backstop for stale setups.
- Route the Footer audio button through ExtUIBehaviour::showSettingsScreen so all
  entry points share the validation.

Forcing input channels on instead triggers a per-block engine assertion in
tracktion_WaveInputDevice, so input on a split device is disallowed outright.
Bumps the tracktion_engine submodule from c82ecb3b to c8a601ad. Builds clean.
@ruguevara
ruguevara merged commit 2adb2bf into main Jun 30, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant