From 4eeded14f1c36972023a35428444f84ba7ffa913 Mon Sep 17 00:00:00 2001 From: Paul Brossier Date: Mon, 15 Apr 2013 17:35:10 -0500 Subject: [PATCH] timeside/analyzer/: factorise max_level and rms_level --- ...st_max_level.py => test_analyzer_level.py} | 6 +- timeside/analyzer/__init__.py | 3 +- timeside/analyzer/{max_level.py => level.py} | 30 ++++++---- timeside/analyzer/mean_level.py | 60 ------------------- 4 files changed, 23 insertions(+), 76 deletions(-) rename tests/{test_max_level.py => test_analyzer_level.py} (85%) rename timeside/analyzer/{max_level.py => level.py} (59%) delete mode 100644 timeside/analyzer/mean_level.py diff --git a/tests/test_max_level.py b/tests/test_analyzer_level.py similarity index 85% rename from tests/test_max_level.py rename to tests/test_analyzer_level.py index d55f6f7..d1e4553 100755 --- a/tests/test_max_level.py +++ b/tests/test_analyzer_level.py @@ -2,12 +2,12 @@ from unit_timeside import * from timeside.decoder import * -from timeside.analyzer.max_level import MaxLevel +from timeside.analyzer.level import Level -class TestAubioMelEnergy(TestCase): +class TestAnalyzerLevel(TestCase): def setUp(self): - self.analyzer = MaxLevel() + self.analyzer = Level() def testOnSweep(self): "runs on sweep" diff --git a/timeside/analyzer/__init__.py b/timeside/analyzer/__init__.py index 8a50f36..95001c3 100644 --- a/timeside/analyzer/__init__.py +++ b/timeside/analyzer/__init__.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- -from max_level import * -from mean_level import * +from level import * from dc import * from aubio_temporal import * from aubio_pitch import * diff --git a/timeside/analyzer/max_level.py b/timeside/analyzer/level.py similarity index 59% rename from timeside/analyzer/max_level.py rename to timeside/analyzer/level.py index d280326..ed585ce 100644 --- a/timeside/analyzer/max_level.py +++ b/timeside/analyzer/level.py @@ -26,32 +26,40 @@ from timeside.api import IValueAnalyzer import numpy -class MaxLevel(Processor): +class Level(Processor): implements(IValueAnalyzer) @interfacedoc def setup(self, channels=None, samplerate=None, blocksize=None, totalframes=None): - super(MaxLevel, self).setup(channels, samplerate, blocksize, totalframes) - self.value = 0 + super(Level, self).setup(channels, samplerate, blocksize, totalframes) + # max_level + self.max_value = 0 + # rms_level + self.mean_values = numpy.array([]) @staticmethod @interfacedoc def id(): - return "maxlevel_analyzer" + return "level_analyzer" @staticmethod @interfacedoc def name(): - return "Max level analyzer" + return "level analyzer" def process(self, frames, eod=False): if frames.size: - max = frames.max() - if max > self.value: - self.value = max + # max_level + max_value = frames.max() + if max_value > self.max_value: + self.max_value = max_value + # rms_level + self.mean_values = numpy.append(self.mean_values, numpy.mean(numpy.square(frames))) return frames, eod def results(self): - result = AnalyzerResult(id = "maxlevel", name = "Max level", unit = "dBFS") - result.value = numpy.round(20*numpy.log10(self.value), 3) - return AnalyzerResultContainer([result]) + max_level = AnalyzerResult(id = "max_level", name = "Max level", unit = "dBFS") + max_level.value = numpy.round(20*numpy.log10(self.max_value), 3) + rms_level = AnalyzerResult(id = "rms_level", name = "RMS level", unit = "dBFS") + rms_level.value = numpy.round(20*numpy.log10(numpy.sqrt(numpy.mean(self.mean_values))), 3) + return AnalyzerResultContainer([max_level, rms_level]) diff --git a/timeside/analyzer/mean_level.py b/timeside/analyzer/mean_level.py deleted file mode 100644 index 33bae26..0000000 --- a/timeside/analyzer/mean_level.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2007-2009 Guillaume Pellerin - -# This file is part of TimeSide. - -# TimeSide 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 2 of the License, or -# (at your option) any later version. - -# TimeSide 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 TimeSide. If not, see . - -# Author: Guillaume Pellerin - -from timeside.core import Processor, implements, interfacedoc, FixedSizeInputAdapter -from timeside.analyzer.core import * -from timeside.api import IValueAnalyzer -import numpy - - -class MeanLevel(Processor): - implements(IValueAnalyzer) - - @interfacedoc - def setup(self, channels=None, samplerate=None, blocksize=None, totalframes=None): - super(MeanLevel, self).setup(channels, samplerate, blocksize, totalframes) - self.values = numpy.array([]) - - @staticmethod - @interfacedoc - def id(): - return "rmslevel" - - @staticmethod - @interfacedoc - def name(): - return "RMS level" - - @staticmethod - @interfacedoc - def unit(): - return "dBFS" - - def __str__(self): - return "%s %s" % (str(self.value), unit()) - - def process(self, frames, eod=False): - if frames.size: - self.values = numpy.append(self.values, numpy.mean(numpy.square(frames))) - return frames, eod - - def result(self): - return numpy.round(20*numpy.log10(numpy.sqrt(numpy.mean(self.values))), 3) -- 2.39.5