Skip to content

Instantly share code, notes, and snippets.

@neheb
Created October 4, 2016 23:23
Show Gist options
  • Save neheb/2134ca496219913949673873772bffe0 to your computer and use it in GitHub Desktop.
Save neheb/2134ca496219913949673873772bffe0 to your computer and use it in GitHub Desktop.
[mangix@mangix rhythmbox]$ cat rhythmbox-add-replaygain.patch
diff --git a/rhythmdb/rhythmdb-private.h b/rhythmdb/rhythmdb-private.h
index 579f785..933eb2e 100644
--- a/rhythmdb/rhythmdb-private.h
+++ b/rhythmdb/rhythmdb-private.h
@@ -94,7 +94,11 @@ struct _RhythmDBEntry {
gulong disctotal;
gulong duration;
gulong bitrate;
- double bpm;
+ gdouble track_gain;
+ gdouble track_peak;
+ gouble album_gain;
+ gdouble album_peak;
+ gdouble bpm;
GDate date;
/* filesystem */
diff --git a/rhythmdb/rhythmdb-tree.c b/rhythmdb/rhythmdb-tree.c
index d265aae..7bdad8c 100644
--- a/rhythmdb/rhythmdb-tree.c
+++ b/rhythmdb/rhythmdb-tree.c
@@ -670,13 +670,6 @@ rhythmdb_tree_parser_end_element (struct RhythmDBTreeLoadContext *ctx,
set = TRUE;
}
break;
- /* drop replaygain properties */
- case RHYTHMDB_PROP_TRACK_GAIN:
- case RHYTHMDB_PROP_TRACK_PEAK:
- case RHYTHMDB_PROP_ALBUM_GAIN:
- case RHYTHMDB_PROP_ALBUM_PEAK:
- skip = TRUE;
- break;
default:
break;
}
@@ -1063,6 +1056,18 @@ save_entry (RhythmDBTree *db,
case RHYTHMDB_PROP_BITRATE:
save_entry_int(ctx, elt_name, entry->bitrate);
break;
+ case RHYTHMDB_PROP_TRACK_GAIN:
+ save_entry_double(ctx, elt_name, entry->track_gain);
+ break;
+ case RHYTHMDB_PROP_TRACK_PEAK:
+ save_entry_double(ctx, elt_name, entry->track_peak);
+ break;
+ case RHYTHMDB_PROP_ALBUM_GAIN:
+ save_entry_double(ctx, elt_name, entry->album_gain);
+ break;
+ case RHYTHMDB_PROP_ALBUM_PEAK:
+ save_entry_double(ctx, elt_name, entry->album_peak);
+ break;
case RHYTHMDB_PROP_LOCATION:
save_entry_string(ctx, elt_name, rb_refstring_get (entry->location));
break;
@@ -1178,11 +1183,6 @@ save_entry (RhythmDBTree *db,
case RHYTHMDB_PROP_SEARCH_MATCH:
case RHYTHMDB_PROP_YEAR:
case RHYTHMDB_NUM_PROPERTIES:
- /* obsolete replaygain properties */
- case RHYTHMDB_PROP_TRACK_GAIN:
- case RHYTHMDB_PROP_TRACK_PEAK:
- case RHYTHMDB_PROP_ALBUM_GAIN:
- case RHYTHMDB_PROP_ALBUM_PEAK:
break;
}
}
diff --git a/rhythmdb/rhythmdb.c b/rhythmdb/rhythmdb.c
index 4319317..b8f69fe 100644
--- a/rhythmdb/rhythmdb.c
+++ b/rhythmdb/rhythmdb.c
@@ -660,6 +660,18 @@ metadata_field_from_prop (RhythmDBPropType prop,
case RHYTHMDB_PROP_DATE:
*field = RB_METADATA_FIELD_DATE;
return TRUE;
+ case RHYTHMDB_PROP_TRACK_GAIN:
+ *field = RB_METADATA_FIELD_TRACK_GAIN;
+ return TRUE;
+ case RHYTHMDB_PROP_TRACK_PEAK:
+ *field = RB_METADATA_FIELD_TRACK_PEAK;
+ return TRUE;
+ case RHYTHMDB_PROP_ALBUM_GAIN:
+ *field = RB_METADATA_FIELD_ALBUM_GAIN;
+ return TRUE;
+ case RHYTHMDB_PROP_ALBUM_PEAK:
+ *field = RB_METADATA_FIELD_ALBUM_PEAK;
+ return TRUE;
case RHYTHMDB_PROP_BPM:
*field = RB_METADATA_FIELD_BPM;
return TRUE;
@@ -2085,6 +2097,31 @@ set_props_from_metadata (RhythmDB *db,
RB_METADATA_FIELD_ALBUM,
RHYTHMDB_PROP_ALBUM,
_("Unknown"));
+
+ /* replaygain track gain */
+ if (rb_metadata_get (metadata, RB_METADATA_FIELD_TRACK_GAIN, &val)) {
+ rhythmdb_entry_set_internal (db, entry, TRUE, RHYTHMDB_PROP_TRACK_GAIN, &val);
+ g_value_unset (&val);
+ }
+
+ /* replaygain track peak */
+ if (rb_metadata_get (metadata, RB_METADATA_FIELD_TRACK_PEAK, &val)) {
+ rhythmdb_entry_set_internal (db, entry, TRUE, RHYTHMDB_PROP_TRACK_PEAK, &val);
+ g_value_unset (&val);
+ }
+
+ /* replaygain album gain */
+ if (rb_metadata_get (metadata, RB_METADATA_FIELD_ALBUM_GAIN, &val)) {
+ rhythmdb_entry_set_internal (db, entry, TRUE, RHYTHMDB_PROP_ALBUM_GAIN, &val);
+ g_value_unset (&val);
+ }
+
+ /* replaygain album peak */
+ if (rb_metadata_get (metadata, RB_METADATA_FIELD_ALBUM_PEAK, &val)) {
+ rhythmdb_entry_set_internal (db, entry, TRUE, RHYTHMDB_PROP_ALBUM_PEAK, &val);
+ g_value_unset (&val);
+ }
+
/* artist sortname */
set_metadata_string_with_default (db, metadata, entry,
RB_METADATA_FIELD_ARTIST_SORTNAME,
@@ -3609,16 +3646,16 @@ rhythmdb_entry_set_internal (RhythmDB *db,
break;
}
case RHYTHMDB_PROP_TRACK_GAIN:
- g_warning ("RHYTHMDB_PROP_TRACK_GAIN no longer supported");
+ entry->track_gain = g_value_get_double (value);
break;
case RHYTHMDB_PROP_TRACK_PEAK:
- g_warning ("RHYTHMDB_PROP_TRACK_PEAK no longer supported");
+ entry->track_peak = g_value_get_double (value);
break;
case RHYTHMDB_PROP_ALBUM_GAIN:
- g_warning ("RHYTHMDB_PROP_ALBUM_GAIN no longer supported");
+ entry->album_gain = g_value_get_double (value);
break;
case RHYTHMDB_PROP_ALBUM_PEAK:
- g_warning ("RHYTHMDB_PROP_ALBUM_PEAK no longer supported");
+ entry->album_peak = g_value_get_double (value);
break;
case RHYTHMDB_PROP_LOCATION:
rb_refstring_unref (entry->location);
@@ -4591,9 +4628,9 @@ rhythmdb_entry_gather_metadata (RhythmDB *db,
case RHYTHMDB_PROP_TRACK_PEAK:
case RHYTHMDB_PROP_ALBUM_GAIN:
case RHYTHMDB_PROP_ALBUM_PEAK:
- continue;
- default:
break;
+ default:
+ continue;
}
g_value_init (&value, value_type);
@@ -5288,17 +5325,13 @@ rhythmdb_entry_get_double (RhythmDBEntry *entry,
switch (propid) {
case RHYTHMDB_PROP_TRACK_GAIN:
- g_warning ("RHYTHMDB_PROP_TRACK_GAIN no longer supported");
- return 0.0;
+ return entry->track_gain;
case RHYTHMDB_PROP_TRACK_PEAK:
- g_warning ("RHYTHMDB_PROP_TRACK_PEAK no longer supported");
- return 1.0;
+ return entry->track_peak;
case RHYTHMDB_PROP_ALBUM_GAIN:
- g_warning ("RHYTHMDB_PROP_ALBUM_GAIN no longer supported");
- return 0.0;
+ return entry->album_gain;
case RHYTHMDB_PROP_ALBUM_PEAK:
- g_warning ("RHYTHMDB_PROP_ALBUM_PEAK no longer supported");
- return 1.0;
+ return entry->album_peak;
case RHYTHMDB_PROP_RATING:
return entry->rating;
case RHYTHMDB_PROP_BPM:
diff --git a/rhythmdb/rhythmdb.h b/rhythmdb/rhythmdb.h
index 85d7748..da00331 100644
--- a/rhythmdb/rhythmdb.h
+++ b/rhythmdb/rhythmdb.h
@@ -114,10 +114,10 @@ typedef enum
RHYTHMDB_PROP_LAST_PLAYED,
RHYTHMDB_PROP_BITRATE,
RHYTHMDB_PROP_DATE,
- RHYTHMDB_PROP_TRACK_GAIN, /* obsolete */
- RHYTHMDB_PROP_TRACK_PEAK, /* obsolete */
- RHYTHMDB_PROP_ALBUM_GAIN, /* obsolete */
- RHYTHMDB_PROP_ALBUM_PEAK, /* obsolete */
+ RHYTHMDB_PROP_TRACK_GAIN,
+ RHYTHMDB_PROP_TRACK_PEAK,
+ RHYTHMDB_PROP_ALBUM_GAIN,
+ RHYTHMDB_PROP_ALBUM_PEAK,
RHYTHMDB_PROP_MEDIA_TYPE,
RHYTHMDB_PROP_TITLE_SORT_KEY,
RHYTHMDB_PROP_GENRE_SORT_KEY,
[mangix@mangix rhythmbox]$ cat rhythmbox-ipod-soundcheck.patch
diff --git a/plugins/ipod/rb-ipod-source.c b/plugins/ipod/rb-ipod-source.c
index 8a02890..316bd4e 100644
--- a/plugins/ipod/rb-ipod-source.c
+++ b/plugins/ipod/rb-ipod-source.c
@@ -785,6 +785,7 @@ create_ipod_song_from_entry (RhythmDBEntry *entry, guint64 filesize, const char
track->rating *= ITDB_RATING_STEP;
track->app_rating = track->rating;
track->playcount = rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_PLAY_COUNT);
+ track->soundcheck = 1000 * pow (10.0, -0.1 * rhythmdb_entry_get_double (entry, RHYTHMDB_PROP_TRACK_GAIN));
if (rhythmdb_entry_get_entry_type (entry) == RHYTHMDB_ENTRY_TYPE_PODCAST_POST) {
track->mediatype = ITDB_MEDIATYPE_PODCAST;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment