diff --git a/audio/test/low_bandwidth_audio_test.py b/audio/test/low_bandwidth_audio_test.py index 412b267f56..93da7db16f 100755 --- a/audio/test/low_bandwidth_audio_test.py +++ b/audio/test/low_bandwidth_audio_test.py @@ -27,18 +27,6 @@ import sys SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) SRC_DIR = os.path.normpath(os.path.join(SCRIPT_DIR, os.pardir, os.pardir)) -NO_TOOLS_ERROR_MESSAGE = ( - 'Could not find PESQ or POLQA at %s.\n' - '\n' - 'To fix this run:\n' - ' python %s %s\n' - '\n' - 'Note that these tools are Google-internal due to licensing, so in order to ' - 'use them you will have to get your own license and manually put them in the ' - 'right location.\n' - 'See https://cs.chromium.org/chromium/src/third_party/webrtc/tools_webrtc/' - 'download_tools.py?rcl=bbceb76f540159e2dba0701ac03c514f01624130&l=13') - def _LogCommand(command): logging.info('Running %r', command) @@ -67,26 +55,17 @@ def _GetPlatform(): return 'linux' -def _GetPathToTools(): +def _DownloadTools(): tools_dir = os.path.join(SRC_DIR, 'tools_webrtc') toolchain_dir = os.path.join(tools_dir, 'audio_quality') - platform = _GetPlatform() - - pesq_path = os.path.join(toolchain_dir, platform, 'pesq') - if not os.path.isfile(pesq_path): - pesq_path = None - - polqa_path = os.path.join(toolchain_dir, platform, 'PolqaOem64') - if not os.path.isfile(polqa_path): - polqa_path = None - - if (platform != 'mac' and not polqa_path) or not pesq_path: - logging.error(NO_TOOLS_ERROR_MESSAGE, - toolchain_dir, - os.path.join(tools_dir, 'download_tools.py'), - toolchain_dir) + # Download PESQ and POLQA. + download_script = os.path.join(tools_dir, 'download_tools.py') + command = [sys.executable, download_script, toolchain_dir] + subprocess.check_call(_LogCommand(command)) + pesq_path = os.path.join(toolchain_dir, _GetPlatform(), 'pesq') + polqa_path = os.path.join(toolchain_dir, _GetPlatform(), 'PolqaOem64') return pesq_path, polqa_path @@ -161,8 +140,15 @@ def _RunPolqa(executable_path, reference_file, degraded_file): # Analyze audio. command = [executable_path, '-q', '-LC', 'NB', '-Ref', reference_file, '-Test', degraded_file] - process = subprocess.Popen(_LogCommand(command), - stdout=subprocess.PIPE, stderr=subprocess.PIPE) + try: + process = subprocess.Popen(_LogCommand(command), + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + except OSError as e: + if e.errno == os.errno.ENOENT: + logging.warning('POLQA executable missing, skipping test.') + return {} + else: + raise out, err = process.communicate() # Find the scores in stdout of POLQA. @@ -190,9 +176,7 @@ def main(): args = _ParseArgs() - pesq_path, polqa_path = _GetPathToTools() - if pesq_path is None: - return 1 + pesq_path, polqa_path = _DownloadTools() out_dir = os.path.join(args.build_dir, '..') if args.android: @@ -205,7 +189,7 @@ def main(): # Check if POLQA can run at all, or skip the 48 kHz tests entirely. example_path = os.path.join(SRC_DIR, 'resources', 'voice_engine', 'audio_tiny48.wav') - if polqa_path and _RunPolqa(polqa_path, example_path, example_path): + if _RunPolqa(polqa_path, example_path, example_path): analyzers.append(Analyzer(_RunPolqa, polqa_path, 48000)) for analyzer in analyzers: