from timeside.analyzer.utils import MACHINE_EPSILON
from timeside.tools.buffering import BufferTable
-
import numpy
from scipy.signal import firwin, lfilter, lfiltic
from scipy.ndimage.morphology import binary_opening, binary_closing
# self.energy = []
-
-
- self.maxenergy = 0.002
+ self.max_energy = 0.002*2
self.min_overlap = 20
- self.threshold = 0.1
-
+ self.threshold = 0.12
@interfacedoc
def setup(self, channels=None, samplerate=None,
blocksize=None, totalframes=None):
sr = float(samplerate)
lowFreq = 100.0
- highFreq = sr / 2
+ highFreq = sr / 5
f1 = lowFreq / sr
f2 = highFreq / sr
numtaps = 10
# frames.T[0]) ** 2))]
# Compute energy
env, self.filtre_z = lfilter(b=self.filtre, a=1.0, axis=0,
- x=frames[:, 0],
+ x=frames[:,0],
zi=self.filtre_z)
self._buffer.append('energy', numpy.sqrt(numpy.mean(env ** 2)))
if self.energy.max():
self.energy = self.energy / self.energy.max()
- silences = numpy.zeros((1, len(self.energy)))[0]
- silences[self.energy < self.maxenergy] = 1
-
+ silences = [1 if e < self.max_energy else 0 for e in self.energy]
step = float(self.input_stepsize) / float(self.samplerate())
models_dir = os.path.join(timeside.__path__[0],
struct = [1] * len(prototype)
silences = binary_closing(silences, struct)
silences = binary_opening(silences, struct)
+
seg = [0, -1, silences[0]]
silencesList = []
for i, v in enumerate(silences):
seg = [i, -1, v]
seg[1] = i
silencesList.append(tuple(seg))
- segsList = []
+ selected_segs = []
candidates = []
for s in silencesList:
dist = min([d1, d2])
candidates.append((s[0], s[1], dist))
-
if dist < self.threshold:
- segsList.append(s)
+ selected_segs.append(s)
label = {0: 'Start', 1: 'Session'}
if self._save_lab:
with open('out.lab', 'w') as f:
- for s in segsList:
+ for s in selected_segs:
f.write(
'%.2f\t%.2f\t%s\n' %
(s[0] * step, s[1] * step, label[s[2]]))
segs.id_metadata.id += '.' + 'segments'
segs.id_metadata.name += ' ' + 'Segments'
segs.data_object.label_metadata.label = label
- segs.data_object.label = [s[2] for s in segsList]
+ segs.data_object.label = [s[2] for s in selected_segs]
segs.data_object.time = [(float(s[0]) * step)
- for s in segsList]
+ for s in selected_segs]
segs.data_object.duration = [(float(s[1] - s[0]) * step)
- for s in segsList]
+ for s in selected_segs]
self.add_result(segs)
def release(self):