[sound-juicer] Skip data tracks at the start of disc
- From: Phillip Wood <pwood src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sound-juicer] Skip data tracks at the start of disc
- Date: Thu, 28 Jul 2016 10:40:09 +0000 (UTC)
commit 4a1c231562901124b53c9494fca0ed026916ae88
Author: Phillip Wood <phillip wood dunelm org uk>
Date: Wed Jul 13 10:53:57 2016 +0100
Skip data tracks at the start of disc
MusicBrainz ignores data tracks at the end of the disc so they never
appear but those at the start of the disc (typically on PlayStation CDs)
are labelled ‘[data track]’¹. Adjust the track numbers to start at ‘1’
so they make sense and also GStreamer automatically skips the data
tracks so this ensures the correct tracks are played/extracted.
¹ https://musicbrainz.org/doc/Style/Unknown_and_untitled/Special_purpose_track_title
https://bugzilla.gnome.org/show_bug.cgi?id=768596
libjuicer/sj-metadata-musicbrainz5.c | 35 ++++++++++++++++++++++++++++-----
1 files changed, 29 insertions(+), 6 deletions(-)
---
diff --git a/libjuicer/sj-metadata-musicbrainz5.c b/libjuicer/sj-metadata-musicbrainz5.c
index 9c3f80b..b06d1a9 100644
--- a/libjuicer/sj-metadata-musicbrainz5.c
+++ b/libjuicer/sj-metadata-musicbrainz5.c
@@ -696,6 +696,7 @@ fill_tracks_from_medium (SjMetadataMusicbrainz5 *self,
Mb5TrackList track_list;
GList *tracks;
unsigned int i;
+ gboolean skip_data_tracks;
char buffer[512]; /* for the GET() macro */
track_list = mb5_medium_get_tracklist (medium);
@@ -705,31 +706,55 @@ fill_tracks_from_medium (SjMetadataMusicbrainz5 *self,
album->number = mb5_track_list_size (track_list);
tracks = NULL;
+ skip_data_tracks = TRUE;
for (i = 0; i < mb5_track_list_size (track_list); i++) {
Mb5Track mbt;
Mb5ArtistCredit credit;
Mb5Recording recording;
TrackDetails *track;
+ gchar *title;
+ gint track_offset;
mbt = mb5_track_list_item (track_list, i);
if (!mbt)
continue;
- track = g_new0 (TrackDetails, 1);
+ recording = mb5_track_get_recording (mbt);
+ /*
+ * title points to a string on the stack so set it to NULL to
+ * prevent the GET macro from trying to free it
+ */
+ title = NULL;
+ GET (title, mb5_track_get_title, mbt);
+ if (title == NULL && recording != NULL)
+ GET (title, mb5_recording_get_title, recording);
+
+ /*
+ * Skip data tracks at the start of the disc
+ * https://musicbrainz.org/doc/Style/Unknown_and_untitled/Special_purpose_track_title
+ */
+ if (skip_data_tracks) {
+ if (g_strcmp0 (title, "[data track]") == 0) {
+ continue;
+ } else {
+ skip_data_tracks = FALSE;
+ track_offset = mb5_track_get_position (mbt) - 1;
+ }
+ }
+ track = g_new0 (TrackDetails, 1);
+ track->title = g_strdup (title);
track->album = album;
- track->number = mb5_track_get_position (mbt);
+ track->number = mb5_track_get_position (mbt) - track_offset;
/* Prefer metadata from Mb5Track over metadata from Mb5Recording
* https://bugzilla.gnome.org/show_bug.cgi?id=690903#c8
*/
track->duration = mb5_track_get_length (mbt) / 1000;
- GET (track->title, mb5_track_get_title, mbt);
credit = mb5_track_get_artistcredit (mbt);
- recording = mb5_track_get_recording (mbt);
if (recording != NULL) {
GET (track->track_id, mb5_recording_get_id, recording);
fill_recording_relations (self, recording, track, cancellable, error);
@@ -740,8 +765,6 @@ fill_tracks_from_medium (SjMetadataMusicbrainz5 *self,
if (track->duration == 0)
track->duration = mb5_recording_get_length (recording) / 1000;
- if (track->title == NULL)
- GET (track->title, mb5_recording_get_title, recording);
if (credit == NULL)
credit = mb5_recording_get_artistcredit (recording);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]