Conversation
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.
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fix PSG initial state at t=0: emit full register snapshot on first frame
+minor configs and docs updates