From e78e330d39242355aa8c7d0f9b9d3a7f9de84db5 Mon Sep 17 00:00:00 2001 From: iver56 Date: Sun, 15 May 2016 15:34:14 +0200 Subject: [PATCH] Handle the case where Essentia won't analyze silent sounds --- analyze.py | 2 +- essentia_analyzer.py | 9 +++++++++ neuroevolution.py | 6 +++++- sound_file.py | 1 + 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/analyze.py b/analyze.py index 6a7dfb4..7ae9e13 100644 --- a/analyze.py +++ b/analyze.py @@ -74,7 +74,7 @@ def analyze_multiple(self, sound_files, standardize=True): self.add_derivative_series(sound_files) if standardize: - self.add_standardized_series(sound_files) + self.add_standardized_series([sf for sf in sound_files if not sf.is_silent]) def ensure_equal_lengths(self, sounds, series_key='series'): # Check if series length is equal for all series, and if not, try to fix it with padding diff --git a/essentia_analyzer.py b/essentia_analyzer.py index c36449e..b4cb1ad 100644 --- a/essentia_analyzer.py +++ b/essentia_analyzer.py @@ -91,6 +91,15 @@ def analyze_multiple(self, sound_files): for j in range(len(processes)): processes[j].wait() + stdout = processes[j].communicate()[0] + if settings.VERBOSE: + print(stdout) + if 'completely silent file' in stdout: + if settings.VERBOSE: + print('Discarding completely silent file') + sound_files[i + j].is_silent = True + continue + self.parse_output(sound_files[i + j]) self.post_process(sound_files[i + j]) self.clean_up(sound_files[i + j]) diff --git a/neuroevolution.py b/neuroevolution.py index 613988e..53288ef 100644 --- a/neuroevolution.py +++ b/neuroevolution.py @@ -432,8 +432,12 @@ def evaluate_fitness(self, individuals): ] self.analyzer.analyze_multiple(sound_files) + for ind in individuals: + if ind.output_sound.is_silent: + ind.set_fitness(0.0) + self.fitness_evaluator_class.evaluate_multiple( - individuals, + [ind for ind in individuals if not ind.output_sound.is_silent], self.target_sound ) diff --git a/sound_file.py b/sound_file.py index c102c2c..8fc2aa5 100644 --- a/sound_file.py +++ b/sound_file.py @@ -28,6 +28,7 @@ def __init__(self, filename, is_input=True, check_if_file_exists=False): 'ksmps': settings.HOP_SIZE, 'series': {} } + self.is_silent = False def compute_duration(self): with contextlib.closing(wave.open(self.file_path, 'r')) as f: