# return the unit of the data dB, St, ...
return "Log Probability difference"
+ @property
+ def force_samplerate(self):
+ return 16000
+
def process(self, frames, eod=False):
- if self.input_samplerate != 16000:
- raise Exception(
- '%s requires 16000 input sample rate: %d provided' %
- (self.__class__.__name__, self.input_samplerate))
return frames, eod
def post_process(self):
spectrogram = self.new_result(data_mode='value', time_mode='framewise')
spectrogram.parameters = {'FFT_SIZE': self.FFT_SIZE}
spectrogram.data_object.value = self.values
- spectrogram.data_object.y_value = np.arange(0, self.samplerate() / 2,
- self.samplerate() /
- self.FFT_SIZE)
+ nb_freq = spectrogram.data_object.value.shape[1]
+ spectrogram.data_object.y_value = (np.arange(0, nb_freq) *
+ self.samplerate() / self.FFT_SIZE)
+
self.process_pipe.results.add(spectrogram)
if not hasattr(self, 'input_stepsize'):
self.input_stepsize = self.source_blocksize
+ # Check samplerate specification if any
+ if self.force_samplerate:
+ if self.input_samplerate != self.force_samplerate:
+ raise ValueError(
+ '%s requires %d input sample rate: %d provided' %
+ (self.__class__.__name__, self.force_samplerate,
+ self.input_samplerate))
+
# default channels(), samplerate() and blocksize() implementations returns
# the source characteristics, but processors may change this behaviour by
# overloading those methods
def uuid(self):
return str(self.UUID)
+ @property
+ def force_samplerate(self):
+ return None
+
def __del__(self):
self.release()
source = self.processors[0]
items = self.processors[1:]
+
+ # Check if any processor in items need to force the asmplerate
+ force_samplerate = set([item.force_samplerate for item in items
+ if item.force_samplerate])
+ if force_samplerate:
+ if len(force_samplerate) > 1:
+ raise(ValueError,
+ "Some processors specify different samplerate")
+ force_samplerate = force_samplerate.pop()
+
+ if samplerate and samplerate != force_samplerate:
+ raise(ValueError, "A processor try to force the samplerate")
+
+ samplerate = force_samplerate
+
source.setup(channels=channels, samplerate=samplerate,
blocksize=blocksize)
source.SIG_STOP = False