Index: webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/echo_path_simulation_unittest.py |
diff --git a/webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/echo_path_simulation_unittest.py b/webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/echo_path_simulation_unittest.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d9ef2c61e411ef942e2043963d60ee31b764a948 |
--- /dev/null |
+++ b/webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/echo_path_simulation_unittest.py |
@@ -0,0 +1,81 @@ |
+# 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. |
+ |
+"""Unit tests for the echo path simulation module. |
+""" |
+ |
+import shutil |
+import os |
+import tempfile |
+import unittest |
+ |
+import pydub |
+ |
+from . import echo_path_simulation |
+from . import echo_path_simulation_factory |
+from . import signal_processing |
+ |
+ |
+class TestEchoPathSimulators(unittest.TestCase): |
+ """Unit tests for the eval_scores module. |
+ """ |
+ |
+ def setUp(self): |
+ """Creates temporary data.""" |
+ self._tmp_path = tempfile.mkdtemp() |
+ |
+ # Create and save white noise. |
+ silence = pydub.AudioSegment.silent(duration=1000, frame_rate=48000) |
+ white_noise = signal_processing.SignalProcessingUtils.GenerateWhiteNoise( |
+ silence) |
+ self._audio_track_num_samples = ( |
+ signal_processing.SignalProcessingUtils.CountSamples(white_noise)) |
+ self._audio_track_filepath = os.path.join(self._tmp_path, 'white_noise.wav') |
+ signal_processing.SignalProcessingUtils.SaveWav( |
+ self._audio_track_filepath, white_noise) |
+ |
+ # Make a copy the white noise audio track file; it will be used by |
+ # echo_path_simulation.RecordedEchoPathSimulator. |
+ shutil.copy(self._audio_track_filepath, os.path.join( |
+ self._tmp_path, 'white_noise_echo.wav')) |
+ |
+ def tearDown(self): |
+ """Recursively deletes temporary folders.""" |
+ shutil.rmtree(self._tmp_path) |
+ |
+ def testRegisteredClasses(self): |
+ # Check that there is at least one registered echo path simulator. |
+ registered_classes = ( |
+ echo_path_simulation.EchoPathSimulator.REGISTERED_CLASSES) |
+ self.assertIsInstance(registered_classes, dict) |
+ self.assertGreater(len(registered_classes), 0) |
+ |
+ # Instance factory. |
+ factory = echo_path_simulation_factory.EchoPathSimulatorFactory() |
+ |
+ # Try each registered echo path simulator. |
+ for echo_path_simulator_name in registered_classes: |
+ simulator = factory.GetInstance( |
+ echo_path_simulator_class=registered_classes[ |
+ echo_path_simulator_name], |
+ render_input_filepath=self._audio_track_filepath) |
+ |
+ echo_filepath = simulator.Simulate(self._tmp_path) |
+ if echo_filepath is None: |
+ self.assertEqual(echo_path_simulation.NoEchoPathSimulator.NAME, |
+ echo_path_simulator_name) |
+ # No other tests in this case. |
+ continue |
+ |
+ # Check that the echo audio track file exists and its length is greater or |
+ # equal to that of the render audio track. |
+ self.assertTrue(os.path.exists(echo_filepath)) |
+ echo = signal_processing.SignalProcessingUtils.LoadWav(echo_filepath) |
+ self.assertGreaterEqual( |
+ signal_processing.SignalProcessingUtils.CountSamples(echo), |
+ self._audio_track_num_samples) |