From dfc07189cfe1551da13186cff93622e03b3b4cbc Mon Sep 17 00:00:00 2001 From: yomguy <> Date: Mon, 21 May 2007 15:19:37 +0000 Subject: [PATCH] Adds main id3 tags during MP3 streaming --- telemeta/export/core.py | 3 +- telemeta/export/flac.py | 3 +- telemeta/export/mp3.py | 40 ++++++++++++++--------- telemeta/export/ogg.py | 1 - telemeta/export/wav.py | 8 ++--- telemeta/templates/collection_detail.html | 2 +- 6 files changed, 33 insertions(+), 24 deletions(-) diff --git a/telemeta/export/core.py b/telemeta/export/core.py index 39bd8f5e..8ad0fafe 100644 --- a/telemeta/export/core.py +++ b/telemeta/export/core.py @@ -177,7 +177,8 @@ class ExporterCore(Component): def post_process(self, item_id, source, metadata, ext, cache_dir, options=None): - """ Post processing of the Core. Print infos, etc...""" + """ Post processing : write tags, print infos, etc...""" + self.write_tags() if not options is None: if 'verbose' in self.options and self.options['verbose'] != '0': print self.dest diff --git a/telemeta/export/flac.py b/telemeta/export/flac.py index 6c1d9fc4..972938a3 100644 --- a/telemeta/export/flac.py +++ b/telemeta/export/flac.py @@ -19,7 +19,7 @@ from telemeta.export.api import IExporter from mutagen.flac import FLAC class FlacExporter(ExporterCore): - """Defines methods to export to OGG Vorbis""" + """Defines methods to export to FLAC""" implements(IExporter) @@ -132,7 +132,6 @@ class FlacExporter(ExporterCore): # Post-proccessing try: - self.write_tags() self.post_process(self.item_id, self.source, self.metadata, diff --git a/telemeta/export/mp3.py b/telemeta/export/mp3.py index a764e92e..537f7e4f 100644 --- a/telemeta/export/mp3.py +++ b/telemeta/export/mp3.py @@ -36,14 +36,20 @@ class Mp3Exporter(ExporterCore): self.buffer_size = 0xFFFF self.dub2id3_dict = {'title': 'TIT2', #title2 'creator': 'TCOM', #composer - 'creator': 'TPE1', #lead - 'identifier': 'UFID', #Unique ID... - 'identifier': 'TALB', #album - #'date': 'TYER', #year - 'type': 'TCON', #genre - 'publisher': 'TPUB', #comment - } - + 'creator': 'TPE1', #lead + 'identifier': 'UFID', #Unique ID... + 'identifier': 'TALB', #album + 'type': 'TCON', #genre + 'publisher': 'TPUB', #comment + #'date': 'TYER', #year + } + self.dub2args_dict = {'title': 'tt', #title2 + 'creator': 'ta', #composer + 'identifier': 'tl', #album + #'type': 'tg', #genre + 'publisher': 'tc', #comment + 'date': 'ty', #year + } def get_format(self): return 'MP3' @@ -78,8 +84,7 @@ class Mp3Exporter(ExporterCore): def write_tags(self): """Write all ID3v2.4 tags by mapping dub2id3_dict dictionnary with the respect of mutagen classes and methods""" - from mutagen import id3 - + from mutagen import id3 id3 = id3.ID3(self.dest) for tag in self.metadata.keys(): if tag in self.dub2id3_dict.keys(): @@ -90,7 +95,7 @@ class Mp3Exporter(ExporterCore): id3.add(frame) id3.save() - def get_args(self,options=None): + def get_args(self, metadata, options=None): """Get process options and return arguments for the encoder""" args = '' if not options is None: @@ -110,6 +115,12 @@ class Mp3Exporter(ExporterCore): else: args = args + ' -S -c -o ' + for tag in self.metadata.keys(): + if tag in self.dub2args_dict.keys(): + arg = self.dub2args_dict[tag] + value = self.metadata[tag] + args = args + ' --' + arg + ' "' +value +'" ' + return args def process(self, item_id, source, metadata, options=None): @@ -117,10 +128,10 @@ class Mp3Exporter(ExporterCore): self.source = source self.metadata = metadata #self.options = {} - self.args = self.get_args(options) + self.args = self.get_args(self.metadata,options) self.ext = self.get_file_extension() self.command = 'sox "'+self.source+'" -q -w -r 44100 -t wav -c2 - '+ \ - '| lame '+self.args+' --tc "default" - -' + '| lame '+self.args+' - -' # Pre-proccessing try: @@ -142,8 +153,7 @@ class Mp3Exporter(ExporterCore): yield 'ExporterError: core_process' # Post-proccessing - try: - self.write_tags() + try: self.post_process(self.item_id, self.source, self.metadata, diff --git a/telemeta/export/ogg.py b/telemeta/export/ogg.py index 6c4a2633..d807dfb6 100644 --- a/telemeta/export/ogg.py +++ b/telemeta/export/ogg.py @@ -127,7 +127,6 @@ class OggExporter(ExporterCore): # Post-proccessing try: - self.write_tags() self.post_process(self.item_id, self.source, self.metadata, diff --git a/telemeta/export/wav.py b/telemeta/export/wav.py index 06c8f8a6..5bb15d71 100644 --- a/telemeta/export/wav.py +++ b/telemeta/export/wav.py @@ -17,7 +17,7 @@ from telemeta.export.core import * from telemeta.export.api import IExporter class WavExporter(ExporterCore): - """Defines methods to export to OGG Vorbis""" + """Defines methods to export to WAV""" implements(IExporter) @@ -107,7 +107,7 @@ class WavExporter(ExporterCore): if not options is None: self.options = options try: - # Pre-proccessing (core) + # Pre-proccessing self.ext = self.get_file_extension() self.dest = self.pre_process(self.item_id, self.source, @@ -125,7 +125,7 @@ class WavExporter(ExporterCore): yield chunk file_out.write(chunk) - # Processing + # Core Processing while chunk: chunk = file_in.read(self.buffer_size) yield chunk @@ -133,7 +133,6 @@ class WavExporter(ExporterCore): file_in.close() file_out.close() - self.write_tags() # Create the md5 key #if 'md5' in self.metadata and self.metadata['md5']: @@ -143,6 +142,7 @@ class WavExporter(ExporterCore): #if 'par2' in self.metadata and self.metadata['par2']: self.create_par_key() + # Pre-proccessing self.post_process(self.item_id, self.source, self.metadata, diff --git a/telemeta/templates/collection_detail.html b/telemeta/templates/collection_detail.html index 55361774..5e37e3a3 100644 --- a/telemeta/templates/collection_detail.html +++ b/telemeta/templates/collection_detail.html @@ -17,7 +17,7 @@
- {% if 0 %} {# Use 1/0 for alternate player #} + {% if 1 %} {# Use 1/0 for alternate player #}