From dbcfabfb76a0b9ab297132d7119d1da2f8e8ec40 Mon Sep 17 00:00:00 2001 From: naomiaro Date: Wed, 27 Apr 2011 20:19:41 -0400 Subject: [PATCH] CC-1799: Live Studio Playout from media library (pytagsfs) using mutagen to get audio tags --- python_apps/pytag-fs/MediaMonitor.py | 40 +++++++++++++++++++++------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/python_apps/pytag-fs/MediaMonitor.py b/python_apps/pytag-fs/MediaMonitor.py index b7bad1da3..7f7fe8ad2 100644 --- a/python_apps/pytag-fs/MediaMonitor.py +++ b/python_apps/pytag-fs/MediaMonitor.py @@ -33,6 +33,11 @@ except Exception, e: print 'Error loading config file: ', e sys.exit() +""" +list of supported easy tags in mutagen version 1.20 +['albumartistsort', 'musicbrainz_albumstatus', 'lyricist', 'releasecountry', 'date', 'performer', 'musicbrainz_albumartistid', 'composer', 'encodedby', 'tracknumber', 'musicbrainz_albumid', 'album', 'asin', 'musicbrainz_artistid', 'mood', 'copyright', 'author', 'media', 'length', 'version', 'artistsort', 'titlesort', 'discsubtitle', 'website', 'musicip_fingerprint', 'conductor', 'compilation', 'barcode', 'performer:*', 'composersort', 'musicbrainz_discid', 'musicbrainz_albumtype', 'genre', 'isrc', 'discnumber', 'musicbrainz_trmid', 'replaygain_*_gain', 'musicip_puid', 'artist', 'title', 'bpm', 'musicbrainz_trackid', 'arranger', 'albumsort', 'replaygain_*_peak', 'organization'] +""" + class MediaMonitor(ProcessEvent): def my_init(self): @@ -43,20 +48,34 @@ class MediaMonitor(ProcessEvent): """ self.api_client = api_client.api_client_factory(config) + self.mutagen2airtime = {\ + "title": "track_title",\ + "artist": "artist_name",\ + "album": "album_title",\ + "genre": "genre",\ + "mood": "mood",\ + "tracknumber": "track_number",\ + "bpm": "bpm",\ + "organization": "label",\ + "composer": "composer",\ + "encodedby": "encoded_by",\ + "conductor": "conductor",\ + "date": "year",\ + "website": "info_url",\ + "isrc": "isrc_number",\ + "copyright": "copyright",\ + } + def process_IN_CREATE(self, event): if not event.dir : #This is a newly imported file. - print "%s: %s" % (event.maskname, os.path.join(event.path, event.name)) + print "%s: %s%s" % (event.maskname, event.path, event.name) #event.path : /srv/airtime/stor/bd2 #event.name : bd2aa73b58d9c8abcced989621846e99.mp3 #event.pathname : /srv/airtime/stor/bd2/bd2aa73b58d9c8abcced989621846e99.mp3 def process_IN_MODIFY(self, event): if not event.dir : - p = Popen(["pytags", event.pathname], stdout=PIPE, stderr=STDOUT) - output = p.stdout.read().decode("utf-8").strip() - - #get md5, most likely different f = file(event.pathname, 'rb') m = hashlib.md5() m.update(f.read()) @@ -65,9 +84,12 @@ class MediaMonitor(ProcessEvent): gunid = event.name.split('.')[0] md = {'gunid':gunid, 'md5':md5} - for tag in output.split("\n")[2:] : - key,value = tag.split("=") - md[key] = value + + file_info = mutagen.File(event.pathname, easy=True) + attrs = self.mutagen2airtime + for key in file_info.keys() : + if key in attrs : + md[attrs[key]] = file_info[key] data = {'md': md} @@ -76,7 +98,7 @@ class MediaMonitor(ProcessEvent): print "%s: path: %s name: %s" % (event.maskname, event.path, event.name) def process_default(self, event): - print "%s: %s" % (event.maskname, os.path.join(event.path, event.name)) + print "%s: %s%s" % (event.maskname, event.path, event.name) if __name__ == '__main__':