[GSoC] CMRT 09: Library: Add CMRT data overlay ("Use CMRT Data") - #16764
Draft
Swarnadip-Kar wants to merge 104 commits into
Draft
[GSoC] CMRT 09: Library: Add CMRT data overlay ("Use CMRT Data")#16764Swarnadip-Kar wants to merge 104 commits into
Swarnadip-Kar wants to merge 104 commits into
Conversation
Adds schema revision 41 to extend the library table with MusicBrainz and AcoustID metadata fields required for Chromaprint-based lookup workflows. New columns: - musicbrainz_recording_id - musicbrainz_release_id - musicbrainz_track_id - musicbrainz_artist_id - acoustid_id - acoustid_lookup_at - acoustid_lookup_status Also adds indexes for MusicBrainz and AcoustID lookup paths. The revision is backwards-compatible and does not modify existing user data.
Adds schema revision 42 extending track_analysis with a TEXT payload column intended for small metadata blobs such as audio quality metrics and Chromaprint version metadata. Raw fingerprint arrays are intentionally not stored in the database. Also adds a composite lookup index on (track_id, type).
Adds schema revision 43 introducing database tables for Chromaprint fingerprint grouping, CMRT membership, AcoustID queue management, and AcoustID response caching. New tables: - fingerprint_metadata - cmrt_groups - cmrt_members - acoustid_queue - acoustid_cache Design notes: - fingerprint_hash is a non-unique SimHash pre-filter - chroma_sha256 is used as the canonical integrity key - raw fingerprint arrays are not stored in SQLite - ON DELETE CASCADE is intentionally omitted Also adds supporting indexes and bumps kRequiredSchemaVersion from 42 to 43.
This commit implements reading, writing, and deleting `.chroma` binary files directly to disk, avoiding BLOBs in the SQLite database. It also wires TrackFingerprintDao into the broader DAO ecosystem and adds file cleanup cascades into the central track purging logic. Changes: - trackfingerprintdao.h/cpp: Accept UserSettingsPointer to manage paths privately in ~/.mixxx/fingerprints/ and add save/load/delete. saveChromaFile uses a write-temp-then-rename pattern. - trackdao.h/cpp: Add TrackFingerprintDao dependency and loop over purged tracks in onPurgingTracks() to call deleteChromaFile(). - trackcollection.cpp: Initialize m_trackFingerprintDao with pConfig and pass to m_trackDao. - libraryscanner.h/cpp: Add TrackFingerprintDao member to satisfy the updated TrackDAO constructor dependency during background scans.
Swarnadip-Kar
force-pushed
the
pr/cmrt-phase2-canonical-overlay
branch
from
August 9, 2026 13:19
176f1e4 to
34de2b3
Compare
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.
Lets a CMRT member track load its canonical track's beatgrid and cues in
place of its own -- without touching its own stored data, so unchecking
the box restores exactly what was there before, and without touching the
audio file at all. Toggled per-track via a library checkbox column.
This version puts the redirect inside Track's own mutators, so every
existing caller (CueControl included) is redirected transparently with
zero changes to any of them.
Changes
(getCmrtMemberByTrackId(), updateMemberUseCmrtData()).
CASE-gated virtual-column pattern the other CMRT columns already use).
cues/beats for a shifted, resampled view of its canonical track's
data. Handles cross-sample-rate transfers correctly by reprojecting
every beat marker and cue position through seconds (the one
sample-rate-independent common unit) rather than a raw frame-offset
add.
per-Cue updated() handler, so edits made while the overlay is active
land on the canonical track, not the local stashed copy.
exposes apply/restore entry points for the checkbox's live-toggle
case.
canonical re-election, so a stale TrackPointer doesn't linger.
Notes for reviewers
CMRT 07 (inverted offset sign in replaceCanonical() and in the
re-election loop, found while building this feature) are folded back
into their originating commits in CMRT 07 rather than left here as
separate patches.
Depends on: [GSoC] CMRT 08: Library: Add CMRT track name column (#16763)