diff --git a/src/distance/mod.rs b/src/distance/mod.rs index 522d357..feb4fe9 100644 --- a/src/distance/mod.rs +++ b/src/distance/mod.rs @@ -31,10 +31,10 @@ pub struct Distance(f64); impl Distance { /// Minimum distance (representing equality). - const MIN: Distance = Distance(0.0); + pub const MIN: Distance = Distance(0.0); /// Maximum distance. - const MAX: Distance = Distance(1.0); + pub const MAX: Distance = Distance(1.0); /// Return `true` if the distance is zero. pub const fn is_equality(&self) -> bool { diff --git a/src/distance/string.rs b/src/distance/string.rs index dbc01fd..21c9e97 100644 --- a/src/distance/string.rs +++ b/src/distance/string.rs @@ -49,9 +49,16 @@ pub fn between(lhs: &str, rhs: &str) -> Distance { let lhs = normalize(lhs); let rhs = normalize(rhs); - let levenshtein_distance = levenshtein(&lhs, &rhs); let max_possible_distance = cmp::max(lhs.len(), rhs.len()); + // Special case: If both strings are empty after normalization, then the strings should be + // considered equal and we can exit early. Otherwise we would divide by zero later on. + if max_possible_distance == 0 { + return Distance::MIN; + } + + let levenshtein_distance = levenshtein(&lhs, &rhs); + // FIXME: It's extremely unlikely, but this conversion to f64 is fallible. Hence, it should use // f64::try_from(usize) instead, but unfortunately that doesn't exist. Distance::from(levenshtein_distance as f64 / max_possible_distance as f64) diff --git a/src/release_candidate.rs b/src/release_candidate.rs index c3fa7d4..933c359 100644 --- a/src/release_candidate.rs +++ b/src/release_candidate.rs @@ -136,3 +136,41 @@ impl From>> for ReleaseCandidateCollecti Self { candidates } } } + +#[cfg(test)] +mod tests { + use crate::{ + distance::Distance, + release_candidate::{ReleaseCandidate, ReleaseCandidateCollection}, + util::FakeRelease, + Config, + }; + + const RELEASE_DATA: &[u8] = include_bytes!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/tests/data/debug/tuxedo/release.json" + )); + const RELEASE_CANDIDATE_0_DATA: &[u8] = include_bytes!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/tests/data/debug/tuxedo/candidate_0.json" + )); + + #[test] + fn test_track_assignment_exact() { + let release: FakeRelease = serde_json::from_slice(RELEASE_DATA).unwrap(); + let candidate_0: FakeRelease = serde_json::from_slice(RELEASE_CANDIDATE_0_DATA).unwrap(); + + let config = Config::default(); + let candidates = ReleaseCandidateCollection::from( + [candidate_0] + .into_iter() + .map(|candidate| ReleaseCandidate::with_base_release(candidate, &release, &config)) + .collect::>(), + ); + let distances = candidates + .iter() + .map(|candidate| candidate.similarity().total_distance(&config)) + .collect::>(); + assert_eq!(distances, [Distance::MIN]); + } +} diff --git a/src/util/mod.rs b/src/util/mod.rs index dbc6b0b..e7c70e2 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -16,7 +16,7 @@ mod time; pub use fs::{move_file, walk_dir}; pub use keyed_binheap::KeyedBinaryHeap; -#[cfg(feature = "dev")] +#[cfg(any(test, feature = "dev"))] pub use testing::FakeRelease; #[cfg(test)] pub use testing::FakeTrack; diff --git a/tests/data/debug/tuxedo/candidate_0.json b/tests/data/debug/tuxedo/candidate_0.json new file mode 100644 index 0000000..fe460ea --- /dev/null +++ b/tests/data/debug/tuxedo/candidate_0.json @@ -0,0 +1,816 @@ +{ + "release_title": "Tuxedo", + "release_artist": "Tuxedo", + "release_artist_sort_order": "Tuxedo", + "release_sort_order": null, + "asin": null, + "barcode": "", + "catalog_number": "STH2360", + "compilation": null, + "grouping": null, + "musicbrainz_release_artist_id": "fa5c2aed-38ae-4e32-b3a1-f50dac411b11", + "musicbrainz_release_group_id": "3c4fb5d7-1561-425b-8b3d-c3b394145902", + "musicbrainz_release_id": "385d5a1f-f616-4c5a-a031-2250358bf99b", + "record_label": "Stones Throw Records", + "release_country": "XW", + "release_date": "2015-03-03", + "release_year": "2015", + "release_status": "official", + "release_type": "album", + "script": "Latn", + "total_discs": "1", + "replay_gain_album_gain_analyzed": null, + "replay_gain_album_peak_analyzed": null, + "media": [ + { + "disc_number": 1, + "media_title": "", + "media_format": "Digital Media", + "musicbrainz_disc_id": null, + "media_tracks": [ + { + "acoustid": null, + "acoustid_fingerprint": null, + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "602d6385-1178-469f-ad59-3acd5ac64849", + "musicbrainz_track_id": "54b4ac72-9520-44e2-bf6b-051365b56b58", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": [], + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": null, + "replay_gain_album_peak": null, + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": null, + "replay_gain_track_peak": null, + "replay_gain_track_range": null, + "track_number": "1", + "track_title": "Lost Lover", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 213, + 849000000 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": null, + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "df5143f6-8afb-4094-ae43-6eca92504788", + "musicbrainz_track_id": "089b904a-c53a-4503-83c9-75fdc7e07cf8", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": [], + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": null, + "replay_gain_album_peak": null, + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": null, + "replay_gain_track_peak": null, + "replay_gain_track_range": null, + "track_number": "2", + "track_title": "R U Ready", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 221, + 553000000 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": null, + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "d9d6429e-844c-442d-9b5a-2d47dfe2b83d", + "musicbrainz_track_id": "df6c6371-7510-433b-b0f0-039aa4b95166", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": [], + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": null, + "replay_gain_album_peak": null, + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": null, + "replay_gain_track_peak": null, + "replay_gain_track_range": null, + "track_number": "3", + "track_title": "Watch the Dance", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 278, + 184000000 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": null, + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "0b3ac902-1f7b-46c3-af99-d440d625df1e", + "musicbrainz_track_id": "2d9f35db-cc9f-4fdd-b609-a0bf875a316f", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": [], + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": null, + "replay_gain_album_peak": null, + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": null, + "replay_gain_track_peak": null, + "replay_gain_track_range": null, + "track_number": "4", + "track_title": "So Good", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 220, + 332000000 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": null, + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "02cbd18c-3475-4740-a81d-4728bbdbc643", + "musicbrainz_track_id": "b7594a96-f9f2-4ba1-b238-598080d687c8", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": [], + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": null, + "replay_gain_album_peak": null, + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": null, + "replay_gain_track_peak": null, + "replay_gain_track_range": null, + "track_number": "5", + "track_title": "Two Wrongs", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 234, + 0 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": null, + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "e31f0c09-a575-4ef1-a747-1cb73e235022", + "musicbrainz_track_id": "b9a677db-1151-4ab6-b64a-983c9937c308", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": [], + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": null, + "replay_gain_album_peak": null, + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": null, + "replay_gain_track_peak": null, + "replay_gain_track_range": null, + "track_number": "6", + "track_title": "Tuxedo Groove", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 156, + 574000000 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": null, + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "2b65ab7f-e233-4a19-8ad2-7c7c95fade70", + "musicbrainz_track_id": "11205981-3a3c-4c01-8373-5f4362a09b09", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": [], + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": null, + "replay_gain_album_peak": null, + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": null, + "replay_gain_track_peak": null, + "replay_gain_track_range": null, + "track_number": "7", + "track_title": "I Got U", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 215, + 513000000 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": null, + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "ff683a7e-54b1-4257-96bb-b51526a0b884", + "musicbrainz_track_id": "f1986f4c-0396-474f-b6c1-a07a0126f647", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": [], + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": null, + "replay_gain_album_peak": null, + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": null, + "replay_gain_track_peak": null, + "replay_gain_track_range": null, + "track_number": "8", + "track_title": "The Right Time", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 246, + 800000000 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": null, + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "b6a2be0f-bb39-403d-b496-89fa7555ac47", + "musicbrainz_track_id": "7253e737-7fd8-4944-b437-e0b37271f8df", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": [], + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": null, + "replay_gain_album_peak": null, + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": null, + "replay_gain_track_peak": null, + "replay_gain_track_range": null, + "track_number": "9", + "track_title": "Roll Along", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 239, + 276000000 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": null, + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "897ce4b0-9beb-4f2c-af39-cda13e0b8673", + "musicbrainz_track_id": "2246cc28-a0dc-4cea-87c2-902a64b9f92f", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": [], + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": null, + "replay_gain_album_peak": null, + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": null, + "replay_gain_track_peak": null, + "replay_gain_track_range": null, + "track_number": "10", + "track_title": "Get U Home", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 254, + 771000000 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": null, + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "c578013f-bdec-40ae-9337-0b7e0eaeba77", + "musicbrainz_track_id": "903b5331-240f-4c92-aaba-8b7c3f6c2421", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": [], + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": null, + "replay_gain_album_peak": null, + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": null, + "replay_gain_track_peak": null, + "replay_gain_track_range": null, + "track_number": "11", + "track_title": "Do It", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 258, + 502000000 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": null, + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "69fd15e0-ba95-4dbd-9569-cd8545d72ecf", + "musicbrainz_track_id": "784e9d02-970c-4ba5-9334-efe8fbdb242a", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-02-01", + "original_release_year": "2015", + "performers": [], + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": null, + "replay_gain_album_peak": null, + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": null, + "replay_gain_track_peak": null, + "replay_gain_track_range": null, + "track_number": "12", + "track_title": "Number One", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 252, + 663000000 + ] + } + ], + "gapless_playback": null + } + ], + "is_compilation": false +} diff --git a/tests/data/debug/tuxedo/release.json b/tests/data/debug/tuxedo/release.json new file mode 100644 index 0000000..c5add96 --- /dev/null +++ b/tests/data/debug/tuxedo/release.json @@ -0,0 +1,816 @@ +{ + "release_title": "Tuxedo", + "release_artist": "Tuxedo", + "release_artist_sort_order": "Tuxedo", + "release_sort_order": null, + "asin": null, + "barcode": "", + "catalog_number": "STH2360", + "compilation": null, + "grouping": null, + "musicbrainz_release_artist_id": "fa5c2aed-38ae-4e32-b3a1-f50dac411b11", + "musicbrainz_release_group_id": "3c4fb5d7-1561-425b-8b3d-c3b394145902", + "musicbrainz_release_id": "385d5a1f-f616-4c5a-a031-2250358bf99b", + "record_label": "Stones Throw Records", + "release_country": "XW", + "release_date": "2015-03-03", + "release_year": "2015", + "release_status": "official", + "release_type": "album", + "script": "Latn", + "total_discs": "1", + "replay_gain_album_gain_analyzed": "-10.76 dB", + "replay_gain_album_peak_analyzed": "1.000031", + "media": [ + { + "disc_number": 1, + "media_title": "", + "media_format": "Digital Media", + "musicbrainz_disc_id": null, + "media_tracks": [ + { + "acoustid": null, + "acoustid_fingerprint": "AQABz1EWiYqSRImCPzpq8XCj55ge3MrxH28f_NB7NAobHA_C4x-eJCGToTQxJfqRLc2g_MiP70KZOKHQnBqui3gS3CPS5DJ0Ic-xH31u8PlxZmj047mwVsiTFRqjZIdHwdcsuDv6RMef4oUeHhdxJ4eWSdIRPmeOcz2m5Wii7Hj2GDz6dMGUI-GJPMpxStGKRx-uoz_8LNh7_OAYhN5J6MiNp-kQkpF2bI1yQfNqnMf_4mKW431w_mjCoMR_I1-OLyue6MSNKWp4ZJFIKEeO78ITG36q4LJFXLh0OE-OvBKH5MGcD2dQex_45GgeHw-uIEdyakoxZUmSfnBV3C_SPCuqJx7kHjGD58hz6DrSn8aZHOsUNNmyFP0q_MieUEh6Hf-OO1GDZwz-4WjSHFUadgXyG_o14zuiH5-J5ieqRMmSI7SNJj90JsdvDeFhLhGF0IkifHGH8SxygR6N5sFEJRQuHROdo-GIbGIoJM1-7GlzNLuCMsd_PMcDX0L85Ejc5LiyHDNqHe_R9Ad_ZOyRfEPpXWijzeCj8UjqFmEfCs14PMLTEGcjo1F4xQilLLlx6GkQ0yYaXUflHAfvBLV1_EgimUH0KHjSKsKP-vB7PEx-HD1-I_qhH-HhkEmOPErIw_mhHSdTGbnQ8MeTZCURNrKOQ_nxP0cGT8Kj64gtWDfUE9kZ_FswJ8eRfEeYF6WeCI-S4ILzI8kt5CmNJzf-of7A5D3yHIQcK5EOPUmUI-YP_kPbD8164ivODPm4I6m4B2WWl2hO3GGJp8c_-HiaE0Ry54hkU-hxlRwef_hC9IerDpOcB8mR70OZpexQ6zieVHgeJKO27IiXwBdKvjiLZ2mI9JLB59AyHf0yfOqhfURTKsWTCM9BHeqXY8x8I1eOkuzRLMc94seVo9fRPMsRe0fiMDmeYTIuWAw_VNwCXCX-9KiW5uiY9LikTOCP8OHQPLnwFHmoFL9w3kivsNATHrnwvnDM4yEH_vgxIfSRPFmFOduEy8fRlTmsKcMv4Sij5Cuy8iV0IXZyvIvB6MuGtNNRJtEF_cwEftcQm4GfqMEvhGlQXsW35MgpwXXw5CmuB94HTlmi9Hh6RP9yaPeIMPXxCk90fMmPw1eOR0EuC0n-4AouvTjzEe7xHNdxhFo0jUepJD1-_AcTLsrRC3eJp0F-XDfCSFWhWcwRS9GFB_6IZ8VP8MevI8kl5I2S4pnU47qK82iq7KjM4Afe49uOmH6hD89JiCNzI2dG7BcuCV-Sg8lzoc-CF5L248rx40yeoD8aN8f06HCOZJyK_UlU_Gh2bZgoGvqHL48RektVND9wKjnxLHWQ50PCeB-Oi0eTikUv4Etq_A7CqJ-gtTpy6viDyi3C-NBxacg3hQRgBDGAACcMIMBAA4BbCCGhjDWIWIQUggIpAaAQQCBGAJMQAEYYYgAxYgABAAAjCANMSaIUAQhQIYAjgArXiEEEGSCAEAgAIgBRwiGDkDrEEoQUIsQABIkAAgnGSCDCAOCMZsQBAoAizDJBhDCAEIiMYUAZiZAhBAmDABEYSBAQIoAJoCACAjEGCBHAIMAAMw5ZBQAwDAFDQHEAMiCgMIJQAhAwAJHGjAKaGACEUAQEgQSYyAAAkAAEOCKMIkopgghRgBAlDRDKACEcQAIYBoATgCAEgAIAEGQAAdwoowVSogFBqJAMAOOsExYxQ4ADAhCElEPECECAI2wwIggCCBElACJSGEWIEAI5xghyCAFECnCiAMIEAAQAAgBCEhCBEAMAACQEAcQSRIhAhDCFDCBMCMAUIwQQIoEBRCDkiDOAMcuYcAIIYQEBRAgHkANCOAEMEQIQIAwBhBQlDHFCCGIIAUEhJQQgBjkgBFEEJKCYMEYIQYGTgAA", + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "602d6385-1178-469f-ad59-3acd5ac64849", + "musicbrainz_track_id": "54b4ac72-9520-44e2-bf6b-051365b56b58", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": null, + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": "-10.76 dB", + "replay_gain_album_peak": "1.000031", + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": "-10.83 dB", + "replay_gain_track_peak": "1.000031", + "replay_gain_track_range": null, + "track_number": "1", + "track_title": "Lost Lover", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 213, + 853333333 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": "AQABz6KS5EmiCc9xbHGWI5dK6EXUH28zHWGeo5dEFT_xhThpDd_hSEo0EZ-Obzzs4spKnNAJP0uPfzqeMkzhePmR8yh8HWEYh8RzXHGUwEfsHfdOPEmSFecXNPtQssXzIT8PnTpCCVY_OE6OfsMz4lxC5FpRqY4EUV9Q_cczIS_eifh0oU_hiLwQKluU4tmhpwt8XGIGkxO-43oC9bCuI36m4qoeXIok4WgmCz2HHz9yekga-ih7wm2iwIxyhCRDPDQqxxIa3bguXMGP5ooqaKJ4PBdufO2Kuh3869AkHjna53CkHF-sIO9iOCIDfQnyD94e1Drx4D_qxZrR_Aj0JwhlsoJ1oj9eVD0R5sKlZcIPbUeT4pyHn4iPMFcyotsUXITqLDWcqgyuHT-uLMV59Osg_nCOae1xKcKjh8if6fCz49lx6XgzjHHkEaePkDyL5tBxXMmD5j_yJCScNGiJj5GOj8iFrUkYQo9mPM3SIZ11_Gjmo01wdYd_7Irwi-iaE83C_Li0dHiNd8gzD70OHyV7VE4NUeNwHy-FpiLy8cMRaks0PGQYVD_CD813nEzxpcXZpEKTMEQbZc5xZilyiEWehsGlMEZzVC8-ZcIjzUlxSbIiwcepFTl05fgR5mLRI5amLcLZC5p-pKRE-OjD4zpK5kGaTEfPGKcCHaGlZkJzKcczTcQXBtePTsuI9Dk0ifqR78Fzoc-O5slwPMyFK1uOpqmFHv9wB_-RM8eZ4kIndYJ-PNxgHbXwoqkiCf214ESTDFoVfEvxD0eTzDm0R9rwEld2-JkoqL8Qpw_6noO5HM_gbQmqm3jKIJ8j6DzyRxy844nC483iBHFuHT80_vBztOHxEVe4QYtb9GM2PNM09IezjEf_4w2hqxyaLztCURSPaxmJJk-FkrmOHk2N5ke5igibXWjmDvGPX7jUzmh1DQ_hog_xcYg3foP-oBeaeEmPsCSap3iHrks6Cc144ezxLUR1If0O8ZKCO8KdpYNVHtWiRB6-ONAPI3eKngjjpEMPLbk2fEwy5M_wXah1FkjTGvUYvD_xH_fxo8eVtEK_BKjaiGjOQ37Q6_g0QXtwmF-Oa8nwXEF8_GgqHeGH6z70wy6undC0_rDyHKG-VMdpfD8aHrUu5PhSaMepC9alCtW-4YmM5uiX40knaDKD5jtOVTW-Ec1vaP6E78SPJheHrkkS4jr-DHZ1fMNzXD8e_EV_aMKZ5Yi5KDgf_MafHQ6d41GJOORx_CjXojlznMfHpNDiiehH3EtkdEbDFa9y_CF0onlGIaTE5Pgmo4qzHs16BbWO5j96NFuNJwsn-Dx-fJSHH61iDY505EGPF7q0ScVH4yeaPCnaEc0XCeHSHTeN5iVCqcclDf0BYhRBigAEADCCCEOYEBQAqBEQBBAAhBGIKIOIEoIAQhkwwEBgCGSEMCGIVMQQRRhglBCEiDEGEGBE8QYgAwxRBBBrmAFMIEIEUBIAh4AwCglKhABIAEkQIwICJA5ikkDBgEEEGyOFAMYIQRRgBFHghLDCJQIEcEZQJQBwhBIgkALGCEAAUwZABRQRAAlBLBLEAEGUcUgIQhRAhFAAhQDACgAIUkIYBQATiAhgBHFAKWEMEAAAiRQCBgBKVGGMKCEgYgg0AqABwEABCBWAAUOEZwQAoJxgCAiDFCBUCGEUEgYII4RVRBAmAAGiIcEAFoYYAY0TQBnAHDJGKCGkAAwIAYAABiAnjQCEGASUBEQpJBkREghCAAGCAAAAIog4JJ0HAgCFCGACCSAMcARRwwgwBgBLgGMIGCUMMQYQAZADIgogDDESAESEBQAAYZAAjBgFpCDEUUyIYYgIBIAVSAA", + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "df5143f6-8afb-4094-ae43-6eca92504788", + "musicbrainz_track_id": "089b904a-c53a-4503-83c9-75fdc7e07cf8", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": null, + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": "-10.76 dB", + "replay_gain_album_peak": "1.000031", + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": "-10.74 dB", + "replay_gain_track_peak": "1.000031", + "replay_gain_track_range": null, + "track_number": "2", + "track_title": "R U Ready", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 221, + 573333333 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": "AQABz0sWR_EUuCKmGx9nIU4-HOJp5IkqlGQueJl09MSeBy96ZMm0Q9055MdOC5WP7QbqIz8kh3oQ_kJT5cFToWpyPA9OmHdw6cgPXwxUSTpyHhvP4VLRbTuQHm-k2FBERjjnIB8Z8DCz4_yxpzji57CiHt8hXnqglzgw8cazQF_2oqKSD1qSPgdPHLryo8f2Cnl23Hh2_KbQh8GR6zi0b0eqHXd2nDBfBZMV_GhOZNFzyM2R61Mw9Dx8ivgR8YJW4xKPLPEV9FmMSyacTZtwKRF2NJOCsDf-Q5PwEv7x7njmIOxx-qiIh9uGsziP5iOOMzEaKkelc7jCCnn-IVlYHM0e7JIjXAebEY2NPgx-vBkevJgyJkerS3gSDWGKHtoLZ9lxmIJu-EduofkQdYrQC2YUFJN8wic-HPmR3gR-DicM57CPH3CH__iO48KHH8Z7iMdz4NCFw8fxGP6Onuh4ODv0T8BxwqGCH_XxQ-vgX7By_MeJC_7x44d_VDO03YKLHA6P9giPJofWC6now_lQK0IPV0HYoXg_QRQTCTp-WEaP0-hh6gDyC4c15ceP8Pguo8dJGPrh40Tno_CJQzyRH-aN37BwIh78wxfM43uxfxCfoZegXcKUSFeGK9lRSjoaNUX848Wro5yLj8Kr4z0ufA2RchFqfZisRDluDaKOsGocnNnxPOiVwnHATTncLbDKI9mRjVSUoZ8nnPjR_caJ5CfC48eew1zYBNUbfEUsjWj0HJpEhIerJzCVjAx6fEatHeY6oxITdLwCPzy6fkZIQuw7IuxvPDkuvEuO9_iDlixcTDf-4Ee6idAXC7klTHmPihuLjxNx5bh-9DjSfuhDnDeeCw_R57CD3THMBfovCQ4XIb-MRg2LH9fR8Ui_oJRP6EceH1cUo8-HG-FeDc-hKyjsonuF_RF-aJ8iuBuqyMfRo7lU_EK9cUJjXbhE3Ds6Ez9OHDd89A-uzAqaSzglaOHyHP-Ds0MoUkcYnA5qZcerCdr1IaQuDWaFqglK4R_xK0R9GS-Jh8efoh3xJTnyGOI4H5G6BJWfwmqu4crRUD3-ozyaJ8OPD-GhxznSkUc3G48Uo89VHF1-XBGSWTmR53Ad_MEo7Qlu_Bw-KUi1QxNCMvAV5NoeNC6L74FONN9QcT6eS2ic_ugD_WjGFr045FOOG_mFs4PeB5HkFg2XAwAgEwgQaYgVFgJrkFJICAQIAAZRwYCgwgADiIEAMUwIEo4CYwADADhhABFGUAQMUEAJDRAQgDIAADCAWMAMMggZIIAQwBGBBCGECCOkAEQ5QARgDghGiEBAECkMUYAxQYFBUgggpFAIMqCZKUIAIIgzDgAlABCXIaYEYOY5ZRgQREuBFBHUEQWQAMAwC5izRCBgGHAAOeUYIMpI5MhFyhLADBGMGCe0UcINIIZTDjDgiBBMSEKMIEJQBKBxhFBiDCDECWAUtEQBYYQxBApCDFMCEqKRMEAZAAATRADCgDRIGUYYAEQwIBhjBhDFgBVCACAQIlAwJggTUiBgiGFWGESoAJIRwAxhAEDgiEKGIEMEIQI4oQATAggBhGIKEEEQBYZAIRwRAAhIiABECSCJMAAIZYhGAHAnADKIGIEAEEQZQAwABBAE", + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "d9d6429e-844c-442d-9b5a-2d47dfe2b83d", + "musicbrainz_track_id": "df6c6371-7510-433b-b0f0-039aa4b95166", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": null, + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": "-10.76 dB", + "replay_gain_album_peak": "1.000031", + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": "-11.70 dB", + "replay_gain_track_peak": "1.000031", + "replay_gain_track_range": null, + "track_number": "3", + "track_title": "Watch the Dance", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 278, + 186666666 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": "AQABz1GWJpkaCXqGZueKNrYCOUqOO0PzViiTTMclPQnuQ24UhHmPknyQJ8mD64F2Bo3WFE9yPB_0ZU8Rviqae8aXfIiX7XgPST9oTR_xQ1UVI__h_fij48lxckO6ShyezsajC3-MZ0dzcUG4NT9iJg--zGjeo6YOPdGjQ_WDa1HQvD96PtDz4HbQLocWPcGV7Mj5JMTFzEd7NHUjfDkuGmXtIVkaH3l8HB6T4Lnwq3jwhAly3dDDeUMYXB1RJ8mNHy9i6Ui4KLI44VeC5jlRqjn2JHh4JM-OML9QSU4VPPqFH1Oeo46i5bik41dxZyX6tBTCVEyhMnmRL99xwj8uH08u7Dt6IVnyHHl8fNFxBc0T9B8-Hk_wIj_0XkMaXniiY_fgasmLdcmP_MGXHVp-HaFfhXgn4joaHpOVRTFyJTp-FXqUEmEUG2HXIV_qFZeUo2_Q9McT6ciP5tEp9MqgbhfyOXjxHt_hHU-y-LiPE8nCBX2EL0yFxlpRH2VziPkRR8M-1Bd-EUefKGieHZ-iE5-zZUSPVOmhCXlwR8eToefxRDm-kEGeZTG8rYfyC82FM0GfvdDy5MFPgUx_nIWupkcvMOlY5D_OMAqaHv2DKwh_bDm6EFfy4GeQ64EvhRPe4BmFM0O1FVOUOziSHjGT4srRy7DyOGiWiDnOJCOaIzwDHel3_D740Ci7oMmVI2d0Bh8P6UezVRx6PBXCPOvR5yil5EjzQ40W5B76FD9-XIKf41N04nO2jDimpQiTQ0fuqMaToeeDZ3lxiUtwRclypBN6Rmjyo0-MXdmTwmeQn8c3HXkY3DV02OmRX8YZRmi6ocfnIzy2GFWC5wuePEF--FI44Q2eiThTfCus3MGOpDzyFKdy9LLgPRa8JGEqdFO2oMkVhPeg50d64jdyZsaVJRCf6Hgf5GHw1iuaXwhP6D_sJDhax0hz4SmPfg9u4Tr-HT1MJZLxlB1Oa8L8I_fhQPNX5I2KKzt64sryoGIicTHWMMuFMIuPf2hyEWdiXNlj2FNy_Ph2PGH0QJ-o44dH5sgf4ZnQfENN5WhB7ajcI2OP63hyCn-GdMeT4MqI77iYpdj04SfyI3mIisqC5hpKUbEwRYlc4VR29NcQ5gz0I32PH0-LZhqP6jty7YO-4z_Cnkfj4zcaLkafHGWR8FGOUCmf4jqe48d1uPgi5cWpSBdeNcfEE2l-9IN-I290XBl64sryYHJCLsaVJQrC7MXR5CHOHF8kB3ak5PgJbsvxUMfFUsYPP0sV_M9xprA14cYFLdcRyiCDD1fyJXi-FO6y4_WHb3iUEaMZNMox6UGSH3mIisoC_xrWPBaaKFaFR9HBpBf6I9fhM-BuPFx8ONyD67j0EPpRP0eYkbhkzDxCUcwPLcg_fMeUSIpyhEyVLlDOI__xT-i25ahaUcHDhSiPxkkUAEQQAIQAYAAQgiAjEBJOAIaEAgwQJBgCBgiCEDCKIGOYYcwIYAwAhABgBABACGKQEIQYAYQgCAkiIIBAMSQAQEYa6JBBQgBhEACGEIIYIogQw4BRBACmACHIICWIAgYwIoVBDEFoAFLGOECMIgYAAwBACAgCJALAKCCQEAYQS4BixBigACDEEiIBwUwxjoAAQCgkElLKMMCEEIYwYQwAShAghBBQMAcEkggApIBRACEiQEnOCAE0pAIhIAQQAADKCKaAACAJgBpJpSRAAAhqxVGKMMCAQYYpIYAwABAANDCMAaQIIcgYCBAiQGiOgDNCOmQEQEAYIIADAAEHCEAMAEEockoIBpAEACmEmELAOKEEQ0IQZwRwCAAriFOCOMCAMIAZBokRQAJpuKFACOEgEgwxBQABhDBgHBEWAQSEAIAbqRQhBABhiALIEocMUggApwkDiBFnhAKOACIAYAglBghgBCBAjJOCIyIEUgYKBwQSBBlGCATAGAQAIwJBAxghwDgCAQ", + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "0b3ac902-1f7b-46c3-af99-d440d625df1e", + "musicbrainz_track_id": "2d9f35db-cc9f-4fdd-b609-a0bf875a316f", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": null, + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": "-10.76 dB", + "replay_gain_album_peak": "1.000031", + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": "-10.72 dB", + "replay_gain_track_peak": "1.000031", + "replay_gain_track_range": null, + "track_number": "4", + "track_title": "So Good", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 220, + 346666666 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": "AQABz0mUJUnGaISPsFWKO8K5C_Gj4iwa_oH2UDhRcxsuLkbXHDrzGfqDS05RLoFr45KCal2HXLGQ7yTOUIT-I81l4-mEkxaaZ8GJLHmWQxeuaMj3baiM9EZrQ9eOPggzfRO-4OKMruE-eJTQPjcehBZhLlEObUesR0ZTaeg95LtRND8uaBkvVC9ILVEm9MwLv_jhZ3HQh55wVLKQ3kIfHScz4pMQT5qKevAPfTvKZUkc3DQek_gDuxLyByXDD1niHH_h0IGu4zfyXOjxPziDPEUa9UJ3HX8SZmg69FrwxMef40yPpkcyJ1mOHOfB5InSoVeEZxTyNIdGDdE-VMGO__i-4X9wGmGoBBr3HC_OEz--S8hvvEu24DTCH-4m4ufwSDd6bsKpvDibosletJGOzxmadbnQ_9ByaN4CdscX3vjRPYcZLUW5QLkSD-GDZomJF_8xpVs-TLyO70c-7EoJcRdu_CrEC9eM80QP_8J1wdJ04YrG4xyLmy_8A27EgvEX_B_4GB614x6eQ0-O6lHgo9dxKscXpsKV4xusWAF_GX8cNNPmQbtVcEd6459xXDnKH1-UBRaLeNGFSGyOLyH6RLbgJsdkFV9mPEzwI22aQx9y9HnB5BklHN9S5OnxHoqCasU6DbnxTguDo_0EPxOP0KLxED8u_NDz4JHC482OH-F1-B-q9cGjF88-nBbCXMmgHfkT_OhHgjrSKocm7cgV4uJR6hQaSjryQ1cRPkazlXiIh0cTZyGHcJPwLMP14Dz84-HBHfVoQkou4kcfXNB1hNoSfMeTDX24oeGHKznaSRcolTnCQnuO5jsuHQ-JcGGUGD5-dMcXRR_yHFceNA9R3hR0_ELzqQIjHuHKUGjSSPhRP9h-nIN5I9h1NHsu5ItiHE1FH-XSDs93fCmO1NMhXVlO5EXz5ZhO4zvyKJOGK4PGHU1vxA-ui7i248qMlTuankP1GX9W3Dk-_MKTI5YS4ol4fBf65EHzF7N04r3wBHKkH6GeozmNXehTNF_RfAitKDnBKcKjD01O9Md15DryFdqRnqhPfFTxRcqHNz2eHs2HWkReBtKeI_yFH48Pajpa5ULoHc1uXD7kH_WNjsPFw8ebC0efwxw8OUefCHzwnJCySS7IdKjFoV2PxgmNy8ero888aMmTFL_AfNASF_8FUTfmiA9OaKpyiM_Ri7hQSYePMwrCKMevHteHpid6VD08fsLHpfB-Ij_solaiGLoR6koeNMfDD89y4SZ6Bs8RUoc6I2dNTLmDWhe-psOtBt2F9CzUS0SfI3icI652iJr2IfcHlIcl_kIlnSF-JIt1ZLFP4Q8eFv6QQ7mKOME4ZugvAAYEMBQAQQASAgJgmTGCACMYAQwoAgBRAABggAACCQkAA0CJAwAggASAnABEEEEEYEQQJ4RAjCCGhCBIMAOAAgIQQxxgADLFFKDMOCCAMEQQAZgAFhHiALJAAKCMYEIAI4BwQAiCBBBMECEUAQIhIAwSBlDLjFGIWGAAFAQBAAwwQgAinHEEAYoAUAQZCowBRihkFCKIAIGYYIYiLJRaAohkELEigAIEJRADpYgQQCIjiCBAMAUAEYyAQBAkABighEKKKMAAABwxoQhBDoigEJGAIQqcQgISh5AjDACEkEACOQMU4QwYpAACwDhAEHCMAAAFE0wwJCAQSBAEADAGKAMoM1IIKYgAygBliAGAKyGEUEQQAogyQkFAgEBKCQCIMNI44IwRwAgAkIDCMGGFEBIAIoQQhBmCgCKCEGQUJ9YIAAwjyCQCBGACAoAFIAIIRJgQhiAghDAGACAMIUBYoAQRhCgkDA", + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "02cbd18c-3475-4740-a81d-4728bbdbc643", + "musicbrainz_track_id": "b7594a96-f9f2-4ba1-b238-598080d687c8", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": null, + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": "-10.76 dB", + "replay_gain_album_peak": "1.000031", + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": "-10.15 dB", + "replay_gain_track_peak": "1.000031", + "replay_gain_track_range": null, + "track_number": "5", + "track_title": "Two Wrongs", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 234, + 13333333 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": "AQABz6oULUkSSRH-oaGCPnRwo0ejJjpGhLmgVXqGH2GO_kd7XDnxksN_3I2xI74YiD_OF1-P9AGcdImPSz_uo9mH76ibRIRHPsaVeJh__EHeQEf04mPW4OKNmzGuHT8ub8d1NFUuvD9-5JeU4oeWJw0RksN1_McfHH6OHHqHI_RmFQ714GicEN9Qf6oQWhkn_HhONNGNisOhF5-MdkyFnDn-Cw_T442MrXrwHD_eDn58-MOfwHEUXEeSX8jFDf_wzcLZdPCOdrmMHr4UfMlZeETyaETcHkeOQx8P_-jjQp-QK1mKH50WbLlxH96OI586JCODx8nQh_CkD3mOJrSgH3kyTPeQ7oE-4dqPPOSFB3vQWMfNFDmPnhA5pI6O8hGufkOfTWhqXBKaGpPGxRJ-9B-aKsvxDj9OJXhIH-EvaMlrPPmRazXe4sd1Bs8Q3hw8htAkfkLQHaaFqi-eoFZ2fB8Ov8aO_HjmyZCUR3hjQUa0KlEq3DMuET_SLyk0TTrRf9gm_MHrQPwFlrqG0Hh-lFaRVlFCEWpzIR21oxN_TH7gSUd_3Hh740c4Lc_wGJXK4ugveDe0L8J3ITfRWDrOo08-TDtG3oZ94h_6IF9Y9CGuSsQz-EkoONGIG5ofI9c-nE-E8oS_CLHUQpvuIv7xo3wY-Cp-DX_hV4idF5cqQk825LEafEsPR7zwZRfuxPCWHKeS45LS4yO6fcSPT8Vf9Md7NCdiUSn-Q_eE_MGHxj26B090NDGj4juDqy_Sh0i-TcKVa8E31D-e8PhRakf6FqU94UuPp4GWX0K-C-eHP8VW-_gVDR4T4aqEUuKK8EfSLeVB7Vvw4JKKZwHLNzCZof5w5UFXhoiUH4dGHu50PMd_4UoLPfhw8oXdE_0s6DpyHZ-x40v04DaxF80k7UKyJz9yxiiv4Xlx_3iS4YqM8NDaTUJ61HiOHk52HT7ao_A0VXiP43uxs0f-5NAR99je48uFj8vxB65yD283PPiiC7UScvitGLkQH61y_BvOIcy3aBl-XITO4xVCnbA6VHrRz8MPu8EVVsa-HMdh_jiNmROcNEbSNhFyGQf8JygXisIVGk0y56hdXEevwkf4VKjUXrAOrY-K9zgaNUwDPYdj5qiN-oGPVzz64Ye8Qb-PH82mG-fh4RIacsfFH0p7XNNx48xx5Fmooj98JkfJoaoOf0f74D3CpD20hyqiK-jp4v0KPOFx9vhx9iil5Mhr3DeSWenRDNeFj9mGh-jxO_gRdlkK1byQM8cTHQ16PEdoQb-RdjouChuVLJUAAwUVDBEJFAGGSQAEQ4AQoAQxAAhDABKOCWAMAEYCYpAAhCgGCGJEIKGoENYBhgxQCoGEpLEGGkKMEoQSJQQwADhCDMaCASQNUMQQwRASkChAAAKMISIQEMYAZBEzSBkApDFKKqGMAAB4R5hgxAhCiGBGSKKIAgIIBAggTDlAiBGGQQmMsQJTZYgSDDEAhJGCCUYMAEYAw5RRigDhiRSBMGWQkgAIAQBETCmCkAGACCSEIMQQL5BBygEkHEBCGYAMEYgAxQQgRECohDAMKmMIYYwAAoCAgAqhnEECAACAQMAgAwhCSjBBEGJKEYeII0QZAxDywghAAIBAGAIAAEIIS4wAhigkrGJYASIwAEUYQQDgCjBEAKGAKAqcEA4JI6wwnAFlqTLeGECsQwY6jwAgTCilAAQKoEOEEoAhBAUAABlHrADCGIAMURoRA4ARBAiElCAIKAMME4YJBABCBigsBBVAOUUYMxIYCA", + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "e31f0c09-a575-4ef1-a747-1cb73e235022", + "musicbrainz_track_id": "b9a677db-1151-4ab6-b64a-983c9937c308", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": null, + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": "-10.76 dB", + "replay_gain_album_peak": "1.000031", + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": "-7.71 dB", + "replay_gain_track_peak": "1.000031", + "replay_gain_track_range": null, + "track_number": "6", + "track_title": "Tuxedo Groove", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 156, + 586666666 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": "AQABz0kUMbmWQCP-49pioTFqKsUzXFRyKFI-mA-D-kowHK2MQ4ye4GEi4mwCfXnh8yjVZMV7I_zhY1K0RMelH3nRf_CPQs96XIfy5EGVaxmacLHw4A_MqHifEHpkwaGFx9qIDzxJaD4a58EcXNKCT8UVDg_DIxSvwJNTfBnyVceg80N_PHiOo3mWCcwv6L-EJ3iWGi8lhEmOitsrnEdoCd6D9sZ7NNVRtYHCTDlmKimh_TB39IEOzQ5HvMer48d3I82DdM_RX8X5o5kOTcfDZLlw6ZjeJBBf9MC-LHibBFWWowmdBf_xGj088nDTGFeOH2egptnBrSmeYbseXHlxCX8OH18Y4XSDZ8cPXWJcIc9g9uh17C96JU_gZzmY_kiW3EWkLh-ethL-HA1OfEdFZUdO11CpHD_aHzeeC-otWA0Re4U9PHpwvnCHUEwryD0i6vjxROCHXjmYTOoR9hDHVWieh_ihawmu6OjeJPgupD_6BT-ePMHVgXlkI86foMlxJYWe7BP842BONMFPPC80bdED6hJ68XiOyDoah8YXOEmP3xmar0L07NCXBy5-hEmaF9XDI8szoumLeXug4wtRTmTxDs2PaxqOU9CF_vCF9_ii0BBVWviRd8N1fPrgZEe73IgvYH9weoLzg_T44V0OhVKi44qHH1OXEneCO2iTqQmU40i_D3-w5wnxD41-hPpxG0_CHHoueE_wD4zELHCiUD1wBZcOjUaPBm0WS2i-C7pE3ISW7CbCHz-YnOh49GASa8WzDXkiIvlk4ca3pOgvODqL5znxCiH1QD_yRC2uBMwpnCTi5GjHQLE2NI0WhD92oeSGZKmSGU_Q7CqqI3uK_7h6RGOCE3-Mz8IPVSJaNHs6fA9-FI2yGuqHhvaKnDmaLSTxLUYOzQ1lhKG0MLiIPuIw5blw9EyKMNMGvciSPUfto9eDUwy6H5U6hFlyJM9wWgGTahc-mFELJzmRTKqO8DfM9yiVJMp0ND3KjhK-5ugHhwfJDa6Px_B1VLiyFO_R82iulugXHZI4omCjmKioXFHg5KB-9B5-InegKtKM6wij40f_4TyOIw-h5S9C6xGaaBeuqJgS9RLyo3kY1Iugj9DCSDdKX_jRL4MnP3giHd-hHT_Ccikc_bgt2FOOO8esE78Ktjush8GRTGSOXImOo29i-KxA_ThCcUepGLI5wtfxDifh7fiyBqUkpRHeE82Pfr5wprjI4y9aHrcSoykVnODPGJfx_fgPJmOPLscp5Xh24QdU9_iRJ1dwacdlNE9QK9Hx5sh3BqrIHJETO7geuMcX_Md34RwrPEd8akB9iNZeiOFh_QBigCEMEAMMOUsAQYAjBCiKABBSCIKAIIoQAQomxABIlCEIAmKMAEgA6gABQBAAAGGMAQUEIMYAowzmBAAlDEJAACGMEUoAgYQyBjDkALKYIGIscx4IQhARCBggCLBACYMEEAAAABQBSAFnDAAEEgGQQsYQY4xiBgSAgAYEWEIUAQgJQigySACBCSAAgQKBkAAawpRDCBACAECOACOEIoIxhYAASijCBACGOKAAI8oYAxQgDCKGANKAGACEQUAYQZARCDjmCCeGAcEUkMZowTCDgiJhBCDEMoMEAoAqY4wyTABDBBHESSMcAFIogQQhiCAgBCDAAGIwYYBAIAQQgBlAjZNAIEMAAEQBQwyCzBAGESACaNaVQAYJoBACAgBJhCDIWCKAQAI4ZxAg5AijlgCMIUIEIAYRQIBgAAiqAAbCIAAAFAAChJwHSlCCgGEGAAMMUAIgCYACQFCnACAO", + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "2b65ab7f-e233-4a19-8ad2-7c7c95fade70", + "musicbrainz_track_id": "11205981-3a3c-4c01-8373-5f4362a09b09", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": null, + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": "-10.76 dB", + "replay_gain_album_peak": "1.000031", + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": "-10.85 dB", + "replay_gain_track_peak": "1.000031", + "replay_gain_track_range": null, + "track_number": "7", + "track_title": "I Got U", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 215, + 533333333 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": "AQABz0s2LUmSsHgu-CwBPztCyvgSqSZ0gUnyIOxChbiCHKJTB-o7_Mh19JFG4vvAxOHx4yqaH_yLZsuPj8dL45kHG1eiI_agU0IY5UcvBd8NPkfz7Jisow8jwswio9KLPcsRH8ky1OLxZOnwo62iwkc258YzsdsQnsF5BM0RfhTKH82iSHjs4HhYC7UzBUyi7Eh-Iz_44tuLp0zhK6GEbyE4KdE5-AyCBPUPJspy_MGfB73ARAFN_TiPYi-Phy6cZUpQ8ggP8fjVZEhbZ-iT4TnRhDrC6jry46nwE81JCZOz45TxB44YHfl06JmSImfh-DiPq3iSBbuG5jp6rsh7fPWgkfgUhpiibbgYHM1z5Id_hGRuPDv0HaE3UBWD6yirg9YuxJqeINmPRk_wTEavPGgmLZmEV3qQE8kz-MFznAcZUUcfNN3x4y_6wjyYTQ3-D-ENZU_wzTryNkPj4jvxH6kjVtCPy8FrhBkzI3Q-XDz0GGGy8UIp5Thz44qI_IP2HWEqCg-NK0qOoz_cG1WTRcQsHU3y5WjH4zn-gzGFTM-F5MXJo3kWJvg-tDr8RDlyTdEgjy-m8-iTQ0sf5A9uuDmu0Qm-RJkUJEfgc8KP8xiaOqB3tMuP-0J3nGjiCfzGIfzh74Wiy8K_IYxzo1qO22icHCElHT9kjTHCPPJQSsdzxDq0vDVavrh04UxV4Sm0SwsHPwit40mUDjdj4mj-o54xqeFhRd9QbTx-4szBHK6TI1EuhD_8pegn4WgcRjn6iPiR39CjC8oqUoipLA5-opmSTESPu5OKnNGDZD8aTVm24Q19HN-xsgHTLUZD4j6e9mjyoGN0_OLwBcmsHOkkHo8UUD76zHjzolF8IbTzQm-k4yLR_Ogf6KmKXD7M5SvAOUtx5IM200WWnHiOH96CUzku7EmFSrwiWE2HL9vRO8Iz_Jh-hCmTG-0lQksVVoiohZPwB9_RTEqE6uTxajquHw8e7URzFZWc48ijDMlxKtipFA3B83Dk4ws9w3pQ7ciTQzeHvs2hZdxxHa90SGUeNKcRHqNeNNpRNcmK_kNT1vhHxM2gJkWYOjsRknSC9_hUFlr2oPODF_mNvEtIiM_xC3kUPPiDJkftaMbXB-dy_COq52guHP8Rhofa5kFa7UKnhRR-PDqqRkI6bdnR48X1Ie7xCNbV4BWuDXmc8JCbIzcVTGQWXNGO8UHO6ByUPTL6oxJTTFmCXxAv5DuNM1F0lA0RJtsPbbkQJryF70WbPYeHw6cQawqSRSs-KSN-_DKuhE3RE2FGQX9Y5FqOrxS6B2HWJRR-HTqLyI2-oSec_XDyYj-ebsHD4sKUSSuuvDhxx9gzeFUsXHmIWwseTHkWozunIEGe6Mee44_QPJsxNTreKCMaTYlyAwSFAABBxJWRDggAgSOEIAAQMIYwJJgwEBgGAIBAGOaFQgwZIAhCBgDmgQLIYIEIA8hAQAygwAAjBIFECCMQAcAYA5BhEgDgkAEKICIVARAJAoRQCABohENIAGMAYsYIIhhhQAiiEUKIIKEUw4YAAgBQAgFlFACEGMEQMdBYAKAyDChkgCHCAiKYIQAoYIgAwAjAhJEAECUEssI4gZhAihAEiALCAGQQMA4ZRIBQCEHAiAFUIIMABAgIgSAhBAEDmFDgEGCBMJAZDIgQBggQOICKUAEMJ4wqARQCwgDhCIGCCCOAYEYBA5kBDjAmABJCAKEAAAIpQAYhgBFNhSCCEIsAEAAYhhABgjAlkAMIACGUIUAQZoAhjBIBjBCGIYeUAABIIIwQqCjlhCJCEAOMBYIABJwEAhgCHCBMEAQMgkAaDQACAAJBjGBAEC0Ugwh5pQGACBCBgDDAAAQE", + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "ff683a7e-54b1-4257-96bb-b51526a0b884", + "musicbrainz_track_id": "f1986f4c-0396-474f-b6c1-a07a0126f647", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": null, + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": "-10.76 dB", + "replay_gain_album_peak": "1.000031", + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": "-11.42 dB", + "replay_gain_track_peak": "0.999115", + "replay_gain_track_range": null, + "track_number": "8", + "track_title": "The Right Time", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 246, + 813333333 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": "AQABz0mSTEmkKGGCPE9x5eBxJSxcHz0eFY5KDVeV4MmDWQrx40fsLxqsR7hRouEuhHyCRg7O4UIu-IGu43nQaMaXZEbzJYWuBT-ij-lQH42T4dIQHVr9oDmRD7WI83iOHE0OHVdO5MzRZHGCD07gZ0cfIO-g6M3xDQ8fpFmUbPARKL84WMqI0Okx--iDKVdw7cj34DwaldnxZoavwxQD7Qz6HWe2wgZ-WMQPEQ_KS9BF_EHpo0kT4sSP59DOCw2XBZpFNGegZ0GjJnrgakefIo9yNA_6HSW2KWEOV-Fx5Iei_fhx1CZyKUOOC2J-omx0XMkR9kKTNsYndD8cB02NPMd_aJduOE-KL0NemfAz5MePXzl0vNmRCx-D6rHQP0Ez6sKLj2MQWhGa6Dj0o51EIgeOH3Fu9INufMmId7iUHWH-oSfyXcJ74dRxRReOdokOn0d_XLnQKYedLAx8wTUuuDrCR6HwhEU4Ef4h5mh_RD9qOA05WENuQQzak8h3PEQTPkY_TDscT0ZDIleWAvrRSgqJ-Dl20sKPB98RbRorfHgFZdxQO0defFeE5sfkHw_OZKkRKeXRH_8JXcRU-ThUDucGJybKaUfPDs0k5sEj6FGiQ_vhXXBOwrmFUBdeNGeOB2akIQ_RfDn0wKVy5MkQbiKaS6Gg6BnMqAzSJpHQC--R_4Ju4kakTMKZw9yOH2Hwk4GeRMctpNnx4Tj6wUYfhA9z-BG6B1p5bTh-_DgP57OQR8jVEB-DZhruC_0jQ4twiT8eqRQcSsJ_6PqKksjFoOwQm8SjjBvKNfB1Bcmlo5mUXDiuED2a9KHwHneuIE_UQZ8QT5HQoyFv5A_e5ApK_WgeaKnCI_zE4lR0PB6e49SFhrpw2SrCHHoO_wli9XiyB00VHX6El0H4B3p2PEeYWiIqazP6HOYiNKWKJ8ePvBXRQ4sjice9BE-GXocPnYKFL_BxLUGpzXgvnEczHqUcdE1kw8Th4p0OHz_UF_7xHU0m4zuuBhf0kRm-EG3OCI5NdGHKBDpyBh-To1WkEGHC8zj05UGzWwitHj-Jfng0CXuFKSvuB0-F78gvaD3SC9fxRIdDHb6EzgviD7r0IZdy9DyaST365IOryBEuIYyF59DvoE-Uo3GoI6Z2VA4PT9IRqtCOn8LjIx_sFCfCjHqCC802HT2DLzq0_DjjwRZOw8SPw1Zy-Ecb6GEW4Yc3fQgeJmOCyjue4Tne4BbyKIVPaNpxC5puwdaE4yz8B6-NsAuH6ypePkbzb-h7AOIQYgZ64JgxiEjglIEEEkQUQwQAKgBDSCAltAHagCSQcAAIKQBSQCFCjBKEIGKIEAAJQgyxwDkmGFGMOGYFAAgIQCwiQgDKDBGUkEAJAAQZgAhQRjEgiDFAUOCUAEAB4AwASlAhmIGiAAqII4YIYKQhQBGKAIICKIIIA84QhAQGQlECjFKAEIMMMkAAS5wTACEAjGBSKGIAAAQxBARgAghjgaEEAKaAQAIBYQgBBDAAtBAGGEKQcAJJBIAwRglDwBMACQMMQEQA5gAywAAAlBAGCSMQIAoRAiQgSCAAABEMAKMIgAAoaAQQQhCBFBNEETEUIUAJoiEhyBCBhAQKIgaEEgYSAglBSAgoiBhIIACAAMBQR4TEABklDIFEECIUEIQRBoQQAAjCiRBGGcGJMIBI5qARURCEGBGAKUetAoQhSgFSAAhAhAAA", + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "b6a2be0f-bb39-403d-b496-89fa7555ac47", + "musicbrainz_track_id": "7253e737-7fd8-4944-b437-e0b37271f8df", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": null, + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": "-10.76 dB", + "replay_gain_album_peak": "1.000031", + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": "-9.18 dB", + "replay_gain_track_peak": "1.000031", + "replay_gain_track_range": null, + "track_number": "9", + "track_title": "Roll Along", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 239, + 293333333 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": "AQABz4qULE3ETDieH5dx6viFXtdwesL74DmaqId74U3QvMM3frgVUMsRCzcqLcpzOOMgJdUT5FYwPjDH48vxhUFToyyOC9eRy4aaNYmioCfhC-dxHDcO_bgM_biI9C32HfaNsqjV4_pQOYuE_If-41l8HPqOXDse5UETRXikB9_gPEEtBkfy7Ui5TfhxdMpTOD989Amm8Ef4Q9-h50FzHf3x-3ggcxZyJZIy_C7q43Be3Ig3HXqHukdu4RPRjTvSOKh16Ij0w-HxZdTxsqg2Bvku44d0Hy946EfsJHqCRllzeDnu4wrOMEe_4zya7EdI3MQfNE70Q5x0hH-CZ1g15mjyoFaS4zKaDn1w40eexBv0aKiyK0Suw8dp_MihA88d9IHmI92LSQ5qXbCDq8ejz2AWHteJ5D9yvCaRH8-R6EmSo5IePFGO8_CbHP6EnscXQ-Myo2HY4PgDqzkqH80THV-GaIe-HI81CH6t4CR-fD1uNpCbREd8o9yN_EXC8zhwRbaFZ0ePv8JDIUH0F0-iCHc2oWcyw87BH-_hGrc0CU5yH3d01C9w9A-e5VLBkC6q1mj04P_wRDmo6cR54kcX0gnCKVvcQV90ZN_wY8qJPlGMC9eJphtqB_nx5NB1_MoydCeuw8yBe9Dx4Tl0CdeOvHB_XDv8Y5fx42eOnhxyHqq-I2PDFr-CnDukzwiv7AnMpYZ_PJWCt0af4UOeJT8SKtxxnmB3Bd9uPDs4WcGlo4t5NPexLw9upM8FHU-H2IyNo8_xfMRJSRNancFxSR963MgPT9AqIVeC6-j1Y8qPr0ceHY9y_IenUTv4Hz9kncjZGT_O7Thq7jifwIuSBzzh5EffCLEfSCHzNQjDF7-FUI9wJTnCdUmDS_vBC82IelKDXdHxw92OO8CT4x8R0yG6hyGuBz6OH4d7GJcnaEf-Sqj-w4c3DedhRth1-FkohOKFxAl93HSJx3gm5Doe6YGWRTPhIbaFjnXwMIhvnOKIalFONIdO_AmkyK0CrUvA78WZHD5G9TgTKUSuIz0-QT_-IBdOjRLxo9KFfJF8OJIO7fjxoz9qPFeCy0hY5XgyeNgVOGbwC99CwSMX4TyIB5-O5Ij_DJ1ujPThKemFD5fh6yjFY3KaEQ2nJ8dE5wjzQWeaIiJzoduLJu6HH0eeoU3CoNQV4z-s8IH6fLgGPkmQf0f_DH5ztMuOS_bR0XDow3-CZCePXBxMMbiU6cSXFH6V4M4ZvPEyXEfCTMmDXCKF5_CDyxJO5kKXXUaZrMih0jIe5gAwIIBOICOAUIJAayhAgmkwgAHGIUIsUkRB4IQBlhRiCANAUKQEIkgAJJgAjRjigAAUOgCAAAtYQgQRlhBjEGEKAEIZEIwhwSSiAAAOKDBAGEC8AUw0CgAAmDNCFCGIYCgAMcIwJoFRiBnkgGLaGUfJAUASCYgRBAhhiGBOUEKAEwIQJJSACBhGJGEICaaQs4ggAIRQQDAWAJAMUaEAAAoJQ4wQQCjIACGECUGEEQ5BIAAwQBADlVGGAiAEQ8AqbgAGkDJAiICACQSAIBAR4AwjAADLgBICEIIUAYYJJQ0ggFBEkEBBMEGABUoIxhRwgghBCJTEAEaEMEAQT4Q3CEhAFIFEASCQQtIYQAgDAguHFGECMKSMM5YZKYgBgDpkATAEUOoMA1QRYIiABBEHCAPAEamgwMIKR4QRQligjBIQCKEIMhQag4FAQDhoBAMAIEScIIEoACxgAEhgiFAAAAGEAEoYQQQjADBiiaAEMCAQVgI", + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "897ce4b0-9beb-4f2c-af39-cda13e0b8673", + "musicbrainz_track_id": "2246cc28-a0dc-4cea-87c2-902a64b9f92f", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": null, + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": "-10.76 dB", + "replay_gain_album_peak": "1.000031", + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": "-10.73 dB", + "replay_gain_track_peak": "1.000031", + "replay_gain_track_range": null, + "track_number": "10", + "track_title": "Get U Home", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 254, + 773333333 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": "AQABzxm1SEqkREJz3dgTJrgOhg_-In8avBea8Hik5khUbUf4fML94C_Or3iSjaj4IlUP7UcegxWPZ8yxZ0ej6eia4AnqRfhyxOqNj6KCM8uRHKWSDDV3TOGSBD_Iy8GZ41G2BX96hKQPLU6WQ2cU4bI644pw_MJ1gXFeBeJ_9FSgS0H-4TIeFd8D6sSz42LQH7miFRMJLZkiE7l3TCEvnGJIsFLyBCWXMDCro3yOncSVhyh1NNmNKukCu0fOXFCUHXkVF-_w40xd-FOENzs-7viDJlfR3khi7kH4DK6k4MkxiTry9EmhaT9y5vhxJVmK_ISuPOCuG-FC4g6BvUFIOSGRMEqSoKsSHr-C4xGenrgYI8yYC8m06ljDJWHwo07A2Dl-D_meGJKi_XiOW0GfJtASUSdWRUfFJDn8AyItH1cOOzqq5Ye2ZvExJWKwI4T_qCgVPcEjTcN_RDy0jXJxLRVSRSe257AU1Zh-ND_6ok_QVJKG4z--He2DpuqLU2rQg9JxR_jh7QhLXNYUaHmUHD2iX8L5Cd0PrzouHk1Q92gejREu_D5yp0UjTqi4Qz-ew8-Of7ik44SmiZgyFveJ7LoQnoefC8-uY8oIfcjVoWvQ5DgZC-EV-If6wUxIhNtQshXif6iVHIqX44ta5NtFNBGPPj2eo-oFJlWCMwSzB81YfNwm47rAVwue5WCO5gmy_cJzEj1j4d2xf3gXpI7xRI3QzEmO33gPP8brLMeQLB3CF2eOX7jSo9ZxUHGLKk1x8cOTZUekh9ARPik-E7_QK4rQJNkRi5Zx6MvRqoGvw6WJ74d1TNIRnUKPpg_xaUeeUBG-Q-EfdHM-5FrhSZ-xL6hVY88D_7jQK0VTsfjxT8aPNhLRiC1yHowfpDocKsOfo0eeo3koaPyNHTnOT-jyCz4uosnSC83RpxUuxHuPc4WoJcTFtCRy4oefI78UXLgYYpLQXIPsHLxUDdpziKMpbNyPkBTyC_WI54VzYeehDD_E72iTXYg5D-GqyMOPeoHCjUTcMB-eB72M5sWZC0ejg5mVEExGocfHbcL1RMW1BL_QI0ys4weXSxXKJcuBP0K0Zyj9oGSSJEZTy8GPbjqaY48zHAmP_MMZvM1wMR56UJ-Eisrx1LgSgkd4FuKFMM-x90PeNGh2KdBEEWtz5A_--EITGQwTfcLFIp94_BAxGiGT6Mijo49y_Mrxw1fwhLh25MeULD46pjm-7DL6o3lC4kpY4Y-Oxj_qFc2H_nh2NOmQbJFW8AlyVMbzwJF0hF2irJAf5O3wP6i04iWRK4a-sGASD1cYC-Hz4T9-_Af1CZ2DfMSfSjiT4yoivSU-4ybcCr2M63ikI8c_QzfRWmjURBxi6vjxo6nw50PnDSAYFNIAIQgQQAkDCDGCAASMIdAQYQSSAhlDACLAEwYMMMIwAjgYhhggBFEIGmAIYkwhIwwABAgmmEFEEWIAIgQxQARggkjEgFDAACKEQMgSRhARAkADBAlJIICgAIIYQoSxBAlhgBFIGYOEAwQZAgRUCFiiiCLIMQQoEIAACSxwRCiLADBAEEUIAIEYYwCoCghmiGGCECAUIEQQYzwhAkgihABAYACYQgwAwgQDAhACgCACAMIEUAJQADQCkBhCYSIKGAYMBcaApIQAwIhiqCNCMCEAQAYYRYQzzjAgiDBMECEAcUgIpIEBQChCBQgGAWcVQEoQAwQRUCBEBDRIMCGIYAYwgQEhCDBAkKKCGAkAMAAAAIIVQDiAFCKLAoMQAA4IBBwjgAClAACMAUcEAIIhgohQSAhgBAEMEaAAZcQg4pkxQgAhGCCGAEIIYQAYRYBgygDoDCCCICgIVsY4YAQ", + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "c578013f-bdec-40ae-9337-0b7e0eaeba77", + "musicbrainz_track_id": "903b5331-240f-4c92-aaba-8b7c3f6c2421", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-03-03", + "original_release_year": "2015", + "performers": null, + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": "-10.76 dB", + "replay_gain_album_peak": "1.000031", + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": "-10.89 dB", + "replay_gain_track_peak": "1.000031", + "replay_gain_track_range": null, + "track_number": "11", + "track_title": "Do It", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 258, + 519999999 + ] + }, + { + "acoustid": null, + "acoustid_fingerprint": "AQABzwmj8EmS4U8hnjiF94Ou4NbR_OjG4T0qisfpw8cv_A8-QvwxyeAxPccnnA-Dkjah50Hto7GPL-KF7mjyD89xHQ2FvkGrFO5woy_u4sKPO7PQcDz6Iz9-WA2PDz_eo2_RyMODG306wx_ySIX2dkb-40atw9bQPsVR6Sf8PIiUZscNPhPyo3nUoLiOXekWuE6H_7gmH9EbHmZsPD84y0eV8BL8dPBroXaDZ9DxOGGRU3KKf4Zf_KioBB6XGNeH34SvIxfM8Sin7NCzB_LDFYzpw7PCDV8OnReusOiyREW846qD51qQI3lcNLtQNVG0gIy04_OPvkMOnUZ4PMmPKyeuo8kshKJyPIbKo3mUMLhIQ-cGjzSeG852vFEKzVpu8NfQs7is4VKOKwqaZMpz_BF2Cnof7LNwkmh2ClqzNXh-cJfRJE1EQudSeGSM2g36CLoUtBZDIddx7TP8Fz8qSQn8JbhO_ISvI9dhKgzKRibexcEdtWD8G96hlXpRHqmmTkez5fjuBFeWDvkp6DZCG817cE2mCY8i9IEfGemhH6GPK8eVh_iJhtGSB6EqXCK0G77G4w9OmEmGvDhjw-TwD0zC8MOpREIObXqsIMyNXQk-henQo-kd5NKhL1EQ5pgaH__A5SdCmYR-hB-uKkEbBdMzT_jR6whzL4R6H3moo1GqBP0XXHrQHz68HOWPtdUQPhGVQfzBnCPeIwyPUnrwLFmORlR0hPhVQZ-J_OiDRqeGTwJ_lAfPIXnDIh-evELlC0-SpUIpBc0L_kKuPFC1UMgf9ajGF82P-ziaajnSR4H0o1-IvtDFC9ui5Lh0dM0PlTquPHi4Ir8QUv4xhXagkxL0C_fBKGEO6lxmPEP24z6iJ8mSIrlswgecJ2OJLtQTnGkk4hE7lFcsNMcZIvpxQacc8EsP-SFRWpEJc8mHiw8hnsYTDo54hBO-tMejJwivVdCyIz_ILDnON0cDhuQRthBPhHLwTA-e1GjGRMnQI9dxQV8n_NuFLDuaHM9yHNfRR0mR5RIJ_eiFK8MkLR-6JLqCJg7-Q1ce4uHxUGh-5Wgf7IgvFQ-DJueEU-Br-EmLkseedUL-QruO_xCfoxKVSBuuHrkuPDFFnLqE8MHDHVqGkeyCK6lw0YeUPjmsMPeQP2j2NLgiCc14IXwm3Cl-qAq0jAyqzBde4UuONg3E8fCPGNO84yKjbWiIEu-D6KagxQmPUKLE43vwT8YPV8xxHbmk-dBOofk6fEX9QHmyXCglNEnSo_pjvCX0nNjD473Q8A40ezr-43M1SFm_wHnwI90n_HiSo34wP8i5C5p-GWE0Hc-DZ0qkojl6_EPbY0op5Cy0yM_QjxN4NJNf9Ee143uKnhQ-LUeeZDFu5McNKT_SSCIAYgAAShAgDFFEOIAcIUIgpKBSChAkAAAAAEAFUgwKxJUCBCDDmGEgSQWEQgowAQygCCAhEICISYGIAUQIQohgBgiBAFJEIEUVEIgIgAQjBhhjCCCIIQbEAAIAoSzkxghkuKAKA0EEVQQgoSgRgAAGBAJICWaAEwAoQoggCgABiANIYKEAEAACCgBSQigBqIHQQGMQAUYhBYwU1DCmAJIACaCAAEAJBwBSljCAgBACGCIAQkQSywQThhiCrGGAEUCMUgQABwmigCADEDMCEACQIIQCQYySRBDAiKAQKAYAQMIBigBTgAgABBDAKEqAB8QAAYABkhHAgPFEEgCAMcAYIYQSABgDmIDECQGJRkAgghhQggABlHDCOEIUEAQ4pAhSQgilgFGEOWIAEIoIIQBABmgiEFIAIOCQEQowxoBBQhAAHQECEAQFEQQAwRQAgjAkpEAMCYIAYQoZRJkQgghKCHEACIEMIIgyAQ", + "arranger": [], + "track_artist": "Tuxedo", + "track_artist_sort_order": "Tuxedo", + "bpm": null, + "comment": null, + "composer": [], + "composer_sort_order": null, + "conductor": [], + "copyright": null, + "director": [], + "dj_mixer": [], + "encoded_by": null, + "encoder_settings": null, + "engineer": [], + "genre": [], + "initial_key": null, + "isrc": [], + "language": null, + "license": null, + "lyricist": [], + "lyrics": null, + "mixer": [], + "mood": null, + "movement": null, + "movement_count": null, + "movement_number": null, + "musicbrainz_artist_id": null, + "musicbrainz_original_artist_id": null, + "musicbrainz_original_release_id": null, + "musicbrainz_recording_id": "69fd15e0-ba95-4dbd-9569-cd8545d72ecf", + "musicbrainz_track_id": "784e9d02-970c-4ba5-9334-efe8fbdb242a", + "musicbrainz_trm_id": null, + "musicbrainz_work_id": null, + "musicip_fingerprint": null, + "musicip_puid": null, + "original_album": null, + "original_artist": null, + "original_filename": null, + "original_release_date": "2015-02-01", + "original_release_year": "2015", + "performers": null, + "producer": [], + "rating": null, + "remixer": [], + "replay_gain_album_gain": "-10.76 dB", + "replay_gain_album_peak": "1.000031", + "replay_gain_album_range": null, + "replay_gain_reference_loudness": null, + "replay_gain_track_gain": "-11.79 dB", + "replay_gain_track_peak": "1.000031", + "replay_gain_track_range": null, + "track_number": "12", + "track_title": "Number One", + "track_title_sort_order": null, + "artist_website": null, + "work_title": null, + "writer": [], + "track_length": [ + 252, + 680000000 + ] + } + ], + "gapless_playback": null + } + ], + "is_compilation": false +}