Move FilePlayer and FileRecorder to Voice Engine

Because Voice Engine was the only user.

(This has been landed twice before, as
https://codereview.webrtc.org/2037623002 and
https://codereview.webrtc.org/2240163002. Third time's a charm!)

NOPRESUBMIT=True
TBR=kjellander@webrtc.org

Review-Url: https://codereview.webrtc.org/2247033003
Cr-Commit-Position: refs/heads/master@{#13777}
diff --git a/.gn b/.gn
index 75e2587..3a744bf 100644
--- a/.gn
+++ b/.gn
@@ -21,6 +21,9 @@
 # TODO(kjellander): Keep adding paths to this list as work in webrtc:5589 is done.
 check_targets = [
   "//webrtc/modules/audio_device/*",
+  "//webrtc/voice_engine:audio_coder",
+  "//webrtc/voice_engine:file_player",
+  "//webrtc/voice_engine:file_recorder",
   "//webrtc/voice_engine:level_indicator",
   "//webrtc/modules/audio_coding:isac_fix_test",
   "//webrtc/modules/audio_mixer:audio_conference_mixer",
diff --git a/webrtc/modules/BUILD.gn b/webrtc/modules/BUILD.gn
index 676160a..01d4ea5 100644
--- a/webrtc/modules/BUILD.gn
+++ b/webrtc/modules/BUILD.gn
@@ -306,7 +306,6 @@
       "rtp_rtcp/test/testAPI/test_api_rtcp.cc",
       "rtp_rtcp/test/testAPI/test_api_video.cc",
       "utility/source/audio_frame_operations_unittest.cc",
-      "utility/source/file_player_unittests.cc",
       "utility/source/process_thread_impl_unittest.cc",
       "video_coding/codecs/test/packet_manipulator_unittest.cc",
       "video_coding/codecs/test/stats_unittest.cc",
@@ -596,8 +595,6 @@
         "//resources/synthetic-trace.rx",
         "//resources/tmobile-downlink.rx",
         "//resources/tmobile-uplink.rx",
-        "//resources/utility/encapsulated_pcm16b_8khz.wav",
-        "//resources/utility/encapsulated_pcmu_8khz.wav",
         "//resources/verizon3g-downlink.rx",
         "//resources/verizon3g-uplink.rx",
         "//resources/verizon4g-downlink.rx",
diff --git a/webrtc/modules/audio_mixer/audio_mixer.h b/webrtc/modules/audio_mixer/audio_mixer.h
index 78cd4e5..eeeb193 100644
--- a/webrtc/modules/audio_mixer/audio_mixer.h
+++ b/webrtc/modules/audio_mixer/audio_mixer.h
@@ -16,7 +16,7 @@
 #include "webrtc/common_types.h"
 #include "webrtc/modules/audio_mixer/new_audio_conference_mixer.h"
 #include "webrtc/modules/audio_mixer/audio_mixer_defines.h"
-#include "webrtc/modules/utility/include/file_recorder.h"
+#include "webrtc/voice_engine/file_recorder.h"
 #include "webrtc/voice_engine/level_indicator.h"
 #include "webrtc/voice_engine/voice_engine_defines.h"
 
diff --git a/webrtc/modules/modules.gyp b/webrtc/modules/modules.gyp
index 094204f..68f7a51 100644
--- a/webrtc/modules/modules.gyp
+++ b/webrtc/modules/modules.gyp
@@ -358,7 +358,6 @@
             'rtp_rtcp/test/testAPI/test_api_rtcp.cc',
             'rtp_rtcp/test/testAPI/test_api_video.cc',
             'utility/source/audio_frame_operations_unittest.cc',
-            'utility/source/file_player_unittests.cc',
             'utility/source/process_thread_impl_unittest.cc',
             'video_coding/codecs/test/packet_manipulator_unittest.cc',
             'video_coding/codecs/test/stats_unittest.cc',
@@ -599,8 +598,6 @@
                 '<(DEPTH)/resources/synthetic-trace.rx',
                 '<(DEPTH)/resources/tmobile-downlink.rx',
                 '<(DEPTH)/resources/tmobile-uplink.rx',
-                '<(DEPTH)/resources/utility/encapsulated_pcm16b_8khz.wav',
-                '<(DEPTH)/resources/utility/encapsulated_pcmu_8khz.wav',
                 '<(DEPTH)/resources/verizon3g-downlink.rx',
                 '<(DEPTH)/resources/verizon3g-uplink.rx',
                 '<(DEPTH)/resources/verizon4g-downlink.rx',
diff --git a/webrtc/modules/modules_unittests.isolate b/webrtc/modules/modules_unittests.isolate
index af7e6ef..933478d 100644
--- a/webrtc/modules/modules_unittests.isolate
+++ b/webrtc/modules/modules_unittests.isolate
@@ -110,8 +110,6 @@
           '<(DEPTH)/resources/synthetic-trace.rx',
           '<(DEPTH)/resources/tmobile-downlink.rx',
           '<(DEPTH)/resources/tmobile-uplink.rx',
-          '<(DEPTH)/resources/utility/encapsulated_pcm16b_8khz.wav',
-          '<(DEPTH)/resources/utility/encapsulated_pcmu_8khz.wav',
           '<(DEPTH)/resources/verizon3g-downlink.rx',
           '<(DEPTH)/resources/verizon3g-uplink.rx',
           '<(DEPTH)/resources/verizon4g-downlink.rx',
diff --git a/webrtc/modules/utility/BUILD.gn b/webrtc/modules/utility/BUILD.gn
index 5437e4f..c3c9f0a 100644
--- a/webrtc/modules/utility/BUILD.gn
+++ b/webrtc/modules/utility/BUILD.gn
@@ -11,18 +11,10 @@
 source_set("utility") {
   sources = [
     "include/audio_frame_operations.h",
-    "include/file_player.h",
-    "include/file_recorder.h",
     "include/helpers_android.h",
     "include/jvm_android.h",
     "include/process_thread.h",
     "source/audio_frame_operations.cc",
-    "source/coder.cc",
-    "source/coder.h",
-    "source/file_player_impl.cc",
-    "source/file_player_impl.h",
-    "source/file_recorder_impl.cc",
-    "source/file_recorder_impl.h",
     "source/helpers_android.cc",
     "source/helpers_ios.mm",
     "source/jvm_android.cc",
diff --git a/webrtc/modules/utility/utility.gypi b/webrtc/modules/utility/utility.gypi
index 6e11f16..2c4e20f 100644
--- a/webrtc/modules/utility/utility.gypi
+++ b/webrtc/modules/utility/utility.gypi
@@ -20,19 +20,11 @@
       ],
       'sources': [
         'include/audio_frame_operations.h',
-        'include/file_player.h',
-        'include/file_recorder.h',
         'include/helpers_android.h',
         'include/helpers_ios.h',
         'include/jvm_android.h',
         'include/process_thread.h',
         'source/audio_frame_operations.cc',
-        'source/coder.cc',
-        'source/coder.h',
-        'source/file_player_impl.cc',
-        'source/file_player_impl.h',
-        'source/file_recorder_impl.cc',
-        'source/file_recorder_impl.h',
         'source/helpers_android.cc',
         'source/helpers_ios.mm',
         'source/jvm_android.cc',
diff --git a/webrtc/voice_engine/BUILD.gn b/webrtc/voice_engine/BUILD.gn
index e330bab..ed34637 100644
--- a/webrtc/voice_engine/BUILD.gn
+++ b/webrtc/voice_engine/BUILD.gn
@@ -9,6 +9,74 @@
 import("../build/webrtc.gni")
 import("//testing/test.gni")
 
+source_set("audio_coder") {
+  sources = [
+    "coder.cc",
+    "coder.h",
+  ]
+  configs += [ "..:common_config" ]
+  public_configs = [ "..:common_inherited_config" ]
+  deps = [
+    "..:webrtc_common",
+    "../modules/audio_coding:audio_coding",
+    "../modules/audio_coding:builtin_audio_decoder_factory",
+    "../modules/audio_coding:rent_a_codec",
+  ]
+
+  if (is_clang) {
+    # Suppress warnings from Chrome's Clang plugins.
+    # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
+    configs -= [ "//build/config/clang:find_bad_constructs" ]
+  }
+}
+
+source_set("file_player") {
+  sources = [
+    "file_player.h",
+    "file_player_impl.cc",
+    "file_player_impl.h",
+  ]
+  configs += [ "..:common_config" ]
+  public_configs = [ "..:common_inherited_config" ]
+  deps = [
+    ":audio_coder",
+    "..:webrtc_common",
+    "../common_audio:common_audio",
+    "../modules/media_file:media_file",
+    "../system_wrappers:system_wrappers",
+  ]
+
+  if (is_clang) {
+    # Suppress warnings from Chrome's Clang plugins.
+    # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
+    configs -= [ "//build/config/clang:find_bad_constructs" ]
+  }
+}
+
+source_set("file_recorder") {
+  sources = [
+    "file_recorder.h",
+    "file_recorder_impl.cc",
+    "file_recorder_impl.h",
+  ]
+  configs += [ "..:common_config" ]
+  public_configs = [ "..:common_inherited_config" ]
+  deps = [
+    ":audio_coder",
+    "..:webrtc_common",
+    "../base:rtc_base_approved",
+    "../common_audio:common_audio",
+    "../modules/media_file:media_file",
+    "../system_wrappers:system_wrappers",
+  ]
+
+  if (is_clang) {
+    # Suppress warnings from Chrome's Clang plugins.
+    # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
+    configs -= [ "//build/config/clang:find_bad_constructs" ]
+  }
+}
+
 source_set("voice_engine") {
   sources = [
     "channel.cc",
@@ -89,6 +157,8 @@
   }
 
   deps = [
+    ":file_player",
+    ":file_recorder",
     ":level_indicator",
     "..:rtc_event_log",
     "..:webrtc_common",
@@ -129,6 +199,7 @@
       ":voice_engine",
       "//testing/gmock",
       "//testing/gtest",
+      "//third_party/gflags",
       "//webrtc/common_audio",
       "//webrtc/modules/audio_coding",
       "//webrtc/modules/audio_conference_mixer",
@@ -144,10 +215,15 @@
     if (is_android) {
       deps += [ "//testing/android/native_test:native_test_native_code" ]
       shard_timeout = 900
+      data = [
+        "//resources/utility/encapsulated_pcm16b_8khz.wav",
+        "//resources/utility/encapsulated_pcmu_8khz.wav",
+      ]
     }
 
     sources = [
       "channel_unittest.cc",
+      "file_player_unittests.cc",
       "network_predictor_unittest.cc",
       "transmit_mixer_unittest.cc",
       "utility_unittest.cc",
diff --git a/webrtc/voice_engine/channel.h b/webrtc/voice_engine/channel.h
index 34e5c5a..10de18a 100644
--- a/webrtc/voice_engine/channel.h
+++ b/webrtc/voice_engine/channel.h
@@ -26,8 +26,8 @@
 #include "webrtc/modules/rtp_rtcp/include/remote_ntp_time_estimator.h"
 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h"
-#include "webrtc/modules/utility/include/file_player.h"
-#include "webrtc/modules/utility/include/file_recorder.h"
+#include "webrtc/voice_engine/file_player.h"
+#include "webrtc/voice_engine/file_recorder.h"
 #include "webrtc/voice_engine/include/voe_audio_processing.h"
 #include "webrtc/voice_engine/include/voe_network.h"
 #include "webrtc/voice_engine/level_indicator.h"
diff --git a/webrtc/modules/utility/source/coder.cc b/webrtc/voice_engine/coder.cc
similarity index 98%
rename from webrtc/modules/utility/source/coder.cc
rename to webrtc/voice_engine/coder.cc
index f2ae43e..ab724e5 100644
--- a/webrtc/modules/utility/source/coder.cc
+++ b/webrtc/voice_engine/coder.cc
@@ -8,10 +8,11 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
+#include "webrtc/voice_engine/coder.h"
+
 #include "webrtc/common_types.h"
 #include "webrtc/modules/audio_coding/codecs/builtin_audio_decoder_factory.h"
 #include "webrtc/modules/include/module_common_types.h"
-#include "webrtc/modules/utility/source/coder.h"
 
 namespace webrtc {
 namespace {
diff --git a/webrtc/modules/utility/source/coder.h b/webrtc/voice_engine/coder.h
similarity index 92%
rename from webrtc/modules/utility/source/coder.h
rename to webrtc/voice_engine/coder.h
index 5f44190..41a7c59 100644
--- a/webrtc/modules/utility/source/coder.h
+++ b/webrtc/voice_engine/coder.h
@@ -8,8 +8,8 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-#ifndef WEBRTC_MODULES_UTILITY_SOURCE_CODER_H_
-#define WEBRTC_MODULES_UTILITY_SOURCE_CODER_H_
+#ifndef WEBRTC_VOICE_ENGINE_CODER_H_
+#define WEBRTC_VOICE_ENGINE_CODER_H_
 
 #include <memory>
 
@@ -65,4 +65,4 @@
 };
 }  // namespace webrtc
 
-#endif  // WEBRTC_MODULES_UTILITY_SOURCE_CODER_H_
+#endif  // WEBRTC_VOICE_ENGINE_CODER_H_
diff --git a/webrtc/modules/utility/include/file_player.h b/webrtc/voice_engine/file_player.h
similarity index 93%
rename from webrtc/modules/utility/include/file_player.h
rename to webrtc/voice_engine/file_player.h
index b064e30..898d66c 100644
--- a/webrtc/modules/utility/include/file_player.h
+++ b/webrtc/voice_engine/file_player.h
@@ -8,8 +8,8 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-#ifndef WEBRTC_MODULES_UTILITY_INCLUDE_FILE_PLAYER_H_
-#define WEBRTC_MODULES_UTILITY_INCLUDE_FILE_PLAYER_H_
+#ifndef WEBRTC_VOICE_ENGINE_FILE_PLAYER_H_
+#define WEBRTC_VOICE_ENGINE_FILE_PLAYER_H_
 
 #include "webrtc/common_types.h"
 #include "webrtc/engine_configurations.h"
@@ -83,4 +83,5 @@
 
 };
 }  // namespace webrtc
-#endif // WEBRTC_MODULES_UTILITY_INCLUDE_FILE_PLAYER_H_
+
+#endif // WEBRTC_VOICE_ENGINE_FILE_PLAYER_H_
diff --git a/webrtc/modules/utility/source/file_player_impl.cc b/webrtc/voice_engine/file_player_impl.cc
similarity index 99%
rename from webrtc/modules/utility/source/file_player_impl.cc
rename to webrtc/voice_engine/file_player_impl.cc
index e783a7e..c1239d3 100644
--- a/webrtc/modules/utility/source/file_player_impl.cc
+++ b/webrtc/voice_engine/file_player_impl.cc
@@ -8,7 +8,8 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-#include "webrtc/modules/utility/source/file_player_impl.h"
+#include "webrtc/voice_engine/file_player_impl.h"
+
 #include "webrtc/system_wrappers/include/logging.h"
 
 namespace webrtc {
diff --git a/webrtc/modules/utility/source/file_player_impl.h b/webrtc/voice_engine/file_player_impl.h
similarity index 88%
rename from webrtc/modules/utility/source/file_player_impl.h
rename to webrtc/voice_engine/file_player_impl.h
index 62887da..82d7daf 100644
--- a/webrtc/modules/utility/source/file_player_impl.h
+++ b/webrtc/voice_engine/file_player_impl.h
@@ -8,18 +8,18 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-#ifndef WEBRTC_MODULES_UTILITY_SOURCE_FILE_PLAYER_IMPL_H_
-#define WEBRTC_MODULES_UTILITY_SOURCE_FILE_PLAYER_IMPL_H_
+#ifndef WEBRTC_VOICE_ENGINE_FILE_PLAYER_IMPL_H_
+#define WEBRTC_VOICE_ENGINE_FILE_PLAYER_IMPL_H_
 
 #include "webrtc/common_audio/resampler/include/resampler.h"
 #include "webrtc/common_types.h"
 #include "webrtc/engine_configurations.h"
 #include "webrtc/modules/media_file/media_file.h"
 #include "webrtc/modules/media_file/media_file_defines.h"
-#include "webrtc/modules/utility/include/file_player.h"
-#include "webrtc/modules/utility/source/coder.h"
 #include "webrtc/system_wrappers/include/critical_section_wrapper.h"
 #include "webrtc/typedefs.h"
+#include "webrtc/voice_engine/coder.h"
+#include "webrtc/voice_engine/file_player.h"
 
 namespace webrtc {
 class FilePlayerImpl : public FilePlayer
@@ -75,4 +75,5 @@
     float _scaling;
 };
 }  // namespace webrtc
-#endif // WEBRTC_MODULES_UTILITY_SOURCE_FILE_PLAYER_IMPL_H_
+
+#endif // WEBRTC_VOICE_ENGINE_FILE_PLAYER_IMPL_H_
diff --git a/webrtc/modules/utility/source/file_player_unittests.cc b/webrtc/voice_engine/file_player_unittests.cc
similarity index 98%
rename from webrtc/modules/utility/source/file_player_unittests.cc
rename to webrtc/voice_engine/file_player_unittests.cc
index 58471e5..dd440fb 100644
--- a/webrtc/modules/utility/source/file_player_unittests.cc
+++ b/webrtc/voice_engine/file_player_unittests.cc
@@ -10,8 +10,6 @@
 
 // Unit tests for FilePlayer.
 
-#include "webrtc/modules/utility/include/file_player.h"
-
 #include <stdio.h>
 #include <string>
 
@@ -20,6 +18,7 @@
 #include "webrtc/base/md5digest.h"
 #include "webrtc/base/stringencode.h"
 #include "webrtc/test/testsupport/fileutils.h"
+#include "webrtc/voice_engine/file_player.h"
 
 DEFINE_bool(file_player_output, false, "Generate reference files.");
 
diff --git a/webrtc/modules/utility/include/file_recorder.h b/webrtc/voice_engine/file_recorder.h
similarity index 91%
rename from webrtc/modules/utility/include/file_recorder.h
rename to webrtc/voice_engine/file_recorder.h
index 92c91bd..001a449 100644
--- a/webrtc/modules/utility/include/file_recorder.h
+++ b/webrtc/voice_engine/file_recorder.h
@@ -8,8 +8,8 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-#ifndef WEBRTC_MODULES_UTILITY_INCLUDE_FILE_RECORDER_H_
-#define WEBRTC_MODULES_UTILITY_INCLUDE_FILE_RECORDER_H_
+#ifndef WEBRTC_VOICE_ENGINE_FILE_RECORDER_H_
+#define WEBRTC_VOICE_ENGINE_FILE_RECORDER_H_
 
 #include "webrtc/common_types.h"
 #include "webrtc/engine_configurations.h"
@@ -61,4 +61,5 @@
 
 };
 }  // namespace webrtc
-#endif // WEBRTC_MODULES_UTILITY_INCLUDE_FILE_RECORDER_H_
+
+#endif // WEBRTC_VOICE_ENGINE_FILE_RECORDER_H_
diff --git a/webrtc/modules/utility/source/file_recorder_impl.cc b/webrtc/voice_engine/file_recorder_impl.cc
similarity index 98%
rename from webrtc/modules/utility/source/file_recorder_impl.cc
rename to webrtc/voice_engine/file_recorder_impl.cc
index 82b37f0..bfdc01d 100644
--- a/webrtc/modules/utility/source/file_recorder_impl.cc
+++ b/webrtc/voice_engine/file_recorder_impl.cc
@@ -8,9 +8,10 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
+#include "webrtc/voice_engine/file_recorder_impl.h"
+
 #include "webrtc/engine_configurations.h"
 #include "webrtc/modules/media_file/media_file.h"
-#include "webrtc/modules/utility/source/file_recorder_impl.h"
 #include "webrtc/system_wrappers/include/logging.h"
 
 namespace webrtc {
diff --git a/webrtc/modules/utility/source/file_recorder_impl.h b/webrtc/voice_engine/file_recorder_impl.h
similarity index 89%
rename from webrtc/modules/utility/source/file_recorder_impl.h
rename to webrtc/voice_engine/file_recorder_impl.h
index a9dd3a8..67af742 100644
--- a/webrtc/modules/utility/source/file_recorder_impl.h
+++ b/webrtc/voice_engine/file_recorder_impl.h
@@ -12,8 +12,8 @@
 // multiple file formats. The unencoded input data is written to file in the
 // encoded format specified.
 
-#ifndef WEBRTC_MODULES_UTILITY_SOURCE_FILE_RECORDER_IMPL_H_
-#define WEBRTC_MODULES_UTILITY_SOURCE_FILE_RECORDER_IMPL_H_
+#ifndef WEBRTC_VOICE_ENGINE_FILE_RECORDER_IMPL_H_
+#define WEBRTC_VOICE_ENGINE_FILE_RECORDER_IMPL_H_
 
 #include <list>
 
@@ -24,10 +24,10 @@
 #include "webrtc/modules/include/module_common_types.h"
 #include "webrtc/modules/media_file/media_file.h"
 #include "webrtc/modules/media_file/media_file_defines.h"
-#include "webrtc/modules/utility/include/file_recorder.h"
-#include "webrtc/modules/utility/source/coder.h"
 #include "webrtc/system_wrappers/include/event_wrapper.h"
 #include "webrtc/typedefs.h"
+#include "webrtc/voice_engine/coder.h"
+#include "webrtc/voice_engine/file_recorder.h"
 
 namespace webrtc {
 // The largest decoded frame size in samples (60ms with 32kHz sample rate).
@@ -76,4 +76,5 @@
     Resampler _audioResampler;
 };
 }  // namespace webrtc
-#endif // WEBRTC_MODULES_UTILITY_SOURCE_FILE_RECORDER_IMPL_H_
+
+#endif // WEBRTC_VOICE_ENGINE_FILE_RECORDER_IMPL_H_
diff --git a/webrtc/voice_engine/output_mixer.h b/webrtc/voice_engine/output_mixer.h
index ae2f53f..9bf3b35 100644
--- a/webrtc/voice_engine/output_mixer.h
+++ b/webrtc/voice_engine/output_mixer.h
@@ -16,7 +16,7 @@
 #include "webrtc/common_types.h"
 #include "webrtc/modules/audio_conference_mixer/include/audio_conference_mixer.h"
 #include "webrtc/modules/audio_conference_mixer/include/audio_conference_mixer_defines.h"
-#include "webrtc/modules/utility/include/file_recorder.h"
+#include "webrtc/voice_engine/file_recorder.h"
 #include "webrtc/voice_engine/level_indicator.h"
 #include "webrtc/voice_engine/voice_engine_defines.h"
 
diff --git a/webrtc/voice_engine/transmit_mixer.h b/webrtc/voice_engine/transmit_mixer.h
index 483af05..ebd90a7 100644
--- a/webrtc/voice_engine/transmit_mixer.h
+++ b/webrtc/voice_engine/transmit_mixer.h
@@ -16,8 +16,8 @@
 #include "webrtc/common_types.h"
 #include "webrtc/modules/audio_processing/typing_detection.h"
 #include "webrtc/modules/include/module_common_types.h"
-#include "webrtc/modules/utility/include/file_player.h"
-#include "webrtc/modules/utility/include/file_recorder.h"
+#include "webrtc/voice_engine/file_player.h"
+#include "webrtc/voice_engine/file_recorder.h"
 #include "webrtc/voice_engine/include/voe_base.h"
 #include "webrtc/voice_engine/level_indicator.h"
 #include "webrtc/voice_engine/monitor_module.h"
diff --git a/webrtc/voice_engine/voice_engine.gyp b/webrtc/voice_engine/voice_engine.gyp
index 912b522..8103f83 100644
--- a/webrtc/voice_engine/voice_engine.gyp
+++ b/webrtc/voice_engine/voice_engine.gyp
@@ -29,6 +29,8 @@
         '<(webrtc_root)/modules/modules.gyp:webrtc_utility',
         '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers',
         '<(webrtc_root)/webrtc.gyp:rtc_event_log',
+        'file_player',
+        'file_recorder',
         'level_indicator',
       ],
       'export_dependent_settings': [
@@ -95,6 +97,53 @@
       ],
     },
     {
+      'target_name': 'audio_coder',
+      'type': 'static_library',
+      'sources': [
+        'coder.cc',
+        'coder.h',
+      ],
+      'dependencies': [
+        '<(webrtc_root)/common.gyp:webrtc_common',
+        '<(webrtc_root)/modules/modules.gyp:audio_coding_module',
+        '<(webrtc_root)/modules/modules.gyp:builtin_audio_decoder_factory',
+        '<(webrtc_root)/modules/modules.gyp:rent_a_codec',
+      ],
+    },
+    {
+      'target_name': 'file_player',
+      'type': 'static_library',
+      'sources': [
+        'file_player.h',
+        'file_player_impl.cc',
+        'file_player_impl.h',
+      ],
+      'dependencies': [
+        '<(webrtc_root)/common.gyp:webrtc_common',
+        '<(webrtc_root)/common_audio/common_audio.gyp:common_audio',
+        '<(webrtc_root)/modules/modules.gyp:media_file',
+        '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers',
+        'audio_coder',
+      ],
+    },
+    {
+      'target_name': 'file_recorder',
+      'type': 'static_library',
+      'sources': [
+        'file_recorder.h',
+        'file_recorder_impl.cc',
+        'file_recorder_impl.h',
+      ],
+      'dependencies': [
+        '<(webrtc_root)/base/base.gyp:rtc_base_approved',
+        '<(webrtc_root)/common.gyp:webrtc_common',
+        '<(webrtc_root)/common_audio/common_audio.gyp:common_audio',
+        '<(webrtc_root)/modules/modules.gyp:media_file',
+        '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers',
+        'audio_coder',
+      ],
+    },
+    {
       'target_name': 'level_indicator',
       'type': 'static_library',
       'dependencies': [
@@ -121,6 +170,7 @@
             'voice_engine',
             '<(DEPTH)/testing/gmock.gyp:gmock',
             '<(DEPTH)/testing/gtest.gyp:gtest',
+            '<(DEPTH)/third_party/gflags/gflags.gyp:gflags',
             # The rest are to satisfy the unittests' include chain.
             # This would be unnecessary if we used qualified includes.
             '<(webrtc_root)/common_audio/common_audio.gyp:common_audio',
@@ -136,6 +186,7 @@
           ],
           'sources': [
             'channel_unittest.cc',
+            'file_player_unittests.cc',
             'network_predictor_unittest.cc',
             'transmit_mixer_unittest.cc',
             'utility_unittest.cc',
@@ -152,6 +203,12 @@
                 '<(DEPTH)/testing/android/native_test.gyp:native_test_native_code',
               ],
             }],
+            ['OS=="ios"', {
+              'mac_bundle_resources': [
+                '<(DEPTH)/resources/utility/encapsulated_pcm16b_8khz.wav',
+                '<(DEPTH)/resources/utility/encapsulated_pcmu_8khz.wav',
+              ],
+            }],
           ],
         },
         {
diff --git a/webrtc/voice_engine/voice_engine_unittests.isolate b/webrtc/voice_engine/voice_engine_unittests.isolate
index 0d55515..5541c4a 100644
--- a/webrtc/voice_engine/voice_engine_unittests.isolate
+++ b/webrtc/voice_engine/voice_engine_unittests.isolate
@@ -19,5 +19,13 @@
         ],
       },
     }],
+    ['OS=="linux" or OS=="mac" or OS=="win" or OS=="android"', {
+      'variables': {
+        'files': [
+          '<(DEPTH)/resources/utility/encapsulated_pcm16b_8khz.wav',
+          '<(DEPTH)/resources/utility/encapsulated_pcmu_8khz.wav',
+        ],
+      },
+    }],
   ],
 }