From 0a4888f861b54fc5283ed16984a757f387dac7e8 Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Mon, 26 Jun 2023 05:09:03 +0300 Subject: [PATCH] Database scheme: add EBU R 128 Integrated Loudness and Loudness Range columns Nothing really ground-breaking, just add those two fields to each table that already has `bitrate`/`samplerate`/`bitdepth` fields. Those new fields do need to be able to represent an invalid state which is their default state, thus they are non-`NOT NULL`. In principle, the actual field type could be `INTEGER` (i.e. fixed point w/ 2 fractional digits), but unless we really want to save a few bytes, it doesn't seem worthwhile. FIXME: i'm not sure if `device-schema` should be changed too. --- data/data.qrc | 1 + data/schema/schema-18.sql | 37 ++++++++++++++++++++++++++++++ data/schema/schema.sql | 47 ++++++++++++++++++++++++++++++--------- src/core/database.cpp | 2 +- 4 files changed, 76 insertions(+), 11 deletions(-) create mode 100644 data/schema/schema-18.sql diff --git a/data/data.qrc b/data/data.qrc index e95311c61..874f7ceb1 100644 --- a/data/data.qrc +++ b/data/data.qrc @@ -9,6 +9,7 @@ schema/schema-15.sql schema/schema-16.sql schema/schema-17.sql + schema/schema-18.sql schema/device-schema.sql style/strawberry.css style/smartplaylistsearchterm.css diff --git a/data/schema/schema-18.sql b/data/schema/schema-18.sql new file mode 100644 index 000000000..47ff32278 --- /dev/null +++ b/data/schema/schema-18.sql @@ -0,0 +1,37 @@ +ALTER TABLE songs ADD COLUMN ebur128_integrated_loudness_lufs REAL; + +ALTER TABLE songs ADD COLUMN ebur128_loudness_range_lu REAL; + +ALTER TABLE subsonic_songs ADD COLUMN ebur128_integrated_loudness_lufs REAL; + +ALTER TABLE subsonic_songs ADD COLUMN ebur128_loudness_range_lu REAL; + +ALTER TABLE tidal_artists_songs ADD COLUMN ebur128_integrated_loudness_lufs REAL; + +ALTER TABLE tidal_artists_songs ADD COLUMN ebur128_loudness_range_lu REAL; + +ALTER TABLE tidal_albums_songs ADD COLUMN ebur128_integrated_loudness_lufs REAL; + +ALTER TABLE tidal_albums_songs ADD COLUMN ebur128_loudness_range_lu REAL; + +ALTER TABLE tidal_songs ADD COLUMN ebur128_integrated_loudness_lufs REAL; + +ALTER TABLE tidal_songs ADD COLUMN ebur128_loudness_range_lu REAL; + +ALTER TABLE qobuz_artists_songs ADD COLUMN ebur128_integrated_loudness_lufs REAL; + +ALTER TABLE qobuz_artists_songs ADD COLUMN ebur128_loudness_range_lu REAL; + +ALTER TABLE qobuz_albums_songs ADD COLUMN ebur128_integrated_loudness_lufs REAL; + +ALTER TABLE qobuz_albums_songs ADD COLUMN ebur128_loudness_range_lu REAL; + +ALTER TABLE qobuz_songs ADD COLUMN ebur128_integrated_loudness_lufs REAL; + +ALTER TABLE qobuz_songs ADD COLUMN ebur128_loudness_range_lu REAL; + +ALTER TABLE playlist_items ADD COLUMN ebur128_integrated_loudness_lufs REAL; + +ALTER TABLE playlist_items ADD COLUMN ebur128_loudness_range_lu REAL; + +UPDATE schema_version SET version=18; diff --git a/data/schema/schema.sql b/data/schema/schema.sql index 793e21234..fb2e24176 100644 --- a/data/schema/schema.sql +++ b/data/schema/schema.sql @@ -4,7 +4,7 @@ CREATE TABLE IF NOT EXISTS schema_version ( DELETE FROM schema_version; -INSERT INTO schema_version (version) VALUES (17); +INSERT INTO schema_version (version) VALUES (18); CREATE TABLE IF NOT EXISTS directories ( path TEXT NOT NULL, @@ -91,7 +91,10 @@ CREATE TABLE IF NOT EXISTS songs ( musicbrainz_track_id TEXT, musicbrainz_disc_id TEXT, musicbrainz_release_group_id TEXT, - musicbrainz_work_id TEXT + musicbrainz_work_id TEXT, + + ebur128_integrated_loudness_lufs REAL, + ebur128_loudness_range_lu REAL ); @@ -169,7 +172,10 @@ CREATE TABLE IF NOT EXISTS subsonic_songs ( musicbrainz_track_id TEXT, musicbrainz_disc_id TEXT, musicbrainz_release_group_id TEXT, - musicbrainz_work_id TEXT + musicbrainz_work_id TEXT, + + ebur128_integrated_loudness_lufs REAL, + ebur128_loudness_range_lu REAL ); @@ -247,7 +253,10 @@ CREATE TABLE IF NOT EXISTS tidal_artists_songs ( musicbrainz_track_id TEXT, musicbrainz_disc_id TEXT, musicbrainz_release_group_id TEXT, - musicbrainz_work_id TEXT + musicbrainz_work_id TEXT, + + ebur128_integrated_loudness_lufs REAL, + ebur128_loudness_range_lu REAL ); @@ -325,7 +334,10 @@ CREATE TABLE IF NOT EXISTS tidal_albums_songs ( musicbrainz_track_id TEXT, musicbrainz_disc_id TEXT, musicbrainz_release_group_id TEXT, - musicbrainz_work_id TEXT + musicbrainz_work_id TEXT, + + ebur128_integrated_loudness_lufs REAL, + ebur128_loudness_range_lu REAL ); @@ -403,7 +415,10 @@ CREATE TABLE IF NOT EXISTS tidal_songs ( musicbrainz_track_id TEXT, musicbrainz_disc_id TEXT, musicbrainz_release_group_id TEXT, - musicbrainz_work_id TEXT + musicbrainz_work_id TEXT, + + ebur128_integrated_loudness_lufs REAL, + ebur128_loudness_range_lu REAL ); @@ -481,7 +496,10 @@ CREATE TABLE IF NOT EXISTS qobuz_artists_songs ( musicbrainz_track_id TEXT, musicbrainz_disc_id TEXT, musicbrainz_release_group_id TEXT, - musicbrainz_work_id TEXT + musicbrainz_work_id TEXT, + + ebur128_integrated_loudness_lufs REAL, + ebur128_loudness_range_lu REAL ); @@ -559,7 +577,10 @@ CREATE TABLE IF NOT EXISTS qobuz_albums_songs ( musicbrainz_track_id TEXT, musicbrainz_disc_id TEXT, musicbrainz_release_group_id TEXT, - musicbrainz_work_id TEXT + musicbrainz_work_id TEXT, + + ebur128_integrated_loudness_lufs REAL, + ebur128_loudness_range_lu REAL ); @@ -637,7 +658,10 @@ CREATE TABLE IF NOT EXISTS qobuz_songs ( musicbrainz_track_id TEXT, musicbrainz_disc_id TEXT, musicbrainz_release_group_id TEXT, - musicbrainz_work_id TEXT + musicbrainz_work_id TEXT, + + ebur128_integrated_loudness_lufs REAL, + ebur128_loudness_range_lu REAL ); @@ -735,7 +759,10 @@ CREATE TABLE IF NOT EXISTS playlist_items ( musicbrainz_track_id TEXT, musicbrainz_disc_id TEXT, musicbrainz_release_group_id TEXT, - musicbrainz_work_id TEXT + musicbrainz_work_id TEXT, + + ebur128_integrated_loudness_lufs REAL, + ebur128_loudness_range_lu REAL ); diff --git a/src/core/database.cpp b/src/core/database.cpp index 6a039bebc..259ecab02 100644 --- a/src/core/database.cpp +++ b/src/core/database.cpp @@ -48,7 +48,7 @@ #include "scopedtransaction.h" const char *Database::kDatabaseFilename = "strawberry.db"; -const int Database::kSchemaVersion = 17; +const int Database::kSchemaVersion = 18; const int Database::kMinSupportedSchemaVersion = 10; const char *Database::kMagicAllSongsTables = "%allsongstables";