From: yomguy <> Date: Mon, 15 Dec 2008 09:51:33 +0000 (+0000) Subject: Fix sox arguments (14.2.0), remove metadata writing in OGG and MP3 post-process,... X-Git-Tag: 1.1~768 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=3532e02ace25e26c866315642306333a2d7117ff;p=telemeta.git Fix sox arguments (14.2.0), remove metadata writing in OGG and MP3 post-process, prepare tmp file for FLAC --- diff --git a/debian/control b/debian/control index 60191786..000831e8 100644 --- a/debian/control +++ b/debian/control @@ -8,7 +8,7 @@ Standards-Version: 3.8.0 Package: telemeta Architecture: any -Depends: ${python:Depends}, python-xml, python-mutagen, python-django (>= 1.0-1), python-imaging (>= 1.1.6), sox, vorbis-tools, flac, normalize-audio, python-mysqldb, mysql-server, octave2.9, python-tk, libgd2-xpm, libsndfile1 (>= 1.0.17), python-numpy, python-ctypes (>= 1.0.1), python-scikits-audiolab (>= 0.7) +Depends: ${python:Depends}, python-xml, python-mutagen, python-django (>= 1.0-1), python-imaging (>= 1.1.6), sox (>= 14.2.0-1), vorbis-tools, flac, normalize-audio, python-mysqldb, mysql-server, octave2.9, python-tk, libgd2-xpm, libsndfile1 (>= 1.0.17), python-numpy, python-ctypes (>= 1.0.1), python-scikits-audiolab (>= 0.7) Recommends: lame, vamp-examples Suggests: ecasound, festival, par2 Description: web frontend to backup, transcode and publish any audio content with metadata diff --git a/telemeta/export/core.py b/telemeta/export/core.py index 4474529d..a3d5129c 100644 --- a/telemeta/export/core.py +++ b/telemeta/export/core.py @@ -12,6 +12,7 @@ import os import re +import md5 import string import subprocess import mutagen @@ -74,15 +75,11 @@ class ExporterCore(Component): except IOError: return 'Exporter error: Cannot get the wav length...' - def compare_md5_key(self): - """ Compare 2 files wih md5 method """ - in1, in2 = os.popen4('md5sum -b "'+self.source+'"') - out1, out2 = os.popen4('md5sum -b "'+self.dest+'"') - for line in in2.readlines(): - line1 = line.split('*')[0] - for line in out2.readlines(): - line2 = line.split('*')[0] - return line1 == line2 + def compare_md5_key(self, source, dest): + """ Compare source and dest files wih md5 method """ + f_source = open(source).read() + f_dest = open(dest).read() + return md5.new(f_source).digest() == md5.new(f_dest).digest() def write_metadata_xml(self,path): doc = xml.dom.minidom.Document() @@ -170,7 +167,7 @@ class ExporterCore(Component): def post_process(self, item_id, source, metadata, ext, cache_dir, options=None): """ Post processing : write tags, print infos, etc...""" - self.write_tags() + #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 efac4fd9..c7ff2ea9 100644 --- a/telemeta/export/flac.py +++ b/telemeta/export/flac.py @@ -17,6 +17,7 @@ import subprocess from telemeta.export.core import * from telemeta.export.api import IExporter from mutagen.flac import FLAC +from tempfile import NamedTemporaryFile class FlacExporter(ExporterCore): """Defines methods to export to FLAC""" @@ -33,7 +34,7 @@ class FlacExporter(ExporterCore): self.quality_default = '5' self.info = [] self.buffer_size = 0xFFFF - + def get_format(self): return 'FLAC' @@ -76,8 +77,8 @@ class FlacExporter(ExporterCore): except IOError: return 'ExporterError [2]: decoder not compatible.' - def write_tags(self): - media = FLAC(self.dest) + def write_tags(self, file): + media = FLAC(file) for tag in self.metadata.keys(): if tag == 'COMMENT': media['DESCRIPTION'] = str(self.metadata[tag]) @@ -115,8 +116,10 @@ class FlacExporter(ExporterCore): self.args = self.get_args(options) self.ext = self.get_file_extension() self.args = ' '.join(self.args) - self.command = 'sox "%s" -q -w -r 44100 -t wav -c2 - | flac %s -c -' % (self.source, self.args) - + self.command = 'sox "%s" -s -q -r 44100 -t wav -c2 - | flac %s -c -' % (self.source, self.args) + tmp_file_name = NamedTemporaryFile(suffix = '.' + self.ext).name + tmp_file = open(tmp_file_name, 'w') + # Pre-proccessing self.dest = self.pre_process(self.item_id, self.source, @@ -128,13 +131,25 @@ class FlacExporter(ExporterCore): # Processing (streaming + cache writing) stream = self.core_process(self.command, self.buffer_size, self.dest) for chunk in stream: + tmp_file.write(chunk) + + tmp_file.close() + self.write_tags(tmp_file) + tmp_file = open(tmp_file_name.name, 'r') + + while True: + chunk = tmp_file.read(self.buffer_size) + if len(chunk) == 0: + break yield chunk - + + tmp_file.close() + # Post-proccessing - self.post_process(self.item_id, - self.source, - self.metadata, - self.ext, - self.cache_dir, - self.options) + #self.post_process(self.item_id, + #self.source, + #self.metadata, + #self.ext, + #self.cache_dir, + #self.options) diff --git a/telemeta/export/mp3.py b/telemeta/export/mp3.py index 1f54672d..ce0f4ed8 100644 --- a/telemeta/export/mp3.py +++ b/telemeta/export/mp3.py @@ -78,7 +78,7 @@ class Mp3Exporter(ExporterCore): def decode(self): try: - os.system('sox "'+self.source+'" -w -r 44100 -t wav "' \ + os.system('sox "'+self.source+'" -s -q -r 44100 -t wav "' \ +self.cache_dir+os.sep+self.item_id+'"') return self.cache_dir+os.sep+self.item_id+'.wav' except IOError: @@ -129,7 +129,7 @@ class Mp3Exporter(ExporterCore): self.args = self.get_args(options) self.ext = self.get_file_extension() self.args = ' '.join(self.args) - self.command = 'sox "%s" -q -w -r 44100 -t wav -c2 - | lame %s -' % (self.source, self.args) + self.command = 'sox "%s" -s -q -r 44100 -t wav -c2 - | lame %s -' % (self.source, self.args) #self.command = 'lame %s "%s" -' % (self.args, self.source) # Pre-proccessing @@ -146,10 +146,10 @@ class Mp3Exporter(ExporterCore): yield chunk # Post-proccessing - self.post_process(self.item_id, - self.source, - self.metadata, - self.ext, - self.cache_dir, - self.options) + #self.post_process(self.item_id, + #self.source, + #self.metadata, + #self.ext, + #self.cache_dir, + #self.options) diff --git a/telemeta/export/ogg.py b/telemeta/export/ogg.py index 1189ab30..2d0e3326 100644 --- a/telemeta/export/ogg.py +++ b/telemeta/export/ogg.py @@ -109,7 +109,7 @@ class OggExporter(ExporterCore): self.args = self.get_args(options) self.ext = self.get_file_extension() self.args = ' '.join(self.args) - self.command = 'sox "%s" -q -w -r 44100 -t wav -c2 - | oggenc %s -' % (self.source, self.args) + self.command = 'sox "%s" -s -q -r 44100 -t wav -c2 - | oggenc %s -' % (self.source, self.args) # Pre-proccessing self.dest = self.pre_process(self.item_id, @@ -125,10 +125,10 @@ class OggExporter(ExporterCore): yield chunk # Post-proccessing - self.post_process(self.item_id, - self.source, - self.metadata, - self.ext, - self.cache_dir, - self.options) + #self.post_process(self.item_id, + #self.source, + #self.metadata, + #self.ext, + #self.cache_dir, + #self.options) diff --git a/telemeta/export/wav.py b/telemeta/export/wav.py index 576bb87a..86619f9d 100644 --- a/telemeta/export/wav.py +++ b/telemeta/export/wav.py @@ -61,7 +61,7 @@ class WavExporter(ExporterCore): try: file_name, ext = get_file_name(self.source) dest = self.cache_dir+os.sep+file_name+'.wav' - os.system('sox "'+self.source+'" -w -r 44100 -t wav -c2 "'+ \ + os.system('sox "'+self.source+'" -s -r 44100 -t wav -c2 "'+ \ dest+'.wav"') self.source = dest return dest @@ -131,7 +131,7 @@ class WavExporter(ExporterCore): # Create the par2 key #if 'par2' in self.metadata and self.metadata['par2']: - self.create_par_key() + #self.create_par_key() # Pre-proccessing self.post_process(self.item_id,