diff --git a/webrtc/tools/BUILD.gn b/webrtc/tools/BUILD.gn
index 04c4543..37f015c 100644
--- a/webrtc/tools/BUILD.gn
+++ b/webrtc/tools/BUILD.gn
@@ -219,28 +219,6 @@
     ]
   }
 
-  rtc_executable("audio_e2e_harness") {
-    testonly = true
-    sources = [
-      "e2e_quality/audio/audio_e2e_harness.cc",
-    ]
-
-    if (is_clang) {
-      # Suppress warnings from the Chromium Clang plugin.
-      # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
-      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
-    }
-
-    deps = [
-      "../system_wrappers:system_wrappers_default",
-      "../test:channel_transport",
-      "../voice_engine",
-      "//build/win:default_exe_manifest",
-      "//testing/gtest",
-      "//third_party/gflags",
-    ]
-  }
-
   if (is_android || is_ios) {
     tools_unittests_resources = [ "//resources/foreman_cif.yuv" ]
   }
diff --git a/webrtc/tools/DEPS b/webrtc/tools/DEPS
index e4b85c8..0352450 100644
--- a/webrtc/tools/DEPS
+++ b/webrtc/tools/DEPS
@@ -6,6 +6,5 @@
   "+webrtc/modules/congestion_controller",
   "+webrtc/modules/rtp_rtcp",
   "+webrtc/system_wrappers",
-  "+webrtc/voice_engine",
 ]
 
diff --git a/webrtc/tools/e2e_quality/audio/README b/webrtc/tools/e2e_quality/audio/README
deleted file mode 100644
index aa85385..0000000
--- a/webrtc/tools/e2e_quality/audio/README
+++ /dev/null
@@ -1,27 +0,0 @@
-The tools here run an end-to-end audio quality test on Linux using PulseAudio.
-
-INSTALLATION
-The test depends on PulseAudio virtual devices (null sinks). Without additional
-arguments, run_audio_test.py expects a pair of sinks named "capture" and
-"render". To create these devices at machine startup, place the provided
-default.pa file in ~/.pulse. Alternately, the "pacmd" commands therein can be
-run on the command-line to create the devices.
-
-Similarly, place the provided daemon.conf file in ~/.pulse to use high quality
-resampling in PulseAudio. This will reduce the resampling impact on the outcome
-of the test.
-
-Build all WebRTC targets as usual (or just the audio_e2e_harness target) to
-generate the VoiceEngine harness.
-
-USAGE
-Run run_audio_test.py to start. The script has reasonable defaults and will
-use the expected location of audio_e2e_harness. Some settings will usually
-be provided by the user, particularly the comparison tool command-line and
-regular expression to extract the quality metric.
-
-An example command-line, run from trunk/
-
-webrtc/tools/e2e_quality/audio/run_audio_test.py \
---input=data/voice_engine/audio_short16.pcm --output=e2e_audio_out.pcm \
---codec=L16 --compare="comparison-tool" --regexp="(\d\.\d{3})"
diff --git a/webrtc/tools/e2e_quality/audio/audio_e2e_harness.cc b/webrtc/tools/e2e_quality/audio/audio_e2e_harness.cc
deleted file mode 100644
index fb07b56..0000000
--- a/webrtc/tools/e2e_quality/audio/audio_e2e_harness.cc
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- *  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.
- */
-
-// Sets up a simple VoiceEngine loopback call with the default audio devices
-// and runs forever. Some parameters can be configured through command-line
-// flags.
-
-#include <memory>
-
-#include "gflags/gflags.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-#include "webrtc/test/channel_transport/channel_transport.h"
-#include "webrtc/voice_engine/include/voe_audio_processing.h"
-#include "webrtc/voice_engine/include/voe_base.h"
-#include "webrtc/voice_engine/include/voe_codec.h"
-#include "webrtc/voice_engine/include/voe_hardware.h"
-#include "webrtc/voice_engine/include/voe_network.h"
-
-DEFINE_string(render, "render", "render device name");
-DEFINE_string(codec, "ISAC", "codec name");
-DEFINE_int32(rate, 16000, "codec sample rate in Hz");
-
-namespace webrtc {
-namespace test {
-
-void RunHarness() {
-  VoiceEngine* voe = VoiceEngine::Create();
-  ASSERT_TRUE(voe != NULL);
-  VoEAudioProcessing* audio = VoEAudioProcessing::GetInterface(voe);
-  ASSERT_TRUE(audio != NULL);
-  VoEBase* base = VoEBase::GetInterface(voe);
-  ASSERT_TRUE(base != NULL);
-  VoECodec* codec = VoECodec::GetInterface(voe);
-  ASSERT_TRUE(codec != NULL);
-  VoEHardware* hardware = VoEHardware::GetInterface(voe);
-  ASSERT_TRUE(hardware != NULL);
-  VoENetwork* network = VoENetwork::GetInterface(voe);
-  ASSERT_TRUE(network != NULL);
-
-  ASSERT_EQ(0, base->Init());
-  int channel = base->CreateChannel();
-  ASSERT_NE(-1, channel);
-
-  std::unique_ptr<VoiceChannelTransport> voice_channel_transport(
-      new VoiceChannelTransport(network, channel));
-
-  ASSERT_EQ(0, voice_channel_transport->SetSendDestination("127.0.0.1", 1234));
-  ASSERT_EQ(0, voice_channel_transport->SetLocalReceiver(1234));
-
-  CodecInst codec_params = {0};
-  bool codec_found = false;
-  for (int i = 0; i < codec->NumOfCodecs(); i++) {
-    ASSERT_EQ(0, codec->GetCodec(i, codec_params));
-    if (FLAGS_codec.compare(codec_params.plname) == 0 &&
-        FLAGS_rate == codec_params.plfreq) {
-      codec_found = true;
-      break;
-    }
-  }
-  ASSERT_TRUE(codec_found);
-  ASSERT_EQ(0, codec->SetSendCodec(channel, codec_params));
-
-  int num_devices = 0;
-  ASSERT_EQ(0, hardware->GetNumOfPlayoutDevices(num_devices));
-  char device_name[128] = {0};
-  char guid[128] = {0};
-  bool device_found = false;
-  int device_index;
-  for (device_index = 0; device_index < num_devices; device_index++) {
-    ASSERT_EQ(0, hardware->GetPlayoutDeviceName(device_index, device_name,
-                                                guid));
-    if (FLAGS_render.compare(device_name) == 0) {
-      device_found = true;
-      break;
-    }
-  }
-  ASSERT_TRUE(device_found);
-  ASSERT_EQ(0, hardware->SetPlayoutDevice(device_index));
-
-  // Disable all audio processing.
-  ASSERT_EQ(0, audio->SetAgcStatus(false));
-  ASSERT_EQ(0, audio->SetEcStatus(false));
-  ASSERT_EQ(0, audio->EnableHighPassFilter(false));
-  ASSERT_EQ(0, audio->SetNsStatus(false));
-
-  ASSERT_EQ(0, base->StartReceive(channel));
-  ASSERT_EQ(0, base->StartPlayout(channel));
-  ASSERT_EQ(0, base->StartSend(channel));
-
-  // Run forever...
-  while (1) {
-  }
-}
-
-}  // namespace test
-}  // namespace webrtc
-
-int main(int argc, char** argv) {
-  google::ParseCommandLineFlags(&argc, &argv, true);
-  webrtc::test::RunHarness();
-}
diff --git a/webrtc/tools/e2e_quality/audio/daemon.conf b/webrtc/tools/e2e_quality/audio/daemon.conf
deleted file mode 100644
index 26c4df4..0000000
--- a/webrtc/tools/e2e_quality/audio/daemon.conf
+++ /dev/null
@@ -1 +0,0 @@
-resample-method = speex-float-9
diff --git a/webrtc/tools/e2e_quality/audio/default.pa b/webrtc/tools/e2e_quality/audio/default.pa
deleted file mode 100755
index adef2db..0000000
--- a/webrtc/tools/e2e_quality/audio/default.pa
+++ /dev/null
@@ -1,6 +0,0 @@
-# Place in ~/.pulse/ to add null sinks for the audio end-to-end quality test.
-
-.include /etc/pulse/default.pa
-
-load-module module-null-sink sink_name=render sink_properties=device.description=render format=s16 rate=48000 channels=1
-load-module module-null-sink sink_name=capture sink_properties=device.description=capture format=s16 rate=48000 channels=1
diff --git a/webrtc/tools/e2e_quality/audio/perf b/webrtc/tools/e2e_quality/audio/perf
deleted file mode 120000
index fa37c96..0000000
--- a/webrtc/tools/e2e_quality/audio/perf
+++ /dev/null
@@ -1 +0,0 @@
-../../../../tools/perf
\ No newline at end of file
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 51caa42..0000000
--- 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))
diff --git a/webrtc/tools/tools.gyp b/webrtc/tools/tools.gyp
index 1477a83..12eff5d 100644
--- a/webrtc/tools/tools.gyp
+++ b/webrtc/tools/tools.gyp
@@ -177,20 +177,6 @@
           ],
         },  # activity_metric
         {
-          'target_name': 'audio_e2e_harness',
-          'type': 'executable',
-          'dependencies': [
-            '<(webrtc_root)/test/test.gyp:channel_transport',
-            '<(webrtc_root)/voice_engine/voice_engine.gyp:voice_engine',
-            '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers_default',
-            '<(DEPTH)/testing/gtest.gyp:gtest',
-            '<(DEPTH)/third_party/gflags/gflags.gyp:gflags',
-          ],
-          'sources': [
-            'e2e_quality/audio/audio_e2e_harness.cc',
-          ],
-        }, # audio_e2e_harness
-        {
           'target_name': 'tools_unittests',
           'type': '<(gtest_target_type)',
           'dependencies': [
