"runs on guitar"
self.source = os.path.join (os.path.dirname(__file__), "samples", "guitar.wav")
- max_level_value = -4.258
+ max_level_value = -4.054
rms_level_value = -21.945
self.expected = {'level.max':max_level_value , 'level.rms':rms_level_value }
from timeside.analyzer.core import Analyzer
from timeside.api import IValueAnalyzer
import numpy as np
-
+from .utils import MACHINE_EPSILON
class Level(Analyzer):
"""RMS level analyzer"""
self.max_value = max_value
# rms_level
self.mean_values = np.append(self.mean_values,
- np.mean(np.square(frames)))
+ np.mean(np.square(frames)))
return frames, eod
def post_process(self):
max_level.id_metadata.id += '.' + "max"
max_level.id_metadata.name += ' ' + "Max"
+ if self.max_value == 0: # Prevent np.log10(0) = Inf
+ self.max_value = MACHINE_EPSILON
+
max_level.data_object.value = np.round(20*np.log10(self.max_value), 3)
self.process_pipe.results.add(max_level)
rms_level.id_metadata.id += '.' + "rms"
rms_level.id_metadata.name += ' ' + "RMS"
- rms_level.data_object.value = np.round(20*np.log10(
- np.sqrt(np.mean(self.mean_values))), 3)
- self.process_pipe.results.add(rms_level)
+ rms_val = np.sqrt(np.mean(self.mean_values))
+ if rms_val == 0:
+ rms_val = MACHINE_EPSILON
+
+ rms_level.data_object.value = np.round(20*np.log10(rms_val), 3)
+ self.process_pipe.results.add(rms_level)
import numpy as np
+MACHINE_EPSILON = np.finfo(np.float32).eps
+
def downsample_blocking(frames, hop_s, dtype='float32'):
# downmixing to one channel
if len(frames.shape) != 1:
modul = np.zeros((sLen,))
w = int(wLen/2)
- if withLog:
- machine_epsilon = np.finfo(np.float32).eps
-
for i in range(w, sLen-w):
d = serie[i-w:i+w]
if withLog:
if not (d > 0).all():
- d[d <= 0] = machine_epsilon # prevent log(0)=inf
+ d[d <= 0] = MACHINE_EPSILON # prevent log(0)=inf
d = np.log(d)
modul[i] = np.var(d)