Skip to content

Use Bungee by default and remove per-deck engine selectors - #24

Draft
0cwa wants to merge 52 commits into
mixxx/mainfrom
pr/bungee-default-no-per-deck-selector
Draft

Use Bungee by default and remove per-deck engine selectors#24
0cwa wants to merge 52 commits into
mixxx/mainfrom
pr/bungee-default-no-per-deck-selector

Conversation

@0cwa

@0cwa 0cwa commented Aug 19, 2026

Copy link
Copy Markdown
Owner

Summary

This focused PR is based on the Bungee/SignalSmith integration from PR20 and targets 0cwa/mixxx:mixxx/main.

  • Keeps Bungee as the default keylock/pitch-bending engine when it is available.
  • Removes the per-deck sound-engine selectors and their control, settings-migration, legacy-dialog, and QML plumbing.
  • Retains one global sound-engine selector and preserves the existing Bungee/SignalSmith options and sound-preference behavior.
  • Preserves explicit existing [App] keylock_engine settings while seeding the global default for new profiles.

The selector-bearing implementation is preserved separately on feature/per-deck-engine-selector.

Local validation

Built in the mixxx-build distrobox:

cmake --build build --target mixxx-test --parallel 2

Focused test run:

./build/mixxx-test --gtest_filter='SettingsManagerTest.*:EngineMixerTestSuite/EngineMixerTest.*:EngineBufferTest.*:EngineBufferAlignmentTest.*' --gtest_color=no

Result: 23 tests ran, 22 passed, and 1 trace test was intentionally skipped because it requires MIXXX_ENGINE_POSITION_TRACE_DIR.

git diff --check passed. Pre-existing local changes to AGENTS.md and untracked src/test/echoreverbchain_test.cpp were excluded.

acolombier and others added 30 commits January 25, 2026 21:32
Add the Bungee scaler implementation and wire it into Mixxx's keylock engine path without carrying vendored Bungee source.
Add regression coverage for Bungee keylock scaler selection and buffer-window accounting behavior.
Resolve Bungee through package, vcpkg, or module discovery and normalize every provider to the Bungee::Bungee target.
Add the pinned ExternalProject fallback and permanent Bungee/pffft patch homes so non-vcpkg builds do not depend on the temporary overlay.
Default Bungee on, seed preference defaults, and keep Dual-threaded Stereo UI state consistent with the selected keylock engine.
Document the cleanup point in the clean stack: this branch was built without tracking lib/bungee source, and dependency paths now resolve through package, vcpkg, module, or source-fetch providers.
Add Flatpak Eigen3, pffft, and Bungee modules before Mixxx and point Bungee patches at the permanent cmake/patches/bungee home.
Add the Bungee ASan workflow, dependency path filters, sanitizer source-fetch environment, and build workflow coverage.
Document Bungee build modes, dependency fallback prerequisites, Flatpak/CI notes, and the runtime invariants maintainers need for validation.
0cwa added 16 commits July 4, 2026 18:09
Extend EngineBufferAlignmentTest with an opt-in CommonScalerPositionTrace scenario for every available keylock engine and both unity and stretched forward playback. Capture per-callback play positions, read-ahead ranges, effective rate, scaler visual offsets, visual-play predictions, marker data, and output finiteness in an atomically written TSV trace. Add the focused friend declaration needed by the test to inspect the selected scaler and keylock state. Keep the trace disabled unless MIXXX_ENGINE_POSITION_TRACE_DIR is set and document its forward-only, synthetic-timing limitations.
Make the alignment test warning-clean across the CI toolchains by guarding optional keylock marker thresholds, replacing the infinity initializer with a finite sentinel, and making size_t-to-int conversions explicit. Update the SoundTouch 2.4.0 Flatpak archive checksum to the hash of the current Codeberg download, matching the artifact observed in CI.
The bungee alignment change introduced a lower-bound clamp on visual play positions. That erased negative preroll positions used by EngineSync phase matching and caused BeatDistanceBeforeStart and BeatContextRounding failures across CI platforms.

Retain the upper track-end cap when converting absolute play positions to fractional positions, while allowing signed preroll values through. Pass the signed visual play position from updateIndicators to the conversion helper.

Validated in mixxx-build:

- Rebuilt mixxx-test successfully.

- All 61 EngineSyncTest.* tests passed.

- Visual play-position, engine-buffer-alignment, and BeatsTranslate tests passed.
Integrate upstream/main at 6d9be24 while preserving the fork's Bungee and Signalsmith engine support, signed negative-preroll EngineSync behavior, opt-in engine position tracing, and CI portability fixes.

Resolve the overlapping keylock-engine changes by adding upstream RubberBand R3 short-window support, retaining the fork-specific scalers and signal setup, and assigning unique persisted enum values to Bungee and Signalsmith. Adopt upstream workflow updates and the SoundTouch 2.4.1 checksum.

Validation: CMake reconfiguration and the mixxx-test build started successfully in the mixxx-build distrobox. The build was intentionally interrupted by the user at approximately 36% before completion. No unresolved merge conflicts remain.
Restore the global [App],keylock_engine control while keeping per-deck keylock settings authoritative, and remove redundant per-deck configuration lookups. Update the QML sound manager proxy to save only the global selector and add migration coverage for Bungee and Signalsmith values.

Preserve flushed Bungee frames across process boundaries and extend the flush-accounting regression test. Fix the benchmark workflow indentation, trigger Bungee ASan runs for keycontrol changes, and build Eigen3 out of source in Flatpak.

Validated in mixxx-build:

- cmake --build ... --target mixxx-test --parallel 1 (100% complete).

- 81 focused tests passed; one opt-in trace test skipped.

- EngineSyncTest.*: all 61 passed.

- Exact prior CI failures SlowRubberBand, SoundTouchCrashTest, SoundTouchReverseTest, and RubberbandReverseTest: all passed.
…nerated by an AI Agent.

Fix CI formatting, Flatpak packaging, and keylock setup

Apply the complete formatter output required by the PR-range pre-commit run, including clang-format and gersemi changes across the affected C++ and CMake files. Fix nested-shell quoting in localuser.sh without suppressing ShellCheck, and correct the Bungee ASAN workflow command folding and concurrency handling.

Keep Eigen builds out of source and install its license files from the correct source-tree-relative path. Route QML keylock selection through a deferred all-deck update that applies controls and persists Channel1 through Channel4 after audio devices close. Clarify that the real-DJ prerequisite applies to pull requests targeting main while retaining human review and deliberate publish requirements.

Validation: mixxx-qml-lib, mixxx-test, and mixxx built successfully in mixxx-build; focused tests passed with one opt-in skip and three disabled tests; git diff --check and bash -n passed.

END AI AGENT DISCLAIMER: This commit message was autonomously generated by an AI Agent.
@coderabbitai

coderabbitai Bot commented Aug 19, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 23489549-2967-4c2b-96bc-2dd4bd595ba2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coveralls

coveralls commented Aug 19, 2026

Copy link
Copy Markdown

Coverage Report for CI Build 32247056446

Warning

No base build found for commit 6f83181 on mixxx/main.
Coverage changes can't be calculated without a base build.
If a base build is processing, this comment will update automatically when it completes.

Coverage: 30.563%

Details

  • Patch coverage: 187 uncovered changes across 6 files (68 of 255 lines covered, 26.67%).

Uncovered Changes

File Changed Covered %
src/library/rekordbox/rekordboxfeature.cpp 161 0 0.0%
src/preferences/dialog/dlgprefsound.cpp 9 0 0.0%
src/qml/qmlsoundmanagerproxy.cpp 8 0 0.0%
src/engine/enginebuffer.cpp 52 47 90.38%
src/engine/enginebuffer.h 2 0 0.0%
src/qml/qmllibrarytracklistmodel.cpp 2 0 0.0%
Total (10 files) 255 68 26.67%

Coverage Regressions

Requires a base build to compare against. How to fix this →


Coverage Stats

Coverage Status
Relevant Lines: 117571
Covered Lines: 35933
Line Coverage: 30.56%
Coverage Strength: 54303.39 hits per line

💛 - Coveralls

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants