From: Thomas Fillon Date: Tue, 15 Oct 2013 17:52:33 +0000 (+0200) Subject: Fix Vamp Simple host analyzer to support default empty parameter X-Git-Tag: 0.5.0~20 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=4837e0ce06093d478537d5fc4f6a3ff1fdc5b6ac;p=timeside.git Fix Vamp Simple host analyzer to support default empty parameter --- diff --git a/tests/api/exempleCMMR_vamp.py b/tests/api/exempleCMMR_vamp.py index eccaeb0..a0343ae 100644 --- a/tests/api/exempleCMMR_vamp.py +++ b/tests/api/exempleCMMR_vamp.py @@ -15,7 +15,7 @@ wav_file = sys.argv[-1] #wav_file = '/home/thomas/code/timeside/voix.wav' # normal -d = timeside.decoder.FileDecoder(wav_file, start=0, duration=10) +d = timeside.decoder.FileDecoder(wav_file) specgram = timeside.analyzer.Spectrogram() waveform = timeside.analyzer.Waveform() @@ -36,7 +36,8 @@ print my_plugin # # Vamp plugin Analyzer -vamp = timeside.analyzer.VampSimpleHost([my_plugin]) +#vamp = timeside.analyzer.VampSimpleHost([my_plugin]) +vamp = timeside.analyzer.VampSimpleHost() # myPipe = (d | vamp | specgram | waveform).run() diff --git a/timeside/analyzer/core.py b/timeside/analyzer/core.py index e7c77da..2d50b43 100644 --- a/timeside/analyzer/core.py +++ b/timeside/analyzer/core.py @@ -337,8 +337,6 @@ class DataObject(MetadataObject): raise TypeError( 'Result Data can not accept type %s for %s' % (value.dtype.type, name)) - elif name == 'dataType': - return super(DataObject, self).__setattr__(name, value) diff --git a/timeside/analyzer/vamp_plugin.py b/timeside/analyzer/vamp_plugin.py index 9561929..5e64505 100644 --- a/timeside/analyzer/vamp_plugin.py +++ b/timeside/analyzer/vamp_plugin.py @@ -33,8 +33,8 @@ class VampSimpleHost(Analyzer): def __init__(self, plugin_list=None): if plugin_list is None: - #plugin_list = self.get_plugins_list() - plugin_list = [['vamp-example-plugins', 'percussiononsets', 'detectionfunction']] + plugin_list = self.get_plugins_list() + #plugin_list = [['vamp-example-plugins', 'percussiononsets', 'detectionfunction']] self.plugin_list = plugin_list @@ -71,39 +71,42 @@ class VampSimpleHost(Analyzer): for plugin_line in self.plugin_list: plugin = ':'.join(plugin_line) - (blocksize, stepsize, values) = self.vamp_plugin(plugin, wavfile) + (time, duration, value) = self.vamp_plugin(plugin, wavfile) - self.result_blocksize = blocksize - self.result_stepsize = stepsize - self.result_samplerate = self.mediainfo()['samplerate'] + if duration is not None: + plugin_res = self.new_result(data_mode='value', time_mode='segment') + plugin_res.data_object.duration = duration + else: + plugin_res = self.new_result(data_mode='value', time_mode='event') - plugin_res = self.new_result(data_mode='value', time_mode='framewise') + plugin_res.data_object.time = time + plugin_res.data_object.value = value - # Fix strat, duration issues if audio is a segment - if self.mediainfo()['is_segment']: - start_index = np.floor(self.mediainfo()['start'] * - self.result_samplerate / - self.result_stepsize) - stop_index = np.ceil((self.mediainfo()['start'] + - self.mediainfo()['duration']) * - self.result_samplerate / - self.result_stepsize) - - fixed_start = (start_index * self.result_stepsize / - self.result_samplerate) - fixed_duration = ((stop_index - start_index) * self.result_stepsize / - self.result_samplerate) - - plugin_res.audio_metadata.start = fixed_start - plugin_res.audio_metadata.duration = fixed_duration - - values = values[start_index:stop_index + 1] +# # Fix strat, duration issues if audio is a segment +# if self.mediainfo()['is_segment']: +# start_index = np.floor(self.mediainfo()['start'] * +# self.result_samplerate / +# self.result_stepsize) +# +# stop_index = np.ceil((self.mediainfo()['start'] + +# self.mediainfo()['duration']) * +# self.result_samplerate / +# self.result_stepsize) +# +# fixed_start = (start_index * self.result_stepsize / +# self.result_samplerate) +# fixed_duration = ((stop_index - start_index) * self.result_stepsize / +# self.result_samplerate) +# +# plugin_res.audio_metadata.start = fixed_start +# plugin_res.audio_metadata.duration = fixed_duration +# +# value = value[start_index:stop_index + 1] plugin_res.id_metadata.id += '.' + '.'.join(plugin_line[1:]) plugin_res.id_metadata.name += ' ' + \ ' '.join(plugin_line[1:]) - plugin_res.data_object.value = values self._results.add(plugin_res) @@ -128,10 +131,19 @@ class VampSimpleHost(Analyzer): blocksize = int(m.groups()[0]) stepsize = int(m.groups()[1]) # Get the results - values = np.asfarray([line.split(': ')[1] for line in res]) - # TODO int support ? - return (blocksize, stepsize, values) + value = np.asfarray([line.split(': ')[1].split(' ') for line in res if (len(line.split(': ')) > 1)]) + time = np.asfarray([r.split(':')[0].split(',')[0] for r in res]) + + time_len = len(res[0].split(':')[0].split(',')) + if time_len == 1: + # event + duration = None + elif time_len == 2: + # segment + duration = np.asfarray([r.split(':')[0].split(',')[1] for r in res]) + + return (time, duration, value) @staticmethod def get_plugins_list():