Index: webrtc/tools/e2e_quality/audio/run_audio_test.py |
diff --git a/webrtc/tools/e2e_quality/audio/run_audio_test.py b/webrtc/tools/e2e_quality/audio/run_audio_test.py |
deleted file mode 100755 |
index 51caa42cd9e45eb1bd23cbba7a02751be6ab6150..0000000000000000000000000000000000000000 |
--- a/webrtc/tools/e2e_quality/audio/run_audio_test.py |
+++ /dev/null |
@@ -1,131 +0,0 @@ |
-#!/usr/bin/env python |
-# |
-# Copyright (c) 2012 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. |
- |
-"""Runs an end-to-end audio quality test on Linux. |
- |
-Expects the presence of PulseAudio virtual devices (null sinks). These are |
-configured as default devices for a VoiceEngine audio call. A PulseAudio |
-utility (pacat) is used to play to and record from the virtual devices. |
- |
-The input reference file is then compared to the output file. |
-""" |
- |
-import optparse |
-import os |
-import re |
-import shlex |
-import subprocess |
-import sys |
-import time |
- |
-import perf.perf_utils |
- |
-def main(argv): |
- parser = optparse.OptionParser() |
- usage = 'Usage: %prog [options]' |
- parser.set_usage(usage) |
- parser.add_option('--input', default='input.pcm', help='input PCM file') |
- parser.add_option('--output', default='output.pcm', help='output PCM file') |
- parser.add_option('--codec', default='ISAC', help='codec name') |
- parser.add_option('--rate', default='16000', help='sample rate in Hz') |
- parser.add_option('--channels', default='1', help='number of channels') |
- parser.add_option('--play_sink', default='capture', |
- help='name of PulseAudio sink to which to play audio') |
- parser.add_option('--rec_sink', default='render', |
- help='name of PulseAudio sink whose monitor will be recorded') |
- parser.add_option('--harness', |
- default=os.path.abspath(os.path.dirname(sys.argv[0]) + |
- '/../../../out/Debug/audio_e2e_harness'), |
- help='path to audio harness executable') |
- parser.add_option('--compare', |
- help='command-line arguments for comparison tool') |
- parser.add_option('--regexp', |
- help='regular expression to extract the comparison metric') |
- options, _ = parser.parse_args(argv[1:]) |
- |
- # Get the initial default capture device, to restore later. |
- command = ['pacmd', 'list-sources'] |
- print ' '.join(command) |
- proc = subprocess.Popen(command, stdout=subprocess.PIPE) |
- output = proc.communicate()[0] |
- if proc.returncode != 0: |
- return proc.returncode |
- default_source = re.search(r'(^ \* index: )([0-9]+$)', output, |
- re.MULTILINE).group(2) |
- |
- # Set the default capture device to be used by VoiceEngine. We unfortunately |
- # need to do this rather than select the devices directly through the harness |
- # because monitor sources don't appear in VoiceEngine except as defaults. |
- # |
- # We pass the render device for VoiceEngine to select because (for unknown |
- # reasons) the virtual device is sometimes not used when the default. |
- command = ['pacmd', 'set-default-source', options.play_sink + '.monitor'] |
- print ' '.join(command) |
- retcode = subprocess.call(command, stdout=subprocess.PIPE) |
- if retcode != 0: |
- return retcode |
- |
- command = [options.harness, '--render=' + options.rec_sink, |
- '--codec=' + options.codec, '--rate=' + options.rate] |
- print ' '.join(command) |
- voe_proc = subprocess.Popen(command) |
- |
- # If recording starts before there is data available, pacat sometimes |
- # inexplicably adds a large delay to the start of the file. We wait here in |
- # an attempt to prevent that, because VoE often takes some time to startup a |
- # call. |
- time.sleep(5) |
- |
- format_args = ['--format=s16le', '--rate=' + options.rate, |
- '--channels=' + options.channels, '--raw'] |
- command = (['pacat', '-p', '-d', options.play_sink] + format_args + |
- [options.input]) |
- print ' '.join(command) |
- play_proc = subprocess.Popen(command) |
- |
- command = (['pacat', '-r', '-d', options.rec_sink + '.monitor'] + |
- format_args + [options.output]) |
- print ' '.join(command) |
- record_proc = subprocess.Popen(command) |
- |
- retcode = play_proc.wait() |
- # If these ended early, an exception will be thrown here. |
- record_proc.kill() |
- voe_proc.kill() |
- if retcode != 0: |
- return retcode |
- |
- # Restore the initial default capture device. |
- command = ['pacmd', 'set-default-source', default_source] |
- print ' '.join(command) |
- retcode = subprocess.call(command, stdout=subprocess.PIPE) |
- if retcode != 0: |
- return retcode |
- |
- if options.compare and options.regexp: |
- command = shlex.split(options.compare) + [options.input, options.output] |
- print ' '.join(command) |
- proc = subprocess.Popen(command, stdout=subprocess.PIPE) |
- output = proc.communicate()[0] |
- if proc.returncode != 0: |
- return proc.returncode |
- |
- # The list should only contain one item. |
- value = ''.join(re.findall(options.regexp, output)) |
- |
- perf.perf_utils.PrintPerfResult(graph_name='audio_e2e_score', |
- series_name='e2e_score', |
- data_point=value, |
- units='MOS') # Assuming we run PESQ. |
- |
- return 0 |
- |
-if __name__ == '__main__': |
- sys.exit(main(sys.argv)) |