[tracker-miners: 1/3] tracker-extract-mp3.c: Extract AcoustID Fingerprint for mp3 files
- From: Sam Thursfield <sthursfield src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker-miners: 1/3] tracker-extract-mp3.c: Extract AcoustID Fingerprint for mp3 files
- Date: Fri, 5 Jul 2019 11:16:10 +0000 (UTC)
commit 36be4d9c0183483cb891fc02a1d794c4762d213c
Author: Sumaid Syed <sumaidsyed gmail com>
Date: Fri Jul 5 14:57:29 2019 +0530
tracker-extract-mp3.c: Extract AcoustID Fingerprint for mp3 files
Tracker needs to store acoustid fingerprint (chromaprint) of songs,
because calculating chromaprint is an expensive process.
Tag Mappings: https://picard.musicbrainz.org/docs/mappings/
https://gitlab.gnome.org/GNOME/tracker-miners/issues/72
src/tracker-extract/tracker-extract-mp3.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
---
diff --git a/src/tracker-extract/tracker-extract-mp3.c b/src/tracker-extract/tracker-extract-mp3.c
index bf2a0ed75..ec7ffaca2 100644
--- a/src/tracker-extract/tracker-extract-mp3.c
+++ b/src/tracker-extract/tracker-extract-mp3.c
@@ -95,6 +95,7 @@ typedef struct {
gint track_count;
gint set_number;
gint set_count;
+ gchar *acoustid_fingerprint;
gchar *mb_recording_id;
gchar *mb_track_id;
gchar *mb_release_id;
@@ -150,6 +151,7 @@ typedef enum {
} id3v24frame;
typedef enum {
+ ACOUSTID_FINGERPRINT,
MB_TRACK_ID,
MB_RELEASE_ID,
MB_ARTIST_ID,
@@ -187,6 +189,7 @@ typedef struct {
gint track_count;
gint set_number;
gint set_count;
+ const gchar *acoustid_fingerprint;
const gchar *mb_recording_id;
const gchar *mb_track_id;
const gchar *mb_release_id;
@@ -274,6 +277,7 @@ static const struct {
const char *name;
id3txxxtype txxxtype;
} id3_txxxtypes[] = {
+ { "Acoustid Fingerprint", ACOUSTID_FINGERPRINT },
{ "MusicBrainz Release Track Id", MB_TRACK_ID },
{ "MusicBrainz Album Id", MB_RELEASE_ID },
{ "MusicBrainz Artist Id", MB_ARTIST_ID },
@@ -572,6 +576,7 @@ id3v2tag_free (id3v2tag *tags)
g_free (tags->title1);
g_free (tags->title2);
g_free (tags->title3);
+ g_free (tags->acoustid_fingerprint);
g_free (tags->mb_recording_id);
g_free (tags->mb_track_id);
g_free (tags->mb_release_id);
@@ -1398,6 +1403,9 @@ extract_txxx_tags (id3v2tag *tag, const gchar *data, guint pos, size_t csize, id
return;
}
switch (txxxtype) {
+ case ACOUSTID_FINGERPRINT:
+ tag->acoustid_fingerprint = value;
+ break;
case MB_TRACK_ID:
tag->mb_track_id = value;
break;
@@ -2640,6 +2648,9 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
md.id3v23.encoded_by,
md.id3v22.encoded_by);
+ md.acoustid_fingerprint = tracker_coalesce_strip (2, md.id3v24.acoustid_fingerprint,
+ md.id3v23.acoustid_fingerprint);
+
md.mb_recording_id = tracker_coalesce_strip (2, md.id3v24.mb_recording_id,
md.id3v23.mb_recording_id);
@@ -2802,6 +2813,20 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
tracker_resource_set_string (main_resource, "nmm:mbTrackID", md.mb_track_id);
}
+ if (md.acoustid_fingerprint) {
+ TrackerResource *hash_resource;
+
+ hash_resource = tracker_resource_new (NULL);
+ tracker_resource_set_uri (hash_resource, "rdf:type", "nfo:FileHash");
+
+ tracker_resource_set_string (hash_resource, "nfo:hashValue", md.acoustid_fingerprint);
+ tracker_resource_set_string (hash_resource, "nfo:hashAlgorithm", "chromaprint");
+
+ tracker_resource_set_relation (main_resource, "nfo:hasHash", hash_resource);
+
+ g_object_unref (hash_resource);
+ }
+
/* Get mp3 stream info */
parsed = mp3_parse (buffer, buffer_size, audio_offset, uri, main_resource, &md);
g_clear_object (&md.performer);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]