add new file

This commit is contained in:
Thomas Vander Stichele
2012-07-12 09:38:59 +00:00
parent b9af80e76d
commit 97101ec972
3 changed files with 30 additions and 5 deletions

View File

@@ -6,17 +6,17 @@
# Copyright (C) 2009 Thomas Vander Stichele
# This file is part of morituri.
#
#
# morituri is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
#
# morituri is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# along with morituri. If not, see <http://www.gnu.org/licenses/>.
@@ -143,7 +143,9 @@ class ChecksumTask(log.Loggable, gstreamer.GstPipelineTask):
self.debug('scheduled setting to play')
def stopped(self):
self.debug('stopped')
if not self._last:
self.debug('raising EmptyError')
# see http://bugzilla.gnome.org/show_bug.cgi?id=578612
self.debug('not a single buffer gotten, raising')
self.setException(common.EmptyError('not a single buffer gotten'))
@@ -269,7 +271,7 @@ class AccurateRipChecksumTask(ChecksumTask):
return checksum
class TRMTask(gstreamer.GstPipelineTask):
class TRMTask(task.GstPipelineTask):
"""
I calculate a MusicBrainz TRM fingerprint.

View File

@@ -26,6 +26,7 @@ import shutil
import tempfile
from morituri.common import common, log
from morituri.common import task as ctask
from morituri.extern.task import task, gstreamer
@@ -124,7 +125,7 @@ LOSSY_PROFILES = {
ALL_PROFILES = PROFILES.copy()
ALL_PROFILES.update(LOSSY_PROFILES)
class EncodeTask(gstreamer.GstPipelineTask):
class EncodeTask(ctask.GstPipelineTask):
"""
I am a task that encodes a .wav file.
I set tags too.
@@ -218,6 +219,14 @@ class EncodeTask(gstreamer.GstPipelineTask):
bus.connect('message::element', self._message_element_cb)
self._level = self.pipeline.get_by_name('level')
# set an interval that is smaller than the duration
# FIXME: check level and make sure it emits level up to the last
# sample, even if input is small
interval = 1000000000L
if interval < duration:
interval = duration / 2
self._level.set_property('interval', interval)
# add a probe so we can track progress
# we connect to level because this gives us offset in samples
srcpad = self._level.get_static_pad('src')
@@ -268,6 +277,8 @@ class EncodeTask(gstreamer.GstPipelineTask):
self.peak = math.sqrt(math.pow(10, self._peakdB / 10.0))
else:
self.warning('No peak found, something went wrong!')
# workaround for when the file is too short to have volume ?
# self.peak = 0.0
class TagReadTask(gstreamer.GstPipelineTask):
"""

12
morituri/common/task.py Normal file
View File

@@ -0,0 +1,12 @@
# -*- Mode: Python -*-
# vi:si:et:sw=4:sts=4:ts=4
from morituri.extern.log import log
from morituri.extern.task import task, gstreamer
# log.Loggable first to get logging
class SyncRunner(log.Loggable, task.SyncRunner):
pass
class GstPipelineTask(log.Loggable, gstreamer.GstPipelineTask):
pass