Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1518)

Unified Diff: webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/noise_generation_unittest.py

Issue 2718133002: APM Quality Assessment tool, environmental noise generator (Closed)
Patch Set: comments from Per addressed Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/noise_generation_unittest.py
diff --git a/webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/noise_generation_unittest.py b/webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/noise_generation_unittest.py
new file mode 100644
index 0000000000000000000000000000000000000000..55fd1fd2a8a7e775e475c48d6df08b5527cfec20
--- /dev/null
+++ b/webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/noise_generation_unittest.py
@@ -0,0 +1,118 @@
+# Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
+#
+# Use of this source code is governed by a BSD-style license
+# that can be found in the LICENSE file in the root of the source
+# tree. An additional intellectual property rights grant can be found
+# in the file PATENTS. All contributing project authors may
+# be found in the AUTHORS file in the root of the source tree.
+
+import os
+import shutil
+import tempfile
+import unittest
+
+from . import noise_generation
+from . import signal_processing
+
+class TestNoiseGen(unittest.TestCase):
+
+ def setUp(self):
+ """Create temporary folders."""
+ self._base_output_path = tempfile.mkdtemp()
+ self._input_noise_cache_path = tempfile.mkdtemp()
+
+ def tearDown(self):
+ """Recursively delete temporary folders."""
+ shutil.rmtree(self._base_output_path)
+ shutil.rmtree(self._input_noise_cache_path)
+
+ def testNoiseGenerators(self):
+ # Preliminary check.
+ self.assertTrue(os.path.exists(self._base_output_path))
+ self.assertTrue(os.path.exists(self._input_noise_cache_path))
+
+ # Check that there is at least one registered noise generator.
+ registered_classes = noise_generation.NoiseGenerator.REGISTERED_CLASSES
+ self.assertIsInstance(registered_classes, dict)
+ self.assertGreater(len(registered_classes), 0)
+
+ # Use a sample input file as clean input signal.
+ input_signal_filepath = os.path.join(
+ os.getcwd(), 'probing_signals', 'tone-880.wav')
+ self.assertTrue(os.path.exists(input_signal_filepath))
+
+ # Load input signal.
+ input_signal = signal_processing.SignalProcessingUtils.load_wav(
+ input_signal_filepath)
+
+ # Try each registered noise generator.
+ for noise_generator_name in registered_classes:
+ # Instance noise generator.
+ noise_generator_class = registered_classes[noise_generator_name]
+ noise_generator = noise_generator_class()
+
+ # Generate the noisy input - reference pairs.
+ noise_generator.generate(
+ input_signal_filepath=input_signal_filepath,
+ input_noise_cache_path=self._input_noise_cache_path,
+ base_output_path=self._base_output_path)
+
+ # Perform checks.
+ self._CheckNoiseGeneratorPairsListSizes(noise_generator)
+ self._CheckNoiseGeneratorPairsSignalDurations(
+ noise_generator, input_signal)
+ self._CheckNoiseGeneratorPairsOutputPaths(noise_generator)
+
+ def _CheckNoiseGeneratorPairsListSizes(self, noise_generator):
+ # Noise configuration names.
+ noise_config_names = noise_generator.config_names
+ number_of_pairs = len(noise_config_names)
+
+ # Check.
+ self.assertEqual(number_of_pairs,
+ len(noise_generator.noisy_signal_filepaths))
+ self.assertEqual(number_of_pairs,
+ len(noise_generator.output_paths))
+ self.assertEqual(number_of_pairs,
+ len(noise_generator.reference_signal_filepaths))
+
+ def _CheckNoiseGeneratorPairsSignalDurations(
+ self, noise_generator, input_signal):
+ """Checks that the noisy input and the reference tracks are audio files
+ with duration >= to that of the input signal.
+ """
+ input_signal_length = (
+ signal_processing.SignalProcessingUtils.count_samples(input_signal))
+
+ # Iterate over the noisy signal - reference pairs.
+ for noise_config_name in noise_generator.config_names:
+ # Load the noisy input file.
+ noisy_signal_filepath = noise_generator.noisy_signal_filepaths[
+ noise_config_name]
+ noisy_signal = signal_processing.SignalProcessingUtils.load_wav(
+ noisy_signal_filepath)
+
+ # Check noisy input signal length.
+ noisy_signal_length = (
+ signal_processing.SignalProcessingUtils.count_samples(noisy_signal))
+ self.assertGreaterEqual(noisy_signal_length, input_signal_length)
+
+ # Load the reference file.
+ reference_signal_filepath = (
+ noise_generator.reference_signal_filepaths[noise_config_name])
+ reference_signal = signal_processing.SignalProcessingUtils.load_wav(
+ reference_signal_filepath)
+
+ # Check noisy input signal length.
+ reference_signal_length = (
+ signal_processing.SignalProcessingUtils.count_samples(
+ reference_signal))
+ self.assertGreaterEqual(reference_signal_length, input_signal_length)
+
+ def _CheckNoiseGeneratorPairsOutputPaths(self, noise_generator):
+ """Checks that the output path created by the generator exists.
+ """
+ # Iterate over the noisy signal - reference pairs.
+ for noise_config_name in noise_generator.config_names:
+ output_path = noise_generator.output_paths[noise_config_name]
+ self.assertTrue(os.path.exists(output_path))

Powered by Google App Engine
This is Rietveld 408576698