This CL includes the following changes:
- BUILD file reorganized, unit tests now have dedicated targets.
- "fake_polqa" is a binary producing fake output in the same format of PolqaOem64; the binary is injected for unit tests instead of the actual POLQA tool.
- Minor refactoring to inject the path to the POLQA binary instead of its parent folder.
- Unit tests for the evaluation score workers.
- Unit tests for the ApmModuleSimulator class.
- Unit tests for the test data generators: ReverberationTestDataGenerator added.
BUG=webrtc:7218
Review-Url: https://codereview.webrtc.org/2811953002
Cr-Original-Commit-Position: refs/heads/master@{#17674}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: a79143f3e9ee94d332d52462356a0a955b05d63b
diff --git a/modules/audio_processing/test/py_quality_assessment/BUILD.gn b/modules/audio_processing/test/py_quality_assessment/BUILD.gn
index 363fe96..154219b 100644
--- a/modules/audio_processing/test/py_quality_assessment/BUILD.gn
+++ b/modules/audio_processing/test/py_quality_assessment/BUILD.gn
@@ -8,7 +8,15 @@
import("../../../../webrtc.gni")
-copy("py_quality_assessment") {
+group("py_quality_assessment") {
+ testonly = true
+ deps = [
+ ":scripts",
+ ":unit_tests",
+ ]
+}
+
+copy("scripts") {
testonly = true
sources = [
"README.md",
@@ -16,7 +24,6 @@
"apm_quality_assessment.sh",
"apm_quality_assessment_export.py",
"apm_quality_assessment_gencfgs.py",
- "apm_quality_assessment_unittest.py",
]
outputs = [
"$root_build_dir/py_quality_assessment/{{source_file_part}}",
@@ -28,37 +35,7 @@
"../..:audioproc_f",
"//resources/audio_processing/test/py_quality_assessment:probing_signals",
]
-} # py_quality_assessment
-
-copy("lib") {
- testonly = true
- sources = [
- "quality_assessment/__init__.py",
- "quality_assessment/audioproc_wrapper.py",
- "quality_assessment/data_access.py",
- "quality_assessment/eval_scores.py",
- "quality_assessment/eval_scores_factory.py",
- "quality_assessment/eval_scores_unittest.py",
- "quality_assessment/evaluation.py",
- "quality_assessment/exceptions.py",
- "quality_assessment/export.py",
- "quality_assessment/results.css",
- "quality_assessment/results.js",
- "quality_assessment/signal_processing.py",
- "quality_assessment/signal_processing_unittest.py",
- "quality_assessment/simulation.py",
- "quality_assessment/test_data_generation.py",
- "quality_assessment/test_data_generation_factory.py",
- "quality_assessment/test_data_generation_unittest.py",
- ]
- visibility = [ ":*" ] # Only targets in this file can depend on this.
- outputs = [
- "$root_build_dir/py_quality_assessment/quality_assessment/{{source_file_part}}",
- ]
- deps = [
- "//resources/audio_processing/test/py_quality_assessment:noise_tracks",
- ]
-} # lib
+}
copy("apm_configs") {
testonly = true
@@ -71,6 +48,33 @@
]
} # apm_configs
+copy("lib") {
+ testonly = true
+ sources = [
+ "quality_assessment/__init__.py",
+ "quality_assessment/audioproc_wrapper.py",
+ "quality_assessment/data_access.py",
+ "quality_assessment/eval_scores.py",
+ "quality_assessment/eval_scores_factory.py",
+ "quality_assessment/evaluation.py",
+ "quality_assessment/exceptions.py",
+ "quality_assessment/export.py",
+ "quality_assessment/results.css",
+ "quality_assessment/results.js",
+ "quality_assessment/signal_processing.py",
+ "quality_assessment/simulation.py",
+ "quality_assessment/test_data_generation.py",
+ "quality_assessment/test_data_generation_factory.py",
+ ]
+ visibility = [ ":*" ] # Only targets in this file can depend on this.
+ outputs = [
+ "$root_build_dir/py_quality_assessment/quality_assessment/{{source_file_part}}",
+ ]
+ deps = [
+ "//resources/audio_processing/test/py_quality_assessment:noise_tracks",
+ ]
+}
+
copy("output") {
testonly = true
sources = [
@@ -80,4 +84,52 @@
outputs = [
"$root_build_dir/py_quality_assessment/output/{{source_file_part}}",
]
-} # output
+}
+
+group("unit_tests") {
+ testonly = true
+ visibility = [ ":*" ] # Only targets in this file can depend on this.
+ deps = [
+ ":fake_polqa",
+ ":lib_unit_tests",
+ ":scripts_unit_tests",
+ ]
+}
+
+rtc_executable("fake_polqa") {
+ testonly = true
+ sources = [
+ "quality_assessment/fake_polqa.cc",
+ ]
+ visibility = [ ":*" ] # Only targets in this file can depend on this.
+ output_name = "py_quality_assessment/quality_assessment/fake_polqa"
+ deps = [
+ "//webrtc:webrtc_common",
+ "//webrtc/base:rtc_base_approved",
+ ]
+}
+
+copy("lib_unit_tests") {
+ testonly = true
+ sources = [
+ "quality_assessment/eval_scores_unittest.py",
+ "quality_assessment/signal_processing_unittest.py",
+ "quality_assessment/simulation_unittest.py",
+ "quality_assessment/test_data_generation_unittest.py",
+ ]
+ visibility = [ ":*" ] # Only targets in this file can depend on this.
+ outputs = [
+ "$root_build_dir/py_quality_assessment/quality_assessment/{{source_file_part}}",
+ ]
+}
+
+copy("scripts_unit_tests") {
+ testonly = true
+ sources = [
+ "apm_quality_assessment_unittest.py",
+ ]
+ visibility = [ ":*" ] # Only targets in this file can depend on this.
+ outputs = [
+ "$root_build_dir/py_quality_assessment/{{source_file_part}}",
+ ]
+}
diff --git a/modules/audio_processing/test/py_quality_assessment/apm_quality_assessment.py b/modules/audio_processing/test/py_quality_assessment/apm_quality_assessment.py
index 9cf1c7f..b495a74 100755
--- a/modules/audio_processing/test/py_quality_assessment/apm_quality_assessment.py
+++ b/modules/audio_processing/test/py_quality_assessment/apm_quality_assessment.py
@@ -19,9 +19,12 @@
import argparse
import logging
+import os
import sys
+import quality_assessment.audioproc_wrapper as audioproc_wrapper
import quality_assessment.eval_scores as eval_scores
+import quality_assessment.evaluation as evaluation
import quality_assessment.test_data_generation as test_data_generation
import quality_assessment.simulation as simulation
@@ -33,6 +36,8 @@
_DEFAULT_CONFIG_FILE = 'apm_configs/default.json'
+_POLQA_BIN_NAME = 'PolqaOem64'
+
def _InstanceArgumentsParser():
"""Arguments parser factory.
@@ -85,7 +90,9 @@
simulator = simulation.ApmModuleSimulator(
aechen_ir_database_path=args.air_db_path,
- polqa_tool_path=args.polqa_path)
+ polqa_tool_bin_path=os.path.join(args.polqa_path, _POLQA_BIN_NAME),
+ ap_wrapper=audioproc_wrapper.AudioProcWrapper(),
+ evaluator=evaluation.ApmModuleEvaluator())
simulator.Run(
config_filepaths=args.config_files,
input_filepaths=args.input_files,
diff --git a/modules/audio_processing/test/py_quality_assessment/quality_assessment/eval_scores.py b/modules/audio_processing/test/py_quality_assessment/quality_assessment/eval_scores.py
index e1f1a94..eec7439 100644
--- a/modules/audio_processing/test/py_quality_assessment/quality_assessment/eval_scores.py
+++ b/modules/audio_processing/test/py_quality_assessment/quality_assessment/eval_scores.py
@@ -145,21 +145,19 @@
"""
NAME = 'polqa'
- _BIN_FILENAME = 'PolqaOem64'
- def __init__(self, polqa_tool_path):
+ def __init__(self, polqa_bin_filepath):
EvaluationScore.__init__(self)
- # Path to the POLQA directory with binary and license files.
- self._polqa_tool_path = polqa_tool_path
-
# POLQA binary file path.
- self._polqa_bin_filepath = os.path.join(
- self._polqa_tool_path, self._BIN_FILENAME)
+ self._polqa_bin_filepath = polqa_bin_filepath
if not os.path.exists(self._polqa_bin_filepath):
logging.error('cannot find POLQA tool binary file')
raise exceptions.FileNotFoundError()
+ # Path to the POLQA directory with binary and license files.
+ self._polqa_tool_path, _ = os.path.split(self._polqa_bin_filepath)
+
def _Run(self, output_path):
polqa_out_filepath = os.path.join(output_path, 'polqa.out')
if os.path.exists(polqa_out_filepath):
diff --git a/modules/audio_processing/test/py_quality_assessment/quality_assessment/eval_scores_factory.py b/modules/audio_processing/test/py_quality_assessment/quality_assessment/eval_scores_factory.py
index 00e0537..4ce6458 100644
--- a/modules/audio_processing/test/py_quality_assessment/quality_assessment/eval_scores_factory.py
+++ b/modules/audio_processing/test/py_quality_assessment/quality_assessment/eval_scores_factory.py
@@ -21,8 +21,8 @@
workers.
"""
- def __init__(self, polqa_tool_path):
- self._polqa_tool_path = polqa_tool_path
+ def __init__(self, polqa_tool_bin_path):
+ self._polqa_tool_bin_path = polqa_tool_bin_path
def GetInstance(self, evaluation_score_class):
"""Creates an EvaluationScore instance given a class object.
@@ -33,7 +33,7 @@
logging.debug(
'factory producing a %s evaluation score', evaluation_score_class)
if evaluation_score_class == eval_scores.PolqaScore:
- return eval_scores.PolqaScore(self._polqa_tool_path)
+ return eval_scores.PolqaScore(self._polqa_tool_bin_path)
else:
# By default, no arguments in the constructor.
return evaluation_score_class()
diff --git a/modules/audio_processing/test/py_quality_assessment/quality_assessment/eval_scores_unittest.py b/modules/audio_processing/test/py_quality_assessment/quality_assessment/eval_scores_unittest.py
index 9b29555..dae6a7c 100644
--- a/modules/audio_processing/test/py_quality_assessment/quality_assessment/eval_scores_unittest.py
+++ b/modules/audio_processing/test/py_quality_assessment/quality_assessment/eval_scores_unittest.py
@@ -9,17 +9,76 @@
"""Unit tests for the eval_scores module.
"""
+import os
+import shutil
+import tempfile
import unittest
+import pydub
+
+from . import data_access
from . import eval_scores
+from . import eval_scores_factory
+from . import signal_processing
class TestEvalScores(unittest.TestCase):
"""Unit tests for the eval_scores module.
"""
+ def setUp(self):
+ """Create temporary output folder and two audio track files."""
+ self._output_path = tempfile.mkdtemp()
+
+ # Create fake reference and tested (i.e., APM output) audio track files.
+ silence = pydub.AudioSegment.silent(duration=1000, frame_rate=48000)
+ fake_reference_signal = (
+ signal_processing.SignalProcessingUtils.GenerateWhiteNoise(silence))
+ fake_tested_signal = (
+ signal_processing.SignalProcessingUtils.GenerateWhiteNoise(silence))
+
+ # Save fake audio tracks.
+ self._fake_reference_signal_filepath = os.path.join(
+ self._output_path, 'fake_ref.wav')
+ signal_processing.SignalProcessingUtils.SaveWav(
+ self._fake_reference_signal_filepath, fake_reference_signal)
+ self._fake_tested_signal_filepath = os.path.join(
+ self._output_path, 'fake_test.wav')
+ signal_processing.SignalProcessingUtils.SaveWav(
+ self._fake_tested_signal_filepath, fake_tested_signal)
+
+ def tearDown(self):
+ """Recursively delete temporary folder."""
+ shutil.rmtree(self._output_path)
+
def test_registered_classes(self):
+ # Preliminary check.
+ self.assertTrue(os.path.exists(self._output_path))
+
# Check that there is at least one registered evaluation score worker.
- classes = eval_scores.EvaluationScore.REGISTERED_CLASSES
- self.assertIsInstance(classes, dict)
- self.assertGreater(len(classes), 0)
+ registered_classes = eval_scores.EvaluationScore.REGISTERED_CLASSES
+ self.assertIsInstance(registered_classes, dict)
+ self.assertGreater(len(registered_classes), 0)
+
+ # Instance evaluation score workers factory with fake dependencies.
+ eval_score_workers_factory = (
+ eval_scores_factory.EvaluationScoreWorkerFactory(
+ polqa_tool_bin_path=os.path.join(
+ os.path.dirname(os.path.abspath(__file__)), 'fake_polqa')))
+
+ # Try each registered evaluation score worker.
+ for eval_score_name in registered_classes:
+ # Instance evaluation score worker.
+ eval_score_worker = eval_score_workers_factory.GetInstance(
+ registered_classes[eval_score_name])
+
+ # Set reference and test, then run.
+ eval_score_worker.SetReferenceSignalFilepath(
+ self._fake_reference_signal_filepath)
+ eval_score_worker.SetTestedSignalFilepath(
+ self._fake_tested_signal_filepath)
+ eval_score_worker.Run(self._output_path)
+
+ # Check output.
+ score = data_access.ScoreFile.Load(eval_score_worker.output_filepath)
+ self.assertTrue(isinstance(score, float))
diff --git a/modules/audio_processing/test/py_quality_assessment/quality_assessment/fake_polqa.cc b/modules/audio_processing/test/py_quality_assessment/quality_assessment/fake_polqa.cc
new file mode 100644
index 0000000..d15c522
--- /dev/null
+++ b/modules/audio_processing/test/py_quality_assessment/quality_assessment/fake_polqa.cc
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ */
+
+#include <fstream>
+#include <iostream>
+
+#include "webrtc/base/checks.h"
+
+namespace webrtc {
+namespace test {
+namespace {
+
+const char* const kErrorMessage = "-Out /path/to/output/file is mandatory";
+
+// Writes fake output intended to be parsed by
+// quality_assessment.eval_scores.PolqaScore.
+void WriteOutputFile(const std::string& output_file_path) {
+ RTC_CHECK_NE(output_file_path, "");
+ std::ofstream out(output_file_path);
+ RTC_CHECK(!out.bad());
+ out << "* Fake Polqa output" << std::endl;
+ out << "FakeField1\tPolqaScore\tFakeField2" << std::endl;
+ out << "FakeValue1\t3.25\tFakeValue2" << std::endl;
+ out.close();
+}
+
+} // namespace
+
+int main(int argc, char* argv[]) {
+ // Find "-Out" and use its next argument as output file path.
+ RTC_CHECK_GE(argc, 3) << kErrorMessage;
+ const std::string kSoughtFlagName = "-Out";
+ for (int i = 1; i < argc - 1; ++i) {
+ if (kSoughtFlagName.compare(argv[i]) == 0) {
+ WriteOutputFile(argv[i + 1]);
+ return 0;
+ }
+ }
+ FATAL() << kErrorMessage;
+}
+
+} // namespace test
+} // namespace webrtc
+
+int main(int argc, char* argv[]) {
+ return webrtc::test::main(argc, argv);
+}
diff --git a/modules/audio_processing/test/py_quality_assessment/quality_assessment/simulation.py b/modules/audio_processing/test/py_quality_assessment/quality_assessment/simulation.py
index 9ed0d43..42d76de 100644
--- a/modules/audio_processing/test/py_quality_assessment/quality_assessment/simulation.py
+++ b/modules/audio_processing/test/py_quality_assessment/quality_assessment/simulation.py
@@ -12,11 +12,9 @@
import logging
import os
-from . import audioproc_wrapper
from . import data_access
from . import eval_scores
from . import eval_scores_factory
-from . import evaluation
from . import test_data_generation
from . import test_data_generation_factory
@@ -29,10 +27,11 @@
test_data_generation.TestDataGenerator.REGISTERED_CLASSES)
_EVAL_SCORE_WORKER_CLASSES = eval_scores.EvaluationScore.REGISTERED_CLASSES
- def __init__(self, aechen_ir_database_path, polqa_tool_path):
+ def __init__(self, aechen_ir_database_path, polqa_tool_bin_path,
+ ap_wrapper, evaluator):
# Init.
- self._audioproc_wrapper = audioproc_wrapper.AudioProcWrapper()
- self._evaluator = evaluation.ApmModuleEvaluator()
+ self._audioproc_wrapper = ap_wrapper
+ self._evaluator = evaluator
# Instance factory objects.
self._test_data_generator_factory = (
@@ -40,7 +39,7 @@
aechen_ir_database_path=aechen_ir_database_path))
self._evaluation_score_factory = (
eval_scores_factory.EvaluationScoreWorkerFactory(
- polqa_tool_path=polqa_tool_path))
+ polqa_tool_bin_path=polqa_tool_bin_path))
# Properties for each run.
self._base_output_path = None
diff --git a/modules/audio_processing/test/py_quality_assessment/quality_assessment/simulation_unittest.py b/modules/audio_processing/test/py_quality_assessment/quality_assessment/simulation_unittest.py
new file mode 100644
index 0000000..1f5f2d4
--- /dev/null
+++ b/modules/audio_processing/test/py_quality_assessment/quality_assessment/simulation_unittest.py
@@ -0,0 +1,89 @@
+# 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 simulation module.
+"""
+
+import os
+import shutil
+import sys
+import tempfile
+import unittest
+
+SRC = os.path.abspath(os.path.join(
+ os.path.dirname((__file__)), os.pardir, os.pardir, os.pardir, os.pardir))
+sys.path.append(os.path.join(SRC, 'third_party', 'pymock'))
+
+import mock
+import pydub
+
+from . import audioproc_wrapper
+from . import evaluation
+from . import signal_processing
+from . import simulation
+
+
+class TestApmModuleSimulator(unittest.TestCase):
+ """Unit tests for the ApmModuleSimulator class.
+ """
+
+ def setUp(self):
+ """Create temporary folder and fake audio track."""
+ self._output_path = tempfile.mkdtemp()
+
+ silence = pydub.AudioSegment.silent(duration=1000, frame_rate=48000)
+ fake_signal = signal_processing.SignalProcessingUtils.GenerateWhiteNoise(
+ silence)
+ self._fake_audio_track_path = os.path.join(self._output_path, 'fake.wav')
+ signal_processing.SignalProcessingUtils.SaveWav(
+ self._fake_audio_track_path, fake_signal)
+
+ def tearDown(self):
+ """Recursively delete temporary folders."""
+ shutil.rmtree(self._output_path)
+
+ def testSimulation(self):
+ # Instance dependencies to inject and mock.
+ ap_wrapper = audioproc_wrapper.AudioProcWrapper()
+ evaluator = evaluation.ApmModuleEvaluator()
+ ap_wrapper.Run = mock.MagicMock(name='Run')
+ evaluator.Run = mock.MagicMock(name='Run')
+
+ # Instance simulator.
+ simulator = simulation.ApmModuleSimulator(
+ aechen_ir_database_path='',
+ polqa_tool_bin_path=os.path.join(
+ os.path.dirname(__file__), 'fake_polqa'),
+ ap_wrapper=ap_wrapper,
+ evaluator=evaluator)
+
+ # What to simulate.
+ config_files = ['apm_configs/default.json']
+ input_files = [self._fake_audio_track_path]
+ test_data_generators = ['identity', 'white_noise']
+ eval_scores = ['audio_level', 'polqa']
+
+ # Run all simulations.
+ simulator.Run(
+ config_filepaths=config_files,
+ input_filepaths=input_files,
+ test_data_generator_names=test_data_generators,
+ eval_score_names=eval_scores,
+ output_dir=self._output_path)
+
+ # Check.
+ # TODO(alessiob): Once the TestDataGenerator classes can be configured by
+ # the client code (e.g., number of SNR pairs for the white noise teste data
+ # gnerator), the exact number of calls to ap_wrapper.Run and evaluator.Run
+ # is known; use that with assertEqual.
+ min_number_of_simulations = len(config_files) * len(input_files) * len(
+ test_data_generators)
+ self.assertGreaterEqual(len(ap_wrapper.Run.call_args_list),
+ min_number_of_simulations)
+ self.assertGreaterEqual(len(evaluator.Run.call_args_list),
+ min_number_of_simulations)
diff --git a/modules/audio_processing/test/py_quality_assessment/quality_assessment/test_data_generation.py b/modules/audio_processing/test/py_quality_assessment/quality_assessment/test_data_generation.py
index 9f4df94..76f82e0 100644
--- a/modules/audio_processing/test/py_quality_assessment/quality_assessment/test_data_generation.py
+++ b/modules/audio_processing/test/py_quality_assessment/quality_assessment/test_data_generation.py
@@ -297,10 +297,11 @@
_NOISY_SIGNAL_FILENAME_TEMPLATE = '{0}_{1:d}_SNR.wav'
# TODO(alessiob): allow the user to store the noise tracks in a custom path.
- _NOISE_TRACKS_PATH = os.path.join(os.getcwd(), 'noise_tracks')
+ _NOISE_TRACKS_PATH = os.path.join(
+ os.path.dirname(__file__), os.pardir, 'noise_tracks')
- # TODO(alessiob): allow the user to have custom noise tracks.
- # TODO(alessiob): exploit TestDataGeneratorFactory.GetInstance().
+ # TODO(alessiob): Allow the user to have custom noise tracks.
+ # TODO(alessiob): Exploit TestDataGeneratorFactory.GetInstance().
_NOISE_TRACKS = [
'city.wav'
]
@@ -436,7 +437,7 @@
# Load noise track.
noise_signal = signal_processing.SignalProcessingUtils.LoadWav(
noise_track_filepath)
- except IOError: # File not found.
+ except exceptions.FileNotFoundError:
# Generate noise track by applying the impulse response.
impulse_response_filepath = os.path.join(
self._aechen_ir_database_path,
diff --git a/modules/audio_processing/test/py_quality_assessment/quality_assessment/test_data_generation_unittest.py b/modules/audio_processing/test/py_quality_assessment/quality_assessment/test_data_generation_unittest.py
index 5261dd2..909d7ba 100644
--- a/modules/audio_processing/test/py_quality_assessment/quality_assessment/test_data_generation_unittest.py
+++ b/modules/audio_processing/test/py_quality_assessment/quality_assessment/test_data_generation_unittest.py
@@ -14,6 +14,9 @@
import tempfile
import unittest
+import numpy as np
+import scipy.io
+
from . import test_data_generation
from . import test_data_generation_factory
from . import signal_processing
@@ -27,11 +30,27 @@
"""Create temporary folders."""
self._base_output_path = tempfile.mkdtemp()
self._input_noise_cache_path = tempfile.mkdtemp()
+ self._fake_air_db_path = tempfile.mkdtemp()
+
+ # Fake AIR DB impulse responses.
+ # TODO(alessiob): ReverberationTestDataGenerator will change to allow custom
+ # impulse responses. When changed, the coupling below between
+ # impulse_response_mat_file_names and
+ # ReverberationTestDataGenerator._IMPULSE_RESPONSES can be removed.
+ impulse_response_mat_file_names = [
+ 'air_binaural_lecture_0_0_1.mat',
+ 'air_binaural_booth_0_0_1.mat',
+ ]
+ for impulse_response_mat_file_name in impulse_response_mat_file_names:
+ data = {'h_air': np.random.rand(1, 1000).astype('<f8')}
+ scipy.io.savemat(os.path.join(
+ self._fake_air_db_path, impulse_response_mat_file_name), data)
def tearDown(self):
"""Recursively delete temporary folders."""
shutil.rmtree(self._base_output_path)
shutil.rmtree(self._input_noise_cache_path)
+ shutil.rmtree(self._fake_air_db_path)
def testTestDataGenerators(self):
# Preliminary check.
@@ -47,11 +66,7 @@
# Instance generators factory.
generators_factory = (
test_data_generation_factory.TestDataGeneratorFactory(
- aechen_ir_database_path=''))
- # TODO(alessiob): Replace with a mock of TestDataGeneratorFactory that
- # takes no arguments in the ctor. For those generators that need parameters,
- # it will return a mock generator (see the first comment in the next for
- # loop).
+ aechen_ir_database_path=self._fake_air_db_path))
# Use a sample input file as clean input signal.
input_signal_filepath = os.path.join(
@@ -64,16 +79,6 @@
# Try each registered test data generator.
for generator_name in registered_classes:
- # Exclude ReverberationTestDataGenerator.
- # TODO(alessiob): Mock ReverberationTestDataGenerator, the mock
- # should rely on hard-coded impulse responses. This requires a mock for
- # TestDataGeneratorFactory. The latter knows whether returning the
- # actual generator or a mock object (as in the case of
- # ReverberationTestDataGenerator).
- if generator_name == (
- test_data_generation.ReverberationTestDataGenerator.NAME):
- continue
-
# Instance test data generator.
generator = generators_factory.GetInstance(
registered_classes[generator_name])