From: yomguy <> Date: Tue, 16 Dec 2008 01:02:27 +0000 (+0000) Subject: Fix flac metadata teansport during encoding, Change 'length' analyzer to 'duration' X-Git-Tag: 1.1~767 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=41604ad65311960dbafd65991bb3a07b725511c0;p=telemeta.git Fix flac metadata teansport during encoding, Change 'length' analyzer to 'duration' --- diff --git a/telemeta/analysis/__init__.py b/telemeta/analysis/__init__.py index f3b7d832..748879ee 100644 --- a/telemeta/analysis/__init__.py +++ b/telemeta/analysis/__init__.py @@ -5,7 +5,7 @@ from telemeta.analysis.format import * from telemeta.analysis.encoding import * from telemeta.analysis.resolution import * from telemeta.analysis.samplerate import * -from telemeta.analysis.length import * +from telemeta.analysis.duration import * from telemeta.analysis.max_level import * from telemeta.analysis.mean_level import * diff --git a/telemeta/analysis/duration.py b/telemeta/analysis/duration.py new file mode 100644 index 00000000..a215b78a --- /dev/null +++ b/telemeta/analysis/duration.py @@ -0,0 +1,32 @@ +# Copyright (C) 2008 Parisson SARL +# All rights reserved. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at http://svn.parisson.org/telemeta/TelemetaLicense. +# +# Author: Guillaume Pellerin + +from telemeta.analysis.core import * +from telemeta.analysis.api import IMediaItemAnalyzer +import numpy +import datetime + +class DurationAnalyzer(AudioProcessor): + """Media item analyzer driver interface""" + + implements(IMediaItemAnalyzer) + + def get_id(self): + return "duration" + + def get_name(self): + return "Duration" + + def get_unit(self): + return "h:m:s" + + def render(self, media_item, options=None): + self.pre_process(media_item) + media_time = numpy.round(float(self.frames)/(float(self.samplerate)*float(self.channels)),0) + return datetime.timedelta(0,media_time) diff --git a/telemeta/analysis/length.py b/telemeta/analysis/length.py deleted file mode 100644 index 83ce8425..00000000 --- a/telemeta/analysis/length.py +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (C) 2008 Parisson SARL -# All rights reserved. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at http://svn.parisson.org/telemeta/TelemetaLicense. -# -# Author: Guillaume Pellerin - -from telemeta.analysis.core import * -from telemeta.analysis.api import IMediaItemAnalyzer -import numpy -import datetime - -class LengthAnalyzer(AudioProcessor): - """Media item analyzer driver interface""" - - implements(IMediaItemAnalyzer) - - def get_id(self): - return "length" - - def get_name(self): - return "Length" - - def get_unit(self): - return "h:m:s" - - def render(self, media_item, options=None): - self.pre_process(media_item) - media_time = numpy.round(float(self.frames)/(float(self.samplerate)*float(self.channels)),0) - #return str(media_time) - return datetime.timedelta(0,media_time) - \ No newline at end of file diff --git a/telemeta/export/flac.py b/telemeta/export/flac.py index c7ff2ea9..116878bb 100644 --- a/telemeta/export/flac.py +++ b/telemeta/export/flac.py @@ -31,7 +31,7 @@ class FlacExporter(ExporterCore): self.options = {} self.description = '' self.dest = '' - self.quality_default = '5' + self.quality_default = '-5' self.info = [] self.buffer_size = 0xFFFF @@ -116,9 +116,8 @@ class FlacExporter(ExporterCore): self.args = self.get_args(options) self.ext = self.get_file_extension() self.args = ' '.join(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') + self.command = 'sox "%s" -s -q -r 44100 -t wav -c2 - | flac -c %s - ' \ + % (self.source, self.args) # Pre-proccessing self.dest = self.pre_process(self.item_id, @@ -130,20 +129,20 @@ 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') + pass + self.write_tags(self.dest) + file = open(self.dest,'r') + while True: - chunk = tmp_file.read(self.buffer_size) + chunk = file.read(self.buffer_size) if len(chunk) == 0: break yield chunk - tmp_file.close() + file.close() # Post-proccessing #self.post_process(self.item_id,