Remove VoEFile and things it uses.

BUG=webrtc:4690

Review-Url: https://codereview.webrtc.org/3013033002
Cr-Commit-Position: refs/heads/master@{#19885}
diff --git a/test/mock_voice_engine.h b/test/mock_voice_engine.h
index 8f8fdac..bd65b0b 100644
--- a/test/mock_voice_engine.h
+++ b/test/mock_voice_engine.h
@@ -134,55 +134,6 @@
   MOCK_METHOD2(SetOpusMaxPlaybackRate, int(int channel, int frequency_hz));
   MOCK_METHOD2(SetOpusDtx, int(int channel, bool enable_dtx));
 
-  // VoEFile
-  MOCK_METHOD7(StartPlayingFileLocally,
-               int(int channel,
-                   const char fileNameUTF8[1024],
-                   bool loop,
-                   FileFormats format,
-                   float volumeScaling,
-                   int startPointMs,
-                   int stopPointMs));
-  MOCK_METHOD6(StartPlayingFileLocally,
-               int(int channel,
-                   InStream* stream,
-                   FileFormats format,
-                   float volumeScaling,
-                   int startPointMs,
-                   int stopPointMs));
-  MOCK_METHOD1(StopPlayingFileLocally, int(int channel));
-  MOCK_METHOD1(IsPlayingFileLocally, int(int channel));
-  MOCK_METHOD6(StartPlayingFileAsMicrophone,
-               int(int channel,
-                   const char fileNameUTF8[1024],
-                   bool loop,
-                   bool mixWithMicrophone,
-                   FileFormats format,
-                   float volumeScaling));
-  MOCK_METHOD5(StartPlayingFileAsMicrophone,
-               int(int channel,
-                   InStream* stream,
-                   bool mixWithMicrophone,
-                   FileFormats format,
-                   float volumeScaling));
-  MOCK_METHOD1(StopPlayingFileAsMicrophone, int(int channel));
-  MOCK_METHOD1(IsPlayingFileAsMicrophone, int(int channel));
-  MOCK_METHOD4(StartRecordingPlayout,
-               int(int channel,
-                   const char* fileNameUTF8,
-                   CodecInst* compression,
-                   int maxSizeBytes));
-  MOCK_METHOD1(StopRecordingPlayout, int(int channel));
-  MOCK_METHOD3(StartRecordingPlayout,
-               int(int channel, OutStream* stream, CodecInst* compression));
-  MOCK_METHOD3(StartRecordingMicrophone,
-               int(const char* fileNameUTF8,
-                   CodecInst* compression,
-                   int maxSizeBytes));
-  MOCK_METHOD2(StartRecordingMicrophone,
-               int(OutStream* stream, CodecInst* compression));
-  MOCK_METHOD0(StopRecordingMicrophone, int());
-
   // VoENetwork
   MOCK_METHOD2(RegisterExternalTransport,
                int(int channel, Transport& transport));
diff --git a/voice_engine/BUILD.gn b/voice_engine/BUILD.gn
index b61f909..57a94e2 100644
--- a/voice_engine/BUILD.gn
+++ b/voice_engine/BUILD.gn
@@ -8,69 +8,6 @@
 
 import("../webrtc.gni")
 
-rtc_static_library("audio_coder") {
-  sources = [
-    "coder.cc",
-    "coder.h",
-  ]
-  deps = [
-    "..:webrtc_common",
-    "../api/audio_codecs:builtin_audio_decoder_factory",
-    "../api/audio_codecs:builtin_audio_encoder_factory",
-    "../modules:module_api",
-    "../modules/audio_coding",
-    "../modules/audio_coding:audio_format_conversion",
-    "../modules/audio_coding:rent_a_codec",
-  ]
-
-  if (!build_with_chromium && is_clang) {
-    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
-    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
-  }
-}
-
-rtc_static_library("file_player") {
-  sources = [
-    "file_player.cc",
-    "file_player.h",
-  ]
-  deps = [
-    ":audio_coder",
-    "..:webrtc_common",
-    "../common_audio",
-    "../modules:module_api",
-    "../modules/media_file",
-    "../rtc_base:rtc_base_approved",
-  ]
-
-  if (!build_with_chromium && is_clang) {
-    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
-    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
-  }
-}
-
-rtc_static_library("file_recorder") {
-  sources = [
-    "file_recorder.cc",
-    "file_recorder.h",
-  ]
-  deps = [
-    ":audio_coder",
-    "..:webrtc_common",
-    "../audio/utility:audio_frame_operations",
-    "../common_audio",
-    "../modules:module_api",
-    "../modules/media_file:media_file",
-    "../rtc_base:rtc_base_approved",
-    "../system_wrappers",
-  ]
-
-  if (!build_with_chromium && is_clang) {
-    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
-    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
-  }
-}
-
 rtc_static_library("voice_engine") {
   sources = [
     "channel.cc",
@@ -82,7 +19,6 @@
     "include/voe_base.h",
     "include/voe_codec.h",
     "include/voe_errors.h",
-    "include/voe_file.h",
     "include/voe_network.h",
     "include/voe_rtp_rtcp.h",
     "monitor_module.h",
@@ -102,8 +38,6 @@
     "voe_base_impl.h",
     "voe_codec_impl.cc",
     "voe_codec_impl.h",
-    "voe_file_impl.cc",
-    "voe_file_impl.h",
     "voe_network_impl.cc",
     "voe_network_impl.h",
     "voe_rtp_rtcp_impl.cc",
@@ -132,8 +66,6 @@
   ]
   deps = [
     ":audio_level",
-    ":file_player",
-    ":file_recorder",
     "..:webrtc_common",
     "../api:array_view",
     "../api:audio_mixer_api",
@@ -182,7 +114,6 @@
 if (rtc_include_tests) {
   rtc_test("voice_engine_unittests") {
     deps = [
-      ":file_player",
       ":voice_engine",
       "../common_audio",
       "../modules:module_api",
@@ -211,7 +142,6 @@
 
     sources = [
       "channel_unittest.cc",
-      "file_player_unittests.cc",
       "transport_feedback_packet_loss_tracker_unittest.cc",
       "utility_unittest.cc",
       "voe_base_unittest.cc",
diff --git a/voice_engine/channel.cc b/voice_engine/channel.cc
index cc668f2..e5435d6 100644
--- a/voice_engine/channel.cc
+++ b/voice_engine/channel.cc
@@ -651,8 +651,6 @@
   // Store speech type for dead-or-alive detection
   _outputSpeechType = audioFrame->speech_type_;
 
-  ChannelState::State state = channel_state_.Get();
-
   {
     // Pass the audio buffers to an optional sink callback, before applying
     // scaling/panning, as that applies to the mix operation.
@@ -680,21 +678,6 @@
     AudioFrameOperations::ScaleWithSat(output_gain, audioFrame);
   }
 
-  // Mix decoded PCM output with file if file mixing is enabled
-  if (state.output_file_playing) {
-    MixAudioWithFile(*audioFrame, audioFrame->sample_rate_hz_);
-    muted = false;  // We may have added non-zero samples.
-  }
-
-  // Record playout if enabled
-  {
-    rtc::CritScope cs(&_fileCritSect);
-
-    if (_outputFileRecording && output_file_recorder_) {
-      output_file_recorder_->RecordAudioToFile(*audioFrame);
-    }
-  }
-
   // Measure audio level (0-9)
   // TODO(henrik.lundin) Use the |muted| information here too.
   // TODO(deadbeef): Use RmsLevel for |_outputAudioLevel| (see
@@ -774,20 +757,7 @@
     highestNeeded = receiveFrequency;
   }
 
-  // Special case, if we're playing a file on the playout side
-  // we take that frequency into consideration as well
-  // This is not needed on sending side, since the codec will
-  // limit the spectrum anyway.
-  if (channel_state_.Get().output_file_playing) {
-    rtc::CritScope cs(&_fileCritSect);
-    if (output_file_player_) {
-      if (output_file_player_->Frequency() > highestNeeded) {
-        highestNeeded = output_file_player_->Frequency();
-      }
-    }
-  }
-
-  return (highestNeeded);
+  return highestNeeded;
 }
 
 int32_t Channel::CreateChannel(Channel*& channel,
@@ -808,53 +778,6 @@
   return 0;
 }
 
-void Channel::PlayNotification(int32_t id, uint32_t durationMs) {
-  WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, _channelId),
-               "Channel::PlayNotification(id=%d, durationMs=%d)", id,
-               durationMs);
-
-  // Not implement yet
-}
-
-void Channel::RecordNotification(int32_t id, uint32_t durationMs) {
-  WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, _channelId),
-               "Channel::RecordNotification(id=%d, durationMs=%d)", id,
-               durationMs);
-
-  // Not implement yet
-}
-
-void Channel::PlayFileEnded(int32_t id) {
-  WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, _channelId),
-               "Channel::PlayFileEnded(id=%d)", id);
-
-  if (id == _inputFilePlayerId) {
-    channel_state_.SetInputFilePlaying(false);
-    WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, VoEId(_instanceId, _channelId),
-                 "Channel::PlayFileEnded() => input file player module is"
-                 " shutdown");
-  } else if (id == _outputFilePlayerId) {
-    channel_state_.SetOutputFilePlaying(false);
-    WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, VoEId(_instanceId, _channelId),
-                 "Channel::PlayFileEnded() => output file player module is"
-                 " shutdown");
-  }
-}
-
-void Channel::RecordFileEnded(int32_t id) {
-  WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, _channelId),
-               "Channel::RecordFileEnded(id=%d)", id);
-
-  assert(id == _outputFileRecorderId);
-
-  rtc::CritScope cs(&_fileCritSect);
-
-  _outputFileRecording = false;
-  WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, VoEId(_instanceId, _channelId),
-               "Channel::RecordFileEnded() => output file recorder module is"
-               " shutdown");
-}
-
 Channel::Channel(int32_t channelId,
                  uint32_t instanceId,
                  const VoEBase::ChannelConfig& config)
@@ -874,12 +797,6 @@
       telephone_event_handler_(rtp_receiver_->GetTelephoneEventHandler()),
       _outputAudioLevel(),
       _externalTransport(false),
-      // Avoid conflict with other channels by adding 1024 - 1026,
-      // won't use as much as 1024 channels.
-      _inputFilePlayerId(VoEModuleId(instanceId, channelId) + 1024),
-      _outputFilePlayerId(VoEModuleId(instanceId, channelId) + 1025),
-      _outputFileRecorderId(VoEModuleId(instanceId, channelId) + 1026),
-      _outputFileRecording(false),
       _timeStamp(0),  // This is just an offset, RTP module will add it's own
                       // random offset
       ntp_estimator_(Clock::GetRealTimeClock()),
@@ -899,7 +816,6 @@
       input_mute_(false),
       previous_frame_muted_(false),
       _outputGain(1.0f),
-      _mixFileWithMicrophone(false),
       _includeAudioLevelIndication(false),
       transport_overhead_per_packet_(0),
       rtp_overhead_per_packet_(0),
@@ -1088,22 +1004,6 @@
   StopSend();
   StopPlayout();
 
-  {
-    rtc::CritScope cs(&_fileCritSect);
-    if (input_file_player_) {
-      input_file_player_->RegisterModuleFileCallback(NULL);
-      input_file_player_->StopPlayingFile();
-    }
-    if (output_file_player_) {
-      output_file_player_->RegisterModuleFileCallback(NULL);
-      output_file_player_->StopPlayingFile();
-    }
-    if (output_file_recorder_) {
-      output_file_recorder_->RegisterModuleFileCallback(NULL);
-      output_file_recorder_->StopRecording();
-    }
-  }
-
   // The order to safely shutdown modules in a channel is:
   // 1. De-register callbacks in modules
   // 2. De-register modules in process thread
@@ -1174,8 +1074,6 @@
   }
 
   channel_state_.SetPlaying(true);
-  if (RegisterFilePlayingToMixer() != 0)
-    return -1;
 
   return 0;
 }
@@ -1823,508 +1721,6 @@
   return 0;
 }
 
-int Channel::StartPlayingFileLocally(const char* fileName,
-                                     bool loop,
-                                     FileFormats format,
-                                     int startPosition,
-                                     float volumeScaling,
-                                     int stopPosition,
-                                     const CodecInst* codecInst) {
-  WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
-               "Channel::StartPlayingFileLocally(fileNameUTF8[]=%s, loop=%d,"
-               " format=%d, volumeScaling=%5.3f, startPosition=%d, "
-               "stopPosition=%d)",
-               fileName, loop, format, volumeScaling, startPosition,
-               stopPosition);
-
-  if (channel_state_.Get().output_file_playing) {
-    _engineStatisticsPtr->SetLastError(
-        VE_ALREADY_PLAYING, kTraceError,
-        "StartPlayingFileLocally() is already playing");
-    return -1;
-  }
-
-  {
-    rtc::CritScope cs(&_fileCritSect);
-
-    if (output_file_player_) {
-      output_file_player_->RegisterModuleFileCallback(NULL);
-      output_file_player_.reset();
-    }
-
-    output_file_player_ = FilePlayer::CreateFilePlayer(
-        _outputFilePlayerId, (const FileFormats)format);
-
-    if (!output_file_player_) {
-      _engineStatisticsPtr->SetLastError(
-          VE_INVALID_ARGUMENT, kTraceError,
-          "StartPlayingFileLocally() filePlayer format is not correct");
-      return -1;
-    }
-
-    const uint32_t notificationTime(0);
-
-    if (output_file_player_->StartPlayingFile(
-            fileName, loop, startPosition, volumeScaling, notificationTime,
-            stopPosition, (const CodecInst*)codecInst) != 0) {
-      _engineStatisticsPtr->SetLastError(
-          VE_BAD_FILE, kTraceError,
-          "StartPlayingFile() failed to start file playout");
-      output_file_player_->StopPlayingFile();
-      output_file_player_.reset();
-      return -1;
-    }
-    output_file_player_->RegisterModuleFileCallback(this);
-    channel_state_.SetOutputFilePlaying(true);
-  }
-
-  if (RegisterFilePlayingToMixer() != 0)
-    return -1;
-
-  return 0;
-}
-
-int Channel::StartPlayingFileLocally(InStream* stream,
-                                     FileFormats format,
-                                     int startPosition,
-                                     float volumeScaling,
-                                     int stopPosition,
-                                     const CodecInst* codecInst) {
-  WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
-               "Channel::StartPlayingFileLocally(format=%d,"
-               " volumeScaling=%5.3f, startPosition=%d, stopPosition=%d)",
-               format, volumeScaling, startPosition, stopPosition);
-
-  if (stream == NULL) {
-    _engineStatisticsPtr->SetLastError(
-        VE_BAD_FILE, kTraceError,
-        "StartPlayingFileLocally() NULL as input stream");
-    return -1;
-  }
-
-  if (channel_state_.Get().output_file_playing) {
-    _engineStatisticsPtr->SetLastError(
-        VE_ALREADY_PLAYING, kTraceError,
-        "StartPlayingFileLocally() is already playing");
-    return -1;
-  }
-
-  {
-    rtc::CritScope cs(&_fileCritSect);
-
-    // Destroy the old instance
-    if (output_file_player_) {
-      output_file_player_->RegisterModuleFileCallback(NULL);
-      output_file_player_.reset();
-    }
-
-    // Create the instance
-    output_file_player_ = FilePlayer::CreateFilePlayer(
-        _outputFilePlayerId, (const FileFormats)format);
-
-    if (!output_file_player_) {
-      _engineStatisticsPtr->SetLastError(
-          VE_INVALID_ARGUMENT, kTraceError,
-          "StartPlayingFileLocally() filePlayer format isnot correct");
-      return -1;
-    }
-
-    const uint32_t notificationTime(0);
-
-    if (output_file_player_->StartPlayingFile(stream, startPosition,
-                                              volumeScaling, notificationTime,
-                                              stopPosition, codecInst) != 0) {
-      _engineStatisticsPtr->SetLastError(VE_BAD_FILE, kTraceError,
-                                         "StartPlayingFile() failed to "
-                                         "start file playout");
-      output_file_player_->StopPlayingFile();
-      output_file_player_.reset();
-      return -1;
-    }
-    output_file_player_->RegisterModuleFileCallback(this);
-    channel_state_.SetOutputFilePlaying(true);
-  }
-
-  if (RegisterFilePlayingToMixer() != 0)
-    return -1;
-
-  return 0;
-}
-
-int Channel::StopPlayingFileLocally() {
-  WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
-               "Channel::StopPlayingFileLocally()");
-
-  if (!channel_state_.Get().output_file_playing) {
-    return 0;
-  }
-
-  {
-    rtc::CritScope cs(&_fileCritSect);
-
-    if (output_file_player_->StopPlayingFile() != 0) {
-      _engineStatisticsPtr->SetLastError(
-          VE_STOP_RECORDING_FAILED, kTraceError,
-          "StopPlayingFile() could not stop playing");
-      return -1;
-    }
-    output_file_player_->RegisterModuleFileCallback(NULL);
-    output_file_player_.reset();
-    channel_state_.SetOutputFilePlaying(false);
-  }
-  // _fileCritSect cannot be taken while calling
-  // SetAnonymousMixibilityStatus. Refer to comments in
-  // StartPlayingFileLocally(const char* ...) for more details.
-  if (_outputMixerPtr->SetAnonymousMixabilityStatus(*this, false) != 0) {
-    _engineStatisticsPtr->SetLastError(
-        VE_AUDIO_CONF_MIX_MODULE_ERROR, kTraceError,
-        "StopPlayingFile() failed to stop participant from playing as"
-        "file in the mixer");
-    return -1;
-  }
-
-  return 0;
-}
-
-int Channel::IsPlayingFileLocally() const {
-  return channel_state_.Get().output_file_playing;
-}
-
-int Channel::RegisterFilePlayingToMixer() {
-  // Return success for not registering for file playing to mixer if:
-  // 1. playing file before playout is started on that channel.
-  // 2. starting playout without file playing on that channel.
-  if (!channel_state_.Get().playing ||
-      !channel_state_.Get().output_file_playing) {
-    return 0;
-  }
-
-  // |_fileCritSect| cannot be taken while calling
-  // SetAnonymousMixabilityStatus() since as soon as the participant is added
-  // frames can be pulled by the mixer. Since the frames are generated from
-  // the file, _fileCritSect will be taken. This would result in a deadlock.
-  if (_outputMixerPtr->SetAnonymousMixabilityStatus(*this, true) != 0) {
-    channel_state_.SetOutputFilePlaying(false);
-    rtc::CritScope cs(&_fileCritSect);
-    _engineStatisticsPtr->SetLastError(
-        VE_AUDIO_CONF_MIX_MODULE_ERROR, kTraceError,
-        "StartPlayingFile() failed to add participant as file to mixer");
-    output_file_player_->StopPlayingFile();
-    output_file_player_.reset();
-    return -1;
-  }
-
-  return 0;
-}
-
-int Channel::StartPlayingFileAsMicrophone(const char* fileName,
-                                          bool loop,
-                                          FileFormats format,
-                                          int startPosition,
-                                          float volumeScaling,
-                                          int stopPosition,
-                                          const CodecInst* codecInst) {
-  WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
-               "Channel::StartPlayingFileAsMicrophone(fileNameUTF8[]=%s, "
-               "loop=%d, format=%d, volumeScaling=%5.3f, startPosition=%d, "
-               "stopPosition=%d)",
-               fileName, loop, format, volumeScaling, startPosition,
-               stopPosition);
-
-  rtc::CritScope cs(&_fileCritSect);
-
-  if (channel_state_.Get().input_file_playing) {
-    _engineStatisticsPtr->SetLastError(
-        VE_ALREADY_PLAYING, kTraceWarning,
-        "StartPlayingFileAsMicrophone() filePlayer is playing");
-    return 0;
-  }
-
-  // Destroy the old instance
-  if (input_file_player_) {
-    input_file_player_->RegisterModuleFileCallback(NULL);
-    input_file_player_.reset();
-  }
-
-  // Create the instance
-  input_file_player_ = FilePlayer::CreateFilePlayer(_inputFilePlayerId,
-                                                    (const FileFormats)format);
-
-  if (!input_file_player_) {
-    _engineStatisticsPtr->SetLastError(
-        VE_INVALID_ARGUMENT, kTraceError,
-        "StartPlayingFileAsMicrophone() filePlayer format isnot correct");
-    return -1;
-  }
-
-  const uint32_t notificationTime(0);
-
-  if (input_file_player_->StartPlayingFile(
-          fileName, loop, startPosition, volumeScaling, notificationTime,
-          stopPosition, (const CodecInst*)codecInst) != 0) {
-    _engineStatisticsPtr->SetLastError(
-        VE_BAD_FILE, kTraceError,
-        "StartPlayingFile() failed to start file playout");
-    input_file_player_->StopPlayingFile();
-    input_file_player_.reset();
-    return -1;
-  }
-  input_file_player_->RegisterModuleFileCallback(this);
-  channel_state_.SetInputFilePlaying(true);
-
-  return 0;
-}
-
-int Channel::StartPlayingFileAsMicrophone(InStream* stream,
-                                          FileFormats format,
-                                          int startPosition,
-                                          float volumeScaling,
-                                          int stopPosition,
-                                          const CodecInst* codecInst) {
-  WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
-               "Channel::StartPlayingFileAsMicrophone(format=%d, "
-               "volumeScaling=%5.3f, startPosition=%d, stopPosition=%d)",
-               format, volumeScaling, startPosition, stopPosition);
-
-  if (stream == NULL) {
-    _engineStatisticsPtr->SetLastError(
-        VE_BAD_FILE, kTraceError,
-        "StartPlayingFileAsMicrophone NULL as input stream");
-    return -1;
-  }
-
-  rtc::CritScope cs(&_fileCritSect);
-
-  if (channel_state_.Get().input_file_playing) {
-    _engineStatisticsPtr->SetLastError(
-        VE_ALREADY_PLAYING, kTraceWarning,
-        "StartPlayingFileAsMicrophone() is playing");
-    return 0;
-  }
-
-  // Destroy the old instance
-  if (input_file_player_) {
-    input_file_player_->RegisterModuleFileCallback(NULL);
-    input_file_player_.reset();
-  }
-
-  // Create the instance
-  input_file_player_ = FilePlayer::CreateFilePlayer(_inputFilePlayerId,
-                                                    (const FileFormats)format);
-
-  if (!input_file_player_) {
-    _engineStatisticsPtr->SetLastError(
-        VE_INVALID_ARGUMENT, kTraceError,
-        "StartPlayingInputFile() filePlayer format isnot correct");
-    return -1;
-  }
-
-  const uint32_t notificationTime(0);
-
-  if (input_file_player_->StartPlayingFile(stream, startPosition, volumeScaling,
-                                           notificationTime, stopPosition,
-                                           codecInst) != 0) {
-    _engineStatisticsPtr->SetLastError(VE_BAD_FILE, kTraceError,
-                                       "StartPlayingFile() failed to start "
-                                       "file playout");
-    input_file_player_->StopPlayingFile();
-    input_file_player_.reset();
-    return -1;
-  }
-
-  input_file_player_->RegisterModuleFileCallback(this);
-  channel_state_.SetInputFilePlaying(true);
-
-  return 0;
-}
-
-int Channel::StopPlayingFileAsMicrophone() {
-  WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
-               "Channel::StopPlayingFileAsMicrophone()");
-
-  rtc::CritScope cs(&_fileCritSect);
-
-  if (!channel_state_.Get().input_file_playing) {
-    return 0;
-  }
-
-  if (input_file_player_->StopPlayingFile() != 0) {
-    _engineStatisticsPtr->SetLastError(
-        VE_STOP_RECORDING_FAILED, kTraceError,
-        "StopPlayingFile() could not stop playing");
-    return -1;
-  }
-  input_file_player_->RegisterModuleFileCallback(NULL);
-  input_file_player_.reset();
-  channel_state_.SetInputFilePlaying(false);
-
-  return 0;
-}
-
-int Channel::IsPlayingFileAsMicrophone() const {
-  return channel_state_.Get().input_file_playing;
-}
-
-int Channel::StartRecordingPlayout(const char* fileName,
-                                   const CodecInst* codecInst) {
-  WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
-               "Channel::StartRecordingPlayout(fileName=%s)", fileName);
-
-  if (_outputFileRecording) {
-    WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1),
-                 "StartRecordingPlayout() is already recording");
-    return 0;
-  }
-
-  FileFormats format;
-  const uint32_t notificationTime(0);  // Not supported in VoE
-  CodecInst dummyCodec = {100, "L16", 16000, 320, 1, 320000};
-
-  if ((codecInst != NULL) &&
-      ((codecInst->channels < 1) || (codecInst->channels > 2))) {
-    _engineStatisticsPtr->SetLastError(
-        VE_BAD_ARGUMENT, kTraceError,
-        "StartRecordingPlayout() invalid compression");
-    return (-1);
-  }
-  if (codecInst == NULL) {
-    format = kFileFormatPcm16kHzFile;
-    codecInst = &dummyCodec;
-  } else if ((STR_CASE_CMP(codecInst->plname, "L16") == 0) ||
-             (STR_CASE_CMP(codecInst->plname, "PCMU") == 0) ||
-             (STR_CASE_CMP(codecInst->plname, "PCMA") == 0)) {
-    format = kFileFormatWavFile;
-  } else {
-    format = kFileFormatCompressedFile;
-  }
-
-  rtc::CritScope cs(&_fileCritSect);
-
-  // Destroy the old instance
-  if (output_file_recorder_) {
-    output_file_recorder_->RegisterModuleFileCallback(NULL);
-    output_file_recorder_.reset();
-  }
-
-  output_file_recorder_ = FileRecorder::CreateFileRecorder(
-      _outputFileRecorderId, (const FileFormats)format);
-  if (!output_file_recorder_) {
-    _engineStatisticsPtr->SetLastError(
-        VE_INVALID_ARGUMENT, kTraceError,
-        "StartRecordingPlayout() fileRecorder format isnot correct");
-    return -1;
-  }
-
-  if (output_file_recorder_->StartRecordingAudioFile(
-          fileName, (const CodecInst&)*codecInst, notificationTime) != 0) {
-    _engineStatisticsPtr->SetLastError(
-        VE_BAD_FILE, kTraceError,
-        "StartRecordingAudioFile() failed to start file recording");
-    output_file_recorder_->StopRecording();
-    output_file_recorder_.reset();
-    return -1;
-  }
-  output_file_recorder_->RegisterModuleFileCallback(this);
-  _outputFileRecording = true;
-
-  return 0;
-}
-
-int Channel::StartRecordingPlayout(OutStream* stream,
-                                   const CodecInst* codecInst) {
-  WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
-               "Channel::StartRecordingPlayout()");
-
-  if (_outputFileRecording) {
-    WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1),
-                 "StartRecordingPlayout() is already recording");
-    return 0;
-  }
-
-  FileFormats format;
-  const uint32_t notificationTime(0);  // Not supported in VoE
-  CodecInst dummyCodec = {100, "L16", 16000, 320, 1, 320000};
-
-  if (codecInst != NULL && codecInst->channels != 1) {
-    _engineStatisticsPtr->SetLastError(
-        VE_BAD_ARGUMENT, kTraceError,
-        "StartRecordingPlayout() invalid compression");
-    return (-1);
-  }
-  if (codecInst == NULL) {
-    format = kFileFormatPcm16kHzFile;
-    codecInst = &dummyCodec;
-  } else if ((STR_CASE_CMP(codecInst->plname, "L16") == 0) ||
-             (STR_CASE_CMP(codecInst->plname, "PCMU") == 0) ||
-             (STR_CASE_CMP(codecInst->plname, "PCMA") == 0)) {
-    format = kFileFormatWavFile;
-  } else {
-    format = kFileFormatCompressedFile;
-  }
-
-  rtc::CritScope cs(&_fileCritSect);
-
-  // Destroy the old instance
-  if (output_file_recorder_) {
-    output_file_recorder_->RegisterModuleFileCallback(NULL);
-    output_file_recorder_.reset();
-  }
-
-  output_file_recorder_ = FileRecorder::CreateFileRecorder(
-      _outputFileRecorderId, (const FileFormats)format);
-  if (!output_file_recorder_) {
-    _engineStatisticsPtr->SetLastError(
-        VE_INVALID_ARGUMENT, kTraceError,
-        "StartRecordingPlayout() fileRecorder format isnot correct");
-    return -1;
-  }
-
-  if (output_file_recorder_->StartRecordingAudioFile(stream, *codecInst,
-                                                     notificationTime) != 0) {
-    _engineStatisticsPtr->SetLastError(VE_BAD_FILE, kTraceError,
-                                       "StartRecordingPlayout() failed to "
-                                       "start file recording");
-    output_file_recorder_->StopRecording();
-    output_file_recorder_.reset();
-    return -1;
-  }
-
-  output_file_recorder_->RegisterModuleFileCallback(this);
-  _outputFileRecording = true;
-
-  return 0;
-}
-
-int Channel::StopRecordingPlayout() {
-  WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1),
-               "Channel::StopRecordingPlayout()");
-
-  if (!_outputFileRecording) {
-    WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_instanceId, -1),
-                 "StopRecordingPlayout() isnot recording");
-    return -1;
-  }
-
-  rtc::CritScope cs(&_fileCritSect);
-
-  if (output_file_recorder_->StopRecording() != 0) {
-    _engineStatisticsPtr->SetLastError(
-        VE_STOP_RECORDING_FAILED, kTraceError,
-        "StopRecording() could not stop recording");
-    return (-1);
-  }
-  output_file_recorder_->RegisterModuleFileCallback(NULL);
-  output_file_recorder_.reset();
-  _outputFileRecording = false;
-
-  return 0;
-}
-
-void Channel::SetMixWithMicStatus(bool mix) {
-  rtc::CritScope cs(&_fileCritSect);
-  _mixFileWithMicrophone = mix;
-}
-
 int Channel::GetSpeechOutputLevel() const {
   return _outputAudioLevel.Level();
 }
@@ -2760,10 +2156,6 @@
   RTC_DCHECK_LE(audio_input->num_channels_, 2);
   RTC_DCHECK_EQ(audio_input->id_, ChannelId());
 
-  if (channel_state_.Get().input_file_playing) {
-    MixOrReplaceAudioWithFile(audio_input);
-  }
-
   bool is_muted = InputMute();
   AudioFrameOperations::Mute(audio_input, previous_frame_muted_, is_muted);
 
@@ -2903,96 +2295,6 @@
   return 0;
 }
 
-// TODO(andrew): refactor Mix functions here and in transmit_mixer.cc to use
-// a shared helper.
-int32_t Channel::MixOrReplaceAudioWithFile(AudioFrame* audio_input) {
-  RTC_DCHECK_RUN_ON(encoder_queue_);
-  std::unique_ptr<int16_t[]> fileBuffer(new int16_t[640]);
-  size_t fileSamples(0);
-  const int mixingFrequency = audio_input->sample_rate_hz_;
-  {
-    rtc::CritScope cs(&_fileCritSect);
-
-    if (!input_file_player_) {
-      WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, _channelId),
-                   "Channel::MixOrReplaceAudioWithFile() fileplayer"
-                   " doesnt exist");
-      return -1;
-    }
-
-    if (input_file_player_->Get10msAudioFromFile(fileBuffer.get(), &fileSamples,
-                                                 mixingFrequency) == -1) {
-      WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, _channelId),
-                   "Channel::MixOrReplaceAudioWithFile() file mixing "
-                   "failed");
-      return -1;
-    }
-    if (fileSamples == 0) {
-      WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, _channelId),
-                   "Channel::MixOrReplaceAudioWithFile() file is ended");
-      return 0;
-    }
-  }
-
-  RTC_DCHECK_EQ(audio_input->samples_per_channel_, fileSamples);
-
-  if (_mixFileWithMicrophone) {
-    // Currently file stream is always mono.
-    // TODO(xians): Change the code when FilePlayer supports real stereo.
-    MixWithSat(audio_input->mutable_data(), audio_input->num_channels_,
-               fileBuffer.get(), 1, fileSamples);
-  } else {
-    // Replace ACM audio with file.
-    // Currently file stream is always mono.
-    // TODO(xians): Change the code when FilePlayer supports real stereo.
-    audio_input->UpdateFrame(
-        _channelId, 0xFFFFFFFF, fileBuffer.get(), fileSamples, mixingFrequency,
-        AudioFrame::kNormalSpeech, AudioFrame::kVadUnknown, 1);
-  }
-  return 0;
-}
-
-int32_t Channel::MixAudioWithFile(AudioFrame& audioFrame, int mixingFrequency) {
-  assert(mixingFrequency <= 48000);
-
-  std::unique_ptr<int16_t[]> fileBuffer(new int16_t[960]);
-  size_t fileSamples(0);
-
-  {
-    rtc::CritScope cs(&_fileCritSect);
-
-    if (!output_file_player_) {
-      WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, _channelId),
-                   "Channel::MixAudioWithFile() file mixing failed");
-      return -1;
-    }
-
-    // We should get the frequency we ask for.
-    if (output_file_player_->Get10msAudioFromFile(
-            fileBuffer.get(), &fileSamples, mixingFrequency) == -1) {
-      WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, _channelId),
-                   "Channel::MixAudioWithFile() file mixing failed");
-      return -1;
-    }
-  }
-
-  if (audioFrame.samples_per_channel_ == fileSamples) {
-    // Currently file stream is always mono.
-    // TODO(xians): Change the code when FilePlayer supports real stereo.
-    MixWithSat(audioFrame.mutable_data(), audioFrame.num_channels_,
-               fileBuffer.get(), 1, fileSamples);
-  } else {
-    WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, _channelId),
-                 "Channel::MixAudioWithFile() samples_per_channel_(%" PRIuS
-                 ") != "
-                 "fileSamples(%" PRIuS ")",
-                 audioFrame.samples_per_channel_, fileSamples);
-    return -1;
-  }
-
-  return 0;
-}
-
 void Channel::UpdatePlayoutTimestamp(bool rtcp) {
   jitter_buffer_playout_timestamp_ = audio_coding_->PlayoutTimestamp();
 
diff --git a/voice_engine/channel.h b/voice_engine/channel.h
index 5f2df14..d023f87 100644
--- a/voice_engine/channel.h
+++ b/voice_engine/channel.h
@@ -32,8 +32,6 @@
 #include "rtc_base/event.h"
 #include "rtc_base/thread_checker.h"
 #include "voice_engine/audio_level.h"
-#include "voice_engine/file_player.h"
-#include "voice_engine/file_recorder.h"
 #include "voice_engine/include/voe_base.h"
 #include "voice_engine/include/voe_network.h"
 #include "voice_engine/shared_data.h"
@@ -46,7 +44,6 @@
 namespace webrtc {
 
 class AudioDeviceModule;
-class FileWrapper;
 class PacketRouter;
 class ProcessThread;
 class RateLimiter;
@@ -85,8 +82,6 @@
 class ChannelState {
  public:
   struct State {
-    bool output_file_playing = false;
-    bool input_file_playing = false;
     bool playing = false;
     bool sending = false;
   };
@@ -104,16 +99,6 @@
     return state_;
   }
 
-  void SetOutputFilePlaying(bool enable) {
-    rtc::CritScope lock(&lock_);
-    state_.output_file_playing = enable;
-  }
-
-  void SetInputFilePlaying(bool enable) {
-    rtc::CritScope lock(&lock_);
-    state_.input_file_playing = enable;
-  }
-
   void SetPlaying(bool enable) {
     rtc::CritScope lock(&lock_);
     state_.playing = enable;
@@ -132,8 +117,6 @@
 class Channel
     : public RtpData,
       public RtpFeedback,
-      public FileCallback,  // receiving notification from file player &
-                            // recorder
       public Transport,
       public AudioPacketizationCallback,  // receive encoded packets from the
                                           // ACM
@@ -217,44 +200,6 @@
   int32_t ReceivedRTCPPacket(const uint8_t* data, size_t length);
   void OnRtpPacket(const RtpPacketReceived& packet);
 
-  // VoEFile
-  int StartPlayingFileLocally(const char* fileName,
-                              bool loop,
-                              FileFormats format,
-                              int startPosition,
-                              float volumeScaling,
-                              int stopPosition,
-                              const CodecInst* codecInst);
-  int StartPlayingFileLocally(InStream* stream,
-                              FileFormats format,
-                              int startPosition,
-                              float volumeScaling,
-                              int stopPosition,
-                              const CodecInst* codecInst);
-  int StopPlayingFileLocally();
-  int IsPlayingFileLocally() const;
-  int RegisterFilePlayingToMixer();
-  int StartPlayingFileAsMicrophone(const char* fileName,
-                                   bool loop,
-                                   FileFormats format,
-                                   int startPosition,
-                                   float volumeScaling,
-                                   int stopPosition,
-                                   const CodecInst* codecInst);
-  int StartPlayingFileAsMicrophone(InStream* stream,
-                                   FileFormats format,
-                                   int startPosition,
-                                   float volumeScaling,
-                                   int stopPosition,
-                                   const CodecInst* codecInst);
-  int StopPlayingFileAsMicrophone();
-  int IsPlayingFileAsMicrophone() const;
-  int StartRecordingPlayout(const char* fileName, const CodecInst* codecInst);
-  int StartRecordingPlayout(OutStream* stream, const CodecInst* codecInst);
-  int StopRecordingPlayout();
-
-  void SetMixWithMicStatus(bool mix);
-
   // Muting, Volume and Level.
   void SetInputMute(bool enable);
   void SetChannelOutputVolumeScaling(float scaling);
@@ -348,12 +293,6 @@
       int sample_rate_hz,
       AudioFrame* audio_frame);
 
-  // From FileCallback
-  void PlayNotification(int32_t id, uint32_t durationMs) override;
-  void RecordNotification(int32_t id, uint32_t durationMs) override;
-  void PlayFileEnded(int32_t id) override;
-  void RecordFileEnded(int32_t id) override;
-
   uint32_t InstanceId() const { return _instanceId; }
   int32_t ChannelId() const { return _channelId; }
   bool Playing() const { return channel_state_.Get().playing; }
@@ -430,8 +369,6 @@
   bool IsPacketInOrder(const RTPHeader& header) const;
   bool IsPacketRetransmitted(const RTPHeader& header, bool in_order) const;
   int ResendPackets(const uint16_t* sequence_numbers, int length);
-  int32_t MixOrReplaceAudioWithFile(AudioFrame* audio_frame);
-  int32_t MixAudioWithFile(AudioFrame& audioFrame, int mixingFrequency);
   void UpdatePlayoutTimestamp(bool rtcp);
   void RegisterReceiveCodecsToRTPModule();
 
@@ -452,7 +389,6 @@
   uint32_t _instanceId;
   int32_t _channelId;
 
-  rtc::CriticalSection _fileCritSect;
   rtc::CriticalSection _callbackCritSect;
   rtc::CriticalSection volume_settings_critsect_;
 
@@ -475,13 +411,6 @@
   bool _externalTransport;
   // Downsamples to the codec rate if necessary.
   PushResampler<int16_t> input_resampler_;
-  std::unique_ptr<FilePlayer> input_file_player_;
-  std::unique_ptr<FilePlayer> output_file_player_;
-  std::unique_ptr<FileRecorder> output_file_recorder_;
-  int _inputFilePlayerId;
-  int _outputFilePlayerId;
-  int _outputFileRecorderId;
-  bool _outputFileRecording;
   uint32_t _timeStamp RTC_ACCESS_ON(encoder_queue_);
 
   RemoteNtpTimeEstimator ntp_estimator_ RTC_GUARDED_BY(ts_stats_lock_);
@@ -515,8 +444,6 @@
   bool input_mute_ RTC_GUARDED_BY(volume_settings_critsect_);
   bool previous_frame_muted_ RTC_ACCESS_ON(encoder_queue_);
   float _outputGain RTC_GUARDED_BY(volume_settings_critsect_);
-  // VoEBase
-  bool _mixFileWithMicrophone;
   // VoeRTP_RTCP
   // TODO(henrika): can today be accessed on the main thread and on the
   // task queue; hence potential race.
diff --git a/voice_engine/coder.cc b/voice_engine/coder.cc
deleted file mode 100644
index 9eff1d4..0000000
--- a/voice_engine/coder.cc
+++ /dev/null
@@ -1,118 +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.
- */
-
-#include "voice_engine/coder.h"
-
-#include "api/audio_codecs/builtin_audio_decoder_factory.h"
-#include "common_types.h"  // NOLINT(build/include)
-#include "modules/audio_coding/codecs/audio_format_conversion.h"
-#include "modules/include/module_common_types.h"
-
-namespace webrtc {
-namespace {
-AudioCodingModule::Config GetAcmConfig(uint32_t id) {
-  AudioCodingModule::Config config;
-  // This class does not handle muted output.
-  config.neteq_config.enable_muted_state = false;
-  config.id = id;
-  config.decoder_factory = CreateBuiltinAudioDecoderFactory();
-  return config;
-}
-}  // namespace
-
-AudioCoder::AudioCoder(uint32_t instance_id)
-    : acm_(AudioCodingModule::Create(GetAcmConfig(instance_id))),
-      receive_codec_(),
-      encode_timestamp_(0),
-      encoded_data_(nullptr),
-      encoded_length_in_bytes_(0),
-      decode_timestamp_(0) {
-  acm_->InitializeReceiver();
-  acm_->RegisterTransportCallback(this);
-}
-
-AudioCoder::~AudioCoder() {}
-
-int32_t AudioCoder::SetEncodeCodec(const CodecInst& codec_inst) {
-  const bool success = codec_manager_.RegisterEncoder(codec_inst) &&
-                       codec_manager_.MakeEncoder(&rent_a_codec_, acm_.get());
-  return success ? 0 : -1;
-}
-
-int32_t AudioCoder::SetDecodeCodec(const CodecInst& codec_inst) {
-  if (!acm_->RegisterReceiveCodec(codec_inst.pltype,
-                                  CodecInstToSdp(codec_inst))) {
-    return -1;
-  }
-  memcpy(&receive_codec_, &codec_inst, sizeof(CodecInst));
-  return 0;
-}
-
-int32_t AudioCoder::Decode(AudioFrame* decoded_audio,
-                           uint32_t samp_freq_hz,
-                           const int8_t* incoming_payload,
-                           size_t payload_length) {
-  if (payload_length > 0) {
-    const uint8_t payload_type = receive_codec_.pltype;
-    decode_timestamp_ += receive_codec_.pacsize;
-    if (acm_->IncomingPayload((const uint8_t*)incoming_payload, payload_length,
-                              payload_type, decode_timestamp_) == -1) {
-      return -1;
-    }
-  }
-  bool muted;
-  int32_t ret =
-      acm_->PlayoutData10Ms((uint16_t)samp_freq_hz, decoded_audio, &muted);
-  RTC_DCHECK(!muted);
-  return ret;
-}
-
-int32_t AudioCoder::PlayoutData(AudioFrame* decoded_audio,
-                                uint16_t samp_freq_hz) {
-  bool muted;
-  int32_t ret = acm_->PlayoutData10Ms(samp_freq_hz, decoded_audio, &muted);
-  RTC_DCHECK(!muted);
-  return ret;
-}
-
-int32_t AudioCoder::Encode(const AudioFrame& audio,
-                           int8_t* encoded_data,
-                           size_t* encoded_length_in_bytes) {
-  // Fake a timestamp in case audio doesn't contain a correct timestamp.
-  // Make a local copy of the audio frame since audio is const
-  AudioFrame audio_frame;
-  audio_frame.CopyFrom(audio);
-  audio_frame.timestamp_ = encode_timestamp_;
-  encode_timestamp_ += static_cast<uint32_t>(audio_frame.samples_per_channel_);
-
-  // For any codec with a frame size that is longer than 10 ms the encoded
-  // length in bytes should be zero until a a full frame has been encoded.
-  encoded_length_in_bytes_ = 0;
-  encoded_data_ = encoded_data;
-  if (acm_->Add10MsData((AudioFrame&)audio_frame) == -1) {
-    return -1;
-  }
-
-  *encoded_length_in_bytes = encoded_length_in_bytes_;
-  return 0;
-}
-
-int32_t AudioCoder::SendData(FrameType /* frame_type */,
-                             uint8_t /* payload_type */,
-                             uint32_t /* time_stamp */,
-                             const uint8_t* payload_data,
-                             size_t payload_size,
-                             const RTPFragmentationHeader* /* fragmentation*/) {
-  memcpy(encoded_data_, payload_data, sizeof(uint8_t) * payload_size);
-  encoded_length_in_bytes_ = payload_size;
-  return 0;
-}
-
-}  // namespace webrtc
diff --git a/voice_engine/coder.h b/voice_engine/coder.h
deleted file mode 100644
index bd65b9d..0000000
--- a/voice_engine/coder.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *  Copyright (c) 2011 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.
- */
-
-#ifndef VOICE_ENGINE_CODER_H_
-#define VOICE_ENGINE_CODER_H_
-
-#include <memory>
-
-#include "common_types.h"  // NOLINT(build/include)
-#include "modules/audio_coding/acm2/codec_manager.h"
-#include "modules/audio_coding/acm2/rent_a_codec.h"
-#include "modules/audio_coding/include/audio_coding_module.h"
-#include "typedefs.h"  // NOLINT(build/include)
-
-namespace webrtc {
-class AudioFrame;
-
-class AudioCoder : public AudioPacketizationCallback {
- public:
-  explicit AudioCoder(uint32_t instance_id);
-  ~AudioCoder();
-
-  int32_t SetEncodeCodec(const CodecInst& codec_inst);
-
-  int32_t SetDecodeCodec(const CodecInst& codec_inst);
-
-  int32_t Decode(AudioFrame* decoded_audio,
-                 uint32_t samp_freq_hz,
-                 const int8_t* incoming_payload,
-                 size_t payload_length);
-
-  int32_t PlayoutData(AudioFrame* decoded_audio, uint16_t samp_freq_hz);
-
-  int32_t Encode(const AudioFrame& audio,
-                 int8_t* encoded_data,
-                 size_t* encoded_length_in_bytes);
-
- protected:
-  int32_t SendData(FrameType frame_type,
-                   uint8_t payload_type,
-                   uint32_t time_stamp,
-                   const uint8_t* payload_data,
-                   size_t payload_size,
-                   const RTPFragmentationHeader* fragmentation) override;
-
- private:
-  std::unique_ptr<AudioCodingModule> acm_;
-  acm2::CodecManager codec_manager_;
-  acm2::RentACodec rent_a_codec_;
-
-  CodecInst receive_codec_;
-
-  uint32_t encode_timestamp_;
-  int8_t* encoded_data_;
-  size_t encoded_length_in_bytes_;
-
-  uint32_t decode_timestamp_;
-};
-}  // namespace webrtc
-
-#endif  // VOICE_ENGINE_CODER_H_
diff --git a/voice_engine/file_player.cc b/voice_engine/file_player.cc
deleted file mode 100644
index 11f6ef0..0000000
--- a/voice_engine/file_player.cc
+++ /dev/null
@@ -1,397 +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.
- */
-
-#include "voice_engine/file_player.h"
-
-#include "common_audio/resampler/include/resampler.h"
-#include "common_types.h"  // NOLINT(build/include)
-#include "modules/media_file/media_file.h"
-#include "modules/media_file/media_file_defines.h"
-#include "rtc_base/logging.h"
-#include "typedefs.h"  // NOLINT(build/include)
-#include "voice_engine/coder.h"
-
-namespace webrtc {
-
-namespace {
-
-class FilePlayerImpl : public FilePlayer {
- public:
-  FilePlayerImpl(uint32_t instanceID, FileFormats fileFormat);
-  ~FilePlayerImpl() override;
-
-  int Get10msAudioFromFile(int16_t* outBuffer,
-                           size_t* lengthInSamples,
-                           int frequencyInHz) override;
-  int32_t RegisterModuleFileCallback(FileCallback* callback) override;
-  int32_t StartPlayingFile(const char* fileName,
-                           bool loop,
-                           uint32_t startPosition,
-                           float volumeScaling,
-                           uint32_t notification,
-                           uint32_t stopPosition,
-                           const CodecInst* codecInst) override;
-  int32_t StartPlayingFile(InStream* sourceStream,
-                           uint32_t startPosition,
-                           float volumeScaling,
-                           uint32_t notification,
-                           uint32_t stopPosition,
-                           const CodecInst* codecInst) override;
-  int32_t StopPlayingFile() override;
-  bool IsPlayingFile() const override;
-  int32_t GetPlayoutPosition(uint32_t* durationMs) override;
-  int32_t AudioCodec(CodecInst* audioCodec) const override;
-  int32_t Frequency() const override;
-  int32_t SetAudioScaling(float scaleFactor) override;
-
- private:
-  int32_t SetUpAudioDecoder();
-
-  const FileFormats _fileFormat;
-  MediaFile& _fileModule;
-
-  uint32_t _decodedLengthInMS;
-
-  AudioCoder _audioDecoder;
-
-  CodecInst _codec;
-  int32_t _numberOf10MsPerFrame;
-  int32_t _numberOf10MsInDecoder;
-
-  Resampler _resampler;
-  float _scaling;
-};
-
-FilePlayerImpl::FilePlayerImpl(const uint32_t instanceID,
-                               const FileFormats fileFormat)
-    : _fileFormat(fileFormat),
-      _fileModule(*MediaFile::CreateMediaFile(instanceID)),
-      _decodedLengthInMS(0),
-      _audioDecoder(instanceID),
-      _codec(),
-      _numberOf10MsPerFrame(0),
-      _numberOf10MsInDecoder(0),
-      _resampler(),
-      _scaling(1.0) {
-  _codec.plfreq = 0;
-}
-
-FilePlayerImpl::~FilePlayerImpl() {
-  MediaFile::DestroyMediaFile(&_fileModule);
-}
-
-int32_t FilePlayerImpl::Frequency() const {
-  if (_codec.plfreq == 0) {
-    return -1;
-  }
-  // Make sure that sample rate is 8,16 or 32 kHz. E.g. WAVE files may have
-  // other sampling rates.
-  if (_codec.plfreq == 11000) {
-    return 16000;
-  } else if (_codec.plfreq == 22000) {
-    return 32000;
-  } else if (_codec.plfreq == 44000) {
-    return 32000;
-  } else if (_codec.plfreq == 48000) {
-    return 48000;
-  } else {
-    return _codec.plfreq;
-  }
-}
-
-int32_t FilePlayerImpl::AudioCodec(CodecInst* audioCodec) const {
-  *audioCodec = _codec;
-  return 0;
-}
-
-int32_t FilePlayerImpl::Get10msAudioFromFile(int16_t* outBuffer,
-                                             size_t* lengthInSamples,
-                                             int frequencyInHz) {
-  if (_codec.plfreq == 0) {
-    LOG(LS_WARNING) << "Get10msAudioFromFile() playing not started!"
-                    << " codec freq = " << _codec.plfreq
-                    << ", wanted freq = " << frequencyInHz;
-    return -1;
-  }
-
-  AudioFrame unresampledAudioFrame;
-  if (STR_CASE_CMP(_codec.plname, "L16") == 0) {
-    unresampledAudioFrame.sample_rate_hz_ = _codec.plfreq;
-
-    // L16 is un-encoded data. Just pull 10 ms.
-    size_t lengthInBytes = AudioFrame::kMaxDataSizeBytes;
-    if (_fileModule.PlayoutAudioData(
-            reinterpret_cast<int8_t*>(unresampledAudioFrame.mutable_data()),
-            lengthInBytes) == -1) {
-      // End of file reached.
-      return -1;
-    }
-    if (lengthInBytes == 0) {
-      *lengthInSamples = 0;
-      return 0;
-    }
-    // One sample is two bytes.
-    unresampledAudioFrame.samples_per_channel_ = lengthInBytes >> 1;
-
-  } else {
-    // Decode will generate 10 ms of audio data. PlayoutAudioData(..)
-    // expects a full frame. If the frame size is larger than 10 ms,
-    // PlayoutAudioData(..) data should be called proportionally less often.
-    int16_t encodedBuffer[MAX_AUDIO_BUFFER_IN_SAMPLES];
-    size_t encodedLengthInBytes = 0;
-    if (++_numberOf10MsInDecoder >= _numberOf10MsPerFrame) {
-      _numberOf10MsInDecoder = 0;
-      size_t bytesFromFile = sizeof(encodedBuffer);
-      if (_fileModule.PlayoutAudioData(reinterpret_cast<int8_t*>(encodedBuffer),
-                                       bytesFromFile) == -1) {
-        // End of file reached.
-        return -1;
-      }
-      encodedLengthInBytes = bytesFromFile;
-    }
-    if (_audioDecoder.Decode(&unresampledAudioFrame, frequencyInHz,
-                             reinterpret_cast<int8_t*>(encodedBuffer),
-                             encodedLengthInBytes) == -1) {
-      return -1;
-    }
-  }
-
-  size_t outLen = 0;
-  if (_resampler.ResetIfNeeded(unresampledAudioFrame.sample_rate_hz_,
-                               frequencyInHz, 1)) {
-    LOG(LS_WARNING) << "Get10msAudioFromFile() unexpected codec.";
-
-    // New sampling frequency. Update state.
-    outLen = static_cast<size_t>(frequencyInHz / 100);
-    memset(outBuffer, 0, outLen * sizeof(int16_t));
-    return 0;
-  }
-  _resampler.Push(unresampledAudioFrame.data(),
-                  unresampledAudioFrame.samples_per_channel_, outBuffer,
-                  MAX_AUDIO_BUFFER_IN_SAMPLES, outLen);
-
-  *lengthInSamples = outLen;
-
-  if (_scaling != 1.0) {
-    for (size_t i = 0; i < outLen; i++) {
-      outBuffer[i] = (int16_t)(outBuffer[i] * _scaling);
-    }
-  }
-  _decodedLengthInMS += 10;
-  return 0;
-}
-
-int32_t FilePlayerImpl::RegisterModuleFileCallback(FileCallback* callback) {
-  return _fileModule.SetModuleFileCallback(callback);
-}
-
-int32_t FilePlayerImpl::SetAudioScaling(float scaleFactor) {
-  if ((scaleFactor >= 0) && (scaleFactor <= 2.0)) {
-    _scaling = scaleFactor;
-    return 0;
-  }
-  LOG(LS_WARNING) << "SetAudioScaling() non-allowed scale factor.";
-  return -1;
-}
-
-int32_t FilePlayerImpl::StartPlayingFile(const char* fileName,
-                                         bool loop,
-                                         uint32_t startPosition,
-                                         float volumeScaling,
-                                         uint32_t notification,
-                                         uint32_t stopPosition,
-                                         const CodecInst* codecInst) {
-  if (_fileFormat == kFileFormatPcm16kHzFile ||
-      _fileFormat == kFileFormatPcm8kHzFile ||
-      _fileFormat == kFileFormatPcm32kHzFile) {
-    CodecInst codecInstL16;
-    strncpy(codecInstL16.plname, "L16", 32);
-    codecInstL16.pltype = 93;
-    codecInstL16.channels = 1;
-
-    if (_fileFormat == kFileFormatPcm8kHzFile) {
-      codecInstL16.rate = 128000;
-      codecInstL16.plfreq = 8000;
-      codecInstL16.pacsize = 80;
-    } else if (_fileFormat == kFileFormatPcm16kHzFile) {
-      codecInstL16.rate = 256000;
-      codecInstL16.plfreq = 16000;
-      codecInstL16.pacsize = 160;
-    } else if (_fileFormat == kFileFormatPcm32kHzFile) {
-      codecInstL16.rate = 512000;
-      codecInstL16.plfreq = 32000;
-      codecInstL16.pacsize = 320;
-    } else if (_fileFormat == kFileFormatPcm48kHzFile) {
-      codecInstL16.rate = 768000;
-      codecInstL16.plfreq = 48000;
-      codecInstL16.pacsize = 480;
-    } else {
-      LOG(LS_ERROR) << "StartPlayingFile() sample frequency not "
-                    << "supported for PCM format.";
-      return -1;
-    }
-
-    if (_fileModule.StartPlayingAudioFile(fileName, notification, loop,
-                                          _fileFormat, &codecInstL16,
-                                          startPosition, stopPosition) == -1) {
-      LOG(LS_WARNING) << "StartPlayingFile() failed to initialize "
-                      << "pcm file " << fileName;
-      return -1;
-    }
-    SetAudioScaling(volumeScaling);
-  } else if (_fileFormat == kFileFormatPreencodedFile) {
-    if (_fileModule.StartPlayingAudioFile(fileName, notification, loop,
-                                          _fileFormat, codecInst) == -1) {
-      LOG(LS_WARNING) << "StartPlayingFile() failed to initialize "
-                      << "pre-encoded file " << fileName;
-      return -1;
-    }
-  } else {
-    CodecInst* no_inst = NULL;
-    if (_fileModule.StartPlayingAudioFile(fileName, notification, loop,
-                                          _fileFormat, no_inst, startPosition,
-                                          stopPosition) == -1) {
-      LOG(LS_WARNING) << "StartPlayingFile() failed to initialize file "
-                      << fileName;
-      return -1;
-    }
-    SetAudioScaling(volumeScaling);
-  }
-  if (SetUpAudioDecoder() == -1) {
-    StopPlayingFile();
-    return -1;
-  }
-  return 0;
-}
-
-int32_t FilePlayerImpl::StartPlayingFile(InStream* sourceStream,
-                                         uint32_t startPosition,
-                                         float volumeScaling,
-                                         uint32_t notification,
-                                         uint32_t stopPosition,
-                                         const CodecInst* codecInst) {
-  if (_fileFormat == kFileFormatPcm16kHzFile ||
-      _fileFormat == kFileFormatPcm32kHzFile ||
-      _fileFormat == kFileFormatPcm8kHzFile ||
-      _fileFormat == kFileFormatPcm48kHzFile) {
-    CodecInst codecInstL16;
-    strncpy(codecInstL16.plname, "L16", 32);
-    codecInstL16.pltype = 93;
-    codecInstL16.channels = 1;
-
-    if (_fileFormat == kFileFormatPcm8kHzFile) {
-      codecInstL16.rate = 128000;
-      codecInstL16.plfreq = 8000;
-      codecInstL16.pacsize = 80;
-    } else if (_fileFormat == kFileFormatPcm16kHzFile) {
-      codecInstL16.rate = 256000;
-      codecInstL16.plfreq = 16000;
-      codecInstL16.pacsize = 160;
-    } else if (_fileFormat == kFileFormatPcm32kHzFile) {
-      codecInstL16.rate = 512000;
-      codecInstL16.plfreq = 32000;
-      codecInstL16.pacsize = 320;
-    } else if (_fileFormat == kFileFormatPcm48kHzFile) {
-      codecInstL16.rate = 768000;
-      codecInstL16.plfreq = 48000;
-      codecInstL16.pacsize = 480;
-    } else {
-      LOG(LS_ERROR) << "StartPlayingFile() sample frequency not "
-                    << "supported for PCM format.";
-      return -1;
-    }
-    if (_fileModule.StartPlayingAudioStream(
-            *sourceStream, notification, _fileFormat, &codecInstL16,
-            startPosition, stopPosition) == -1) {
-      LOG(LS_ERROR) << "StartPlayingFile() failed to initialize stream "
-                    << "playout.";
-      return -1;
-    }
-
-  } else if (_fileFormat == kFileFormatPreencodedFile) {
-    if (_fileModule.StartPlayingAudioStream(*sourceStream, notification,
-                                            _fileFormat, codecInst) == -1) {
-      LOG(LS_ERROR) << "StartPlayingFile() failed to initialize stream "
-                    << "playout.";
-      return -1;
-    }
-  } else {
-    CodecInst* no_inst = NULL;
-    if (_fileModule.StartPlayingAudioStream(*sourceStream, notification,
-                                            _fileFormat, no_inst, startPosition,
-                                            stopPosition) == -1) {
-      LOG(LS_ERROR) << "StartPlayingFile() failed to initialize stream "
-                    << "playout.";
-      return -1;
-    }
-  }
-  SetAudioScaling(volumeScaling);
-
-  if (SetUpAudioDecoder() == -1) {
-    StopPlayingFile();
-    return -1;
-  }
-  return 0;
-}
-
-int32_t FilePlayerImpl::StopPlayingFile() {
-  memset(&_codec, 0, sizeof(CodecInst));
-  _numberOf10MsPerFrame = 0;
-  _numberOf10MsInDecoder = 0;
-  return _fileModule.StopPlaying();
-}
-
-bool FilePlayerImpl::IsPlayingFile() const {
-  return _fileModule.IsPlaying();
-}
-
-int32_t FilePlayerImpl::GetPlayoutPosition(uint32_t* durationMs) {
-  return _fileModule.PlayoutPositionMs(*durationMs);
-}
-
-int32_t FilePlayerImpl::SetUpAudioDecoder() {
-  if ((_fileModule.codec_info(_codec) == -1)) {
-    LOG(LS_WARNING) << "Failed to retrieve codec info of file data.";
-    return -1;
-  }
-  if (STR_CASE_CMP(_codec.plname, "L16") != 0 &&
-      _audioDecoder.SetDecodeCodec(_codec) == -1) {
-    LOG(LS_WARNING) << "SetUpAudioDecoder() codec " << _codec.plname
-                    << " not supported.";
-    return -1;
-  }
-  _numberOf10MsPerFrame = _codec.pacsize / (_codec.plfreq / 100);
-  _numberOf10MsInDecoder = 0;
-  return 0;
-}
-
-}  // namespace
-
-std::unique_ptr<FilePlayer> FilePlayer::CreateFilePlayer(
-    uint32_t instanceID,
-    FileFormats fileFormat) {
-  switch (fileFormat) {
-    case kFileFormatWavFile:
-    case kFileFormatCompressedFile:
-    case kFileFormatPreencodedFile:
-    case kFileFormatPcm16kHzFile:
-    case kFileFormatPcm8kHzFile:
-    case kFileFormatPcm32kHzFile:
-    case kFileFormatPcm48kHzFile:
-      // audio formats
-      return std::unique_ptr<FilePlayer>(
-          new FilePlayerImpl(instanceID, fileFormat));
-    default:
-      assert(false);
-      return nullptr;
-  }
-}
-
-}  // namespace webrtc
diff --git a/voice_engine/file_player.h b/voice_engine/file_player.h
deleted file mode 100644
index 252e1b3..0000000
--- a/voice_engine/file_player.h
+++ /dev/null
@@ -1,80 +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.
- */
-
-#ifndef VOICE_ENGINE_FILE_PLAYER_H_
-#define VOICE_ENGINE_FILE_PLAYER_H_
-
-#include <memory>
-
-#include "common_types.h"  // NOLINT(build/include)
-#include "modules/include/module_common_types.h"
-#include "typedefs.h"  // NOLINT(build/include)
-
-namespace webrtc {
-
-class FileCallback;
-
-class FilePlayer {
- public:
-  // The largest decoded frame size in samples (60ms with 48kHz sample rate).
-  enum { MAX_AUDIO_BUFFER_IN_SAMPLES = 60 * 48 };
-  enum { MAX_AUDIO_BUFFER_IN_BYTES = MAX_AUDIO_BUFFER_IN_SAMPLES * 2 };
-
-  // Note: will return NULL for unsupported formats.
-  static std::unique_ptr<FilePlayer> CreateFilePlayer(
-      const uint32_t instanceID,
-      const FileFormats fileFormat);
-
-  virtual ~FilePlayer() = default;
-
-  // Read 10 ms of audio at |frequencyInHz| to |outBuffer|. |lengthInSamples|
-  // will be set to the number of samples read (not the number of samples per
-  // channel).
-  virtual int Get10msAudioFromFile(int16_t* outBuffer,
-                                   size_t* lengthInSamples,
-                                   int frequencyInHz) = 0;
-
-  // Register callback for receiving file playing notifications.
-  virtual int32_t RegisterModuleFileCallback(FileCallback* callback) = 0;
-
-  // API for playing audio from fileName to channel.
-  // Note: codecInst is used for pre-encoded files.
-  virtual int32_t StartPlayingFile(const char* fileName,
-                                   bool loop,
-                                   uint32_t startPosition,
-                                   float volumeScaling,
-                                   uint32_t notification,
-                                   uint32_t stopPosition,
-                                   const CodecInst* codecInst) = 0;
-
-  // Note: codecInst is used for pre-encoded files.
-  virtual int32_t StartPlayingFile(InStream* sourceStream,
-                                   uint32_t startPosition,
-                                   float volumeScaling,
-                                   uint32_t notification,
-                                   uint32_t stopPosition,
-                                   const CodecInst* codecInst) = 0;
-
-  virtual int32_t StopPlayingFile() = 0;
-
-  virtual bool IsPlayingFile() const = 0;
-
-  virtual int32_t GetPlayoutPosition(uint32_t* durationMs) = 0;
-
-  // Set audioCodec to the currently used audio codec.
-  virtual int32_t AudioCodec(CodecInst* audioCodec) const = 0;
-
-  virtual int32_t Frequency() const = 0;
-
-  // Note: scaleFactor is in the range [0.0 - 2.0]
-  virtual int32_t SetAudioScaling(float scaleFactor) = 0;
-};
-}  // namespace webrtc
-#endif  // VOICE_ENGINE_FILE_PLAYER_H_
diff --git a/voice_engine/file_player_unittests.cc b/voice_engine/file_player_unittests.cc
deleted file mode 100644
index 27a3eae..0000000
--- a/voice_engine/file_player_unittests.cc
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- *  Copyright (c) 2014 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 FilePlayer.
-
-#include "voice_engine/file_player.h"
-
-#include <stdio.h>
-
-#include <memory>
-#include <string>
-
-#include "rtc_base/flags.h"
-#include "rtc_base/md5digest.h"
-#include "rtc_base/stringencode.h"
-#include "test/gtest.h"
-#include "test/testsupport/fileutils.h"
-
-DEFINE_bool(file_player_output, false, "Generate reference files.");
-
-namespace webrtc {
-
-class FilePlayerTest : public ::testing::Test {
- protected:
-  static const uint32_t kId = 0;
-  static const FileFormats kFileFormat = kFileFormatWavFile;
-  static const int kSampleRateHz = 8000;
-
-  FilePlayerTest()
-      : player_(FilePlayer::CreateFilePlayer(kId, kFileFormat)),
-        output_file_(NULL) {}
-
-  void SetUp() override {
-    if (FLAG_file_player_output) {
-      std::string output_file =
-          webrtc::test::OutputPath() + "file_player_unittest_out.pcm";
-      output_file_ = fopen(output_file.c_str(), "wb");
-      ASSERT_TRUE(output_file_ != NULL);
-    }
-  }
-
-  void TearDown() override {
-    if (output_file_)
-      fclose(output_file_);
-  }
-
-  void PlayFileAndCheck(const std::string& input_file,
-                        const std::string& ref_checksum,
-                        int output_length_ms) {
-    const float kScaling = 1;
-    ASSERT_EQ(0, player_->StartPlayingFile(input_file.c_str(), false, 0,
-                                           kScaling, 0, 0, NULL));
-    rtc::Md5Digest checksum;
-    for (int i = 0; i < output_length_ms / 10; ++i) {
-      int16_t out[10 * kSampleRateHz / 1000] = {0};
-      size_t num_samples;
-      EXPECT_EQ(
-          0, player_->Get10msAudioFromFile(out, &num_samples, kSampleRateHz));
-      checksum.Update(out, num_samples * sizeof(out[0]));
-      if (FLAG_file_player_output) {
-        ASSERT_EQ(num_samples,
-                  fwrite(out, sizeof(out[0]), num_samples, output_file_));
-      }
-    }
-    char checksum_result[rtc::Md5Digest::kSize];
-    EXPECT_EQ(rtc::Md5Digest::kSize,
-              checksum.Finish(checksum_result, rtc::Md5Digest::kSize));
-    EXPECT_EQ(ref_checksum,
-              rtc::hex_encode(checksum_result, sizeof(checksum_result)));
-  }
-
-  std::unique_ptr<FilePlayer> player_;
-  FILE* output_file_;
-};
-
-#if defined(WEBRTC_IOS)
-#define MAYBE_PlayWavPcmuFile DISABLED_PlayWavPcmuFile
-#else
-#define MAYBE_PlayWavPcmuFile PlayWavPcmuFile
-#endif
-TEST_F(FilePlayerTest, MAYBE_PlayWavPcmuFile) {
-  const std::string kFileName =
-      test::ResourcePath("utility/encapsulated_pcmu_8khz", "wav");
-  // The file is longer than this, but keeping the output shorter limits the
-  // runtime for the test.
-  const int kOutputLengthMs = 10000;
-  const std::string kRefChecksum = "c74e7fd432d439b1311e1c16815b3e9a";
-
-  PlayFileAndCheck(kFileName, kRefChecksum, kOutputLengthMs);
-}
-
-#if defined(WEBRTC_IOS)
-#define MAYBE_PlayWavPcm16File DISABLED_PlayWavPcm16File
-#else
-#define MAYBE_PlayWavPcm16File PlayWavPcm16File
-#endif
-TEST_F(FilePlayerTest, MAYBE_PlayWavPcm16File) {
-  const std::string kFileName =
-      test::ResourcePath("utility/encapsulated_pcm16b_8khz", "wav");
-  // The file is longer than this, but keeping the output shorter limits the
-  // runtime for the test.
-  const int kOutputLengthMs = 10000;
-  const std::string kRefChecksum = "e41d7e1dac8aeae9f21e8e03cd7ecd71";
-
-  PlayFileAndCheck(kFileName, kRefChecksum, kOutputLengthMs);
-}
-
-}  // namespace webrtc
diff --git a/voice_engine/file_recorder.cc b/voice_engine/file_recorder.cc
deleted file mode 100644
index 025f52c..0000000
--- a/voice_engine/file_recorder.cc
+++ /dev/null
@@ -1,260 +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.
- */
-
-#include "voice_engine/file_recorder.h"
-
-#include <list>
-
-#include "audio/utility/audio_frame_operations.h"
-#include "common_audio/resampler/include/resampler.h"
-#include "common_types.h"  // NOLINT(build/include)
-#include "modules/include/module_common_types.h"
-#include "modules/media_file/media_file.h"
-#include "modules/media_file/media_file_defines.h"
-#include "rtc_base/logging.h"
-#include "rtc_base/platform_thread.h"
-#include "system_wrappers/include/event_wrapper.h"
-#include "typedefs.h"  // NOLINT(build/include)
-#include "voice_engine/coder.h"
-
-namespace webrtc {
-
-namespace {
-
-// The largest decoded frame size in samples (60ms with 32kHz sample rate).
-enum { MAX_AUDIO_BUFFER_IN_SAMPLES = 60 * 32 };
-enum { MAX_AUDIO_BUFFER_IN_BYTES = MAX_AUDIO_BUFFER_IN_SAMPLES * 2 };
-enum { kMaxAudioBufferQueueLength = 100 };
-
-class FileRecorderImpl : public FileRecorder {
- public:
-  FileRecorderImpl(uint32_t instanceID, FileFormats fileFormat);
-  ~FileRecorderImpl() override;
-
-  // FileRecorder functions.
-  int32_t RegisterModuleFileCallback(FileCallback* callback) override;
-  FileFormats RecordingFileFormat() const override;
-  int32_t StartRecordingAudioFile(const char* fileName,
-                                  const CodecInst& codecInst,
-                                  uint32_t notificationTimeMs) override;
-  int32_t StartRecordingAudioFile(OutStream* destStream,
-                                  const CodecInst& codecInst,
-                                  uint32_t notificationTimeMs) override;
-  int32_t StopRecording() override;
-  bool IsRecording() const override;
-  int32_t codec_info(CodecInst* codecInst) const override;
-  int32_t RecordAudioToFile(const AudioFrame& frame) override;
-
- private:
-  int32_t WriteEncodedAudioData(const int8_t* audioBuffer, size_t bufferLength);
-
-  int32_t SetUpAudioEncoder();
-
-  uint32_t _instanceID;
-  FileFormats _fileFormat;
-  MediaFile* _moduleFile;
-
-  CodecInst codec_info_;
-  int8_t _audioBuffer[MAX_AUDIO_BUFFER_IN_BYTES];
-  AudioCoder _audioEncoder;
-  Resampler _audioResampler;
-};
-
-FileRecorderImpl::FileRecorderImpl(uint32_t instanceID, FileFormats fileFormat)
-    : _instanceID(instanceID),
-      _fileFormat(fileFormat),
-      _moduleFile(MediaFile::CreateMediaFile(_instanceID)),
-      codec_info_(),
-      _audioBuffer(),
-      _audioEncoder(instanceID),
-      _audioResampler() {}
-
-FileRecorderImpl::~FileRecorderImpl() {
-  MediaFile::DestroyMediaFile(_moduleFile);
-}
-
-FileFormats FileRecorderImpl::RecordingFileFormat() const {
-  return _fileFormat;
-}
-
-int32_t FileRecorderImpl::RegisterModuleFileCallback(FileCallback* callback) {
-  if (_moduleFile == NULL) {
-    return -1;
-  }
-  return _moduleFile->SetModuleFileCallback(callback);
-}
-
-int32_t FileRecorderImpl::StartRecordingAudioFile(const char* fileName,
-                                                  const CodecInst& codecInst,
-                                                  uint32_t notificationTimeMs) {
-  if (_moduleFile == NULL) {
-    return -1;
-  }
-  codec_info_ = codecInst;
-  int32_t retVal = 0;
-  retVal = _moduleFile->StartRecordingAudioFile(fileName, _fileFormat,
-                                                codecInst, notificationTimeMs);
-
-  if (retVal == 0) {
-    retVal = SetUpAudioEncoder();
-  }
-  if (retVal != 0) {
-    LOG(LS_WARNING) << "Failed to initialize file " << fileName
-                    << " for recording.";
-
-    if (IsRecording()) {
-      StopRecording();
-    }
-  }
-  return retVal;
-}
-
-int32_t FileRecorderImpl::StartRecordingAudioFile(OutStream* destStream,
-                                                  const CodecInst& codecInst,
-                                                  uint32_t notificationTimeMs) {
-  codec_info_ = codecInst;
-  int32_t retVal = _moduleFile->StartRecordingAudioStream(
-      *destStream, _fileFormat, codecInst, notificationTimeMs);
-
-  if (retVal == 0) {
-    retVal = SetUpAudioEncoder();
-  }
-  if (retVal != 0) {
-    LOG(LS_WARNING) << "Failed to initialize outStream for recording.";
-
-    if (IsRecording()) {
-      StopRecording();
-    }
-  }
-  return retVal;
-}
-
-int32_t FileRecorderImpl::StopRecording() {
-  memset(&codec_info_, 0, sizeof(CodecInst));
-  return _moduleFile->StopRecording();
-}
-
-bool FileRecorderImpl::IsRecording() const {
-  return _moduleFile->IsRecording();
-}
-
-int32_t FileRecorderImpl::RecordAudioToFile(
-    const AudioFrame& incomingAudioFrame) {
-  if (codec_info_.plfreq == 0) {
-    LOG(LS_WARNING) << "RecordAudioToFile() recording audio is not "
-                    << "turned on.";
-    return -1;
-  }
-  AudioFrame tempAudioFrame;
-  tempAudioFrame.samples_per_channel_ = 0;
-  if (incomingAudioFrame.num_channels_ == 2 && !_moduleFile->IsStereo()) {
-    // Recording mono but incoming audio is (interleaved) stereo.
-    tempAudioFrame.num_channels_ = 1;
-    tempAudioFrame.sample_rate_hz_ = incomingAudioFrame.sample_rate_hz_;
-    tempAudioFrame.samples_per_channel_ =
-        incomingAudioFrame.samples_per_channel_;
-    if (!incomingAudioFrame.muted()) {
-      AudioFrameOperations::StereoToMono(
-          incomingAudioFrame.data(), incomingAudioFrame.samples_per_channel_,
-          tempAudioFrame.mutable_data());
-    }
-  } else if (incomingAudioFrame.num_channels_ == 1 && _moduleFile->IsStereo()) {
-    // Recording stereo but incoming audio is mono.
-    tempAudioFrame.num_channels_ = 2;
-    tempAudioFrame.sample_rate_hz_ = incomingAudioFrame.sample_rate_hz_;
-    tempAudioFrame.samples_per_channel_ =
-        incomingAudioFrame.samples_per_channel_;
-    if (!incomingAudioFrame.muted()) {
-      AudioFrameOperations::MonoToStereo(
-          incomingAudioFrame.data(), incomingAudioFrame.samples_per_channel_,
-          tempAudioFrame.mutable_data());
-    }
-  }
-
-  const AudioFrame* ptrAudioFrame = &incomingAudioFrame;
-  if (tempAudioFrame.samples_per_channel_ != 0) {
-    // If ptrAudioFrame is not empty it contains the audio to be recorded.
-    ptrAudioFrame = &tempAudioFrame;
-  }
-
-  // Encode the audio data before writing to file. Don't encode if the codec
-  // is PCM.
-  // NOTE: stereo recording is only supported for WAV files.
-  // TODO(hellner): WAV expect PCM in little endian byte order. Not
-  // "encoding" with PCM coder should be a problem for big endian systems.
-  size_t encodedLenInBytes = 0;
-  if (_fileFormat == kFileFormatPreencodedFile ||
-      STR_CASE_CMP(codec_info_.plname, "L16") != 0) {
-    if (_audioEncoder.Encode(*ptrAudioFrame, _audioBuffer,
-                             &encodedLenInBytes) == -1) {
-      LOG(LS_WARNING) << "RecordAudioToFile() codec " << codec_info_.plname
-                      << " not supported or failed to encode stream.";
-      return -1;
-    }
-  } else {
-    size_t outLen = 0;
-    _audioResampler.ResetIfNeeded(ptrAudioFrame->sample_rate_hz_,
-                                  codec_info_.plfreq,
-                                  ptrAudioFrame->num_channels_);
-    // TODO(yujo): skip resample if frame is muted.
-    _audioResampler.Push(
-        ptrAudioFrame->data(),
-        ptrAudioFrame->samples_per_channel_ * ptrAudioFrame->num_channels_,
-        reinterpret_cast<int16_t*>(_audioBuffer), MAX_AUDIO_BUFFER_IN_BYTES,
-        outLen);
-    encodedLenInBytes = outLen * sizeof(int16_t);
-  }
-
-  // Codec may not be operating at a frame rate of 10 ms. Whenever enough
-  // 10 ms chunks of data has been pushed to the encoder an encoded frame
-  // will be available. Wait until then.
-  if (encodedLenInBytes) {
-    if (WriteEncodedAudioData(_audioBuffer, encodedLenInBytes) == -1) {
-      return -1;
-    }
-  }
-  return 0;
-}
-
-int32_t FileRecorderImpl::SetUpAudioEncoder() {
-  if (_fileFormat == kFileFormatPreencodedFile ||
-      STR_CASE_CMP(codec_info_.plname, "L16") != 0) {
-    if (_audioEncoder.SetEncodeCodec(codec_info_) == -1) {
-      LOG(LS_ERROR) << "SetUpAudioEncoder() codec " << codec_info_.plname
-                    << " not supported.";
-      return -1;
-    }
-  }
-  return 0;
-}
-
-int32_t FileRecorderImpl::codec_info(CodecInst* codecInst) const {
-  if (codec_info_.plfreq == 0) {
-    return -1;
-  }
-  *codecInst = codec_info_;
-  return 0;
-}
-
-int32_t FileRecorderImpl::WriteEncodedAudioData(const int8_t* audioBuffer,
-                                                size_t bufferLength) {
-  return _moduleFile->IncomingAudioData(audioBuffer, bufferLength);
-}
-
-}  // namespace
-
-std::unique_ptr<FileRecorder> FileRecorder::CreateFileRecorder(
-    uint32_t instanceID,
-    FileFormats fileFormat) {
-  return std::unique_ptr<FileRecorder>(
-      new FileRecorderImpl(instanceID, fileFormat));
-}
-
-}  // namespace webrtc
diff --git a/voice_engine/file_recorder.h b/voice_engine/file_recorder.h
deleted file mode 100644
index 9c17caf..0000000
--- a/voice_engine/file_recorder.h
+++ /dev/null
@@ -1,57 +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.
- */
-
-#ifndef VOICE_ENGINE_FILE_RECORDER_H_
-#define VOICE_ENGINE_FILE_RECORDER_H_
-
-#include <memory>
-
-#include "common_types.h"  // NOLINT(build/include)
-#include "modules/include/module_common_types.h"
-#include "modules/media_file/media_file_defines.h"
-#include "typedefs.h"  // NOLINT(build/include)
-
-namespace webrtc {
-
-class FileRecorder {
- public:
-  // Note: will return NULL for unsupported formats.
-  static std::unique_ptr<FileRecorder> CreateFileRecorder(
-      const uint32_t instanceID,
-      const FileFormats fileFormat);
-
-  virtual ~FileRecorder() = default;
-
-  virtual int32_t RegisterModuleFileCallback(FileCallback* callback) = 0;
-
-  virtual FileFormats RecordingFileFormat() const = 0;
-
-  virtual int32_t StartRecordingAudioFile(const char* fileName,
-                                          const CodecInst& codecInst,
-                                          uint32_t notification) = 0;
-
-  virtual int32_t StartRecordingAudioFile(OutStream* destStream,
-                                          const CodecInst& codecInst,
-                                          uint32_t notification) = 0;
-
-  // Stop recording.
-  virtual int32_t StopRecording() = 0;
-
-  // Return true if recording.
-  virtual bool IsRecording() const = 0;
-
-  virtual int32_t codec_info(CodecInst* codecInst) const = 0;
-
-  // Write frame to file. Frame should contain 10ms of un-ecoded audio data.
-  virtual int32_t RecordAudioToFile(const AudioFrame& frame) = 0;
-};
-
-}  // namespace webrtc
-#endif  // VOICE_ENGINE_FILE_RECORDER_H_
diff --git a/voice_engine/include/voe_file.h b/voice_engine/include/voe_file.h
deleted file mode 100644
index fe39f82..0000000
--- a/voice_engine/include/voe_file.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- *  Copyright (c) 2011 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.
- */
-
-// This sub-API supports the following functionalities:
-//
-//  - File playback.
-//  - File recording.
-//  - File conversion.
-//
-// Usage example, omitting error checking:
-//
-//  using namespace webrtc;
-//  VoiceEngine* voe = VoiceEngine::Create();
-//  VoEBase* base = VoEBase::GetInterface(voe);
-//  VoEFile* file  = VoEFile::GetInterface(voe);
-//  base->Init();
-//  int ch = base->CreateChannel();
-//  ...
-//  base->StartPlayout(ch);
-//  file->StartPlayingFileAsMicrophone(ch, "data_file_16kHz.pcm", true);
-//  ...
-//  file->StopPlayingFileAsMicrophone(ch);
-//  base->StopPlayout(ch);
-//  ...
-//  base->DeleteChannel(ch);
-//  base->Terminate();
-//  base->Release();
-//  file->Release();
-//  VoiceEngine::Delete(voe);
-//
-#ifndef VOICE_ENGINE_VOE_FILE_H_
-#define VOICE_ENGINE_VOE_FILE_H_
-
-#include "common_types.h"  // NOLINT(build/include)
-
-namespace webrtc {
-
-class VoiceEngine;
-
-class WEBRTC_DLLEXPORT VoEFile {
- public:
-  // Factory for the VoEFile sub-API. Increases an internal
-  // reference counter if successful. Returns NULL if the API is not
-  // supported or if construction fails.
-  static VoEFile* GetInterface(VoiceEngine* voiceEngine);
-
-  // Releases the VoEFile sub-API and decreases an internal
-  // reference counter. Returns the new reference count. This value should
-  // be zero for all sub-API:s before the VoiceEngine object can be safely
-  // deleted.
-  virtual int Release() = 0;
-
-  // Starts playing and mixing files with the local speaker signal for
-  // playout.
-  virtual int StartPlayingFileLocally(
-      int channel,
-      const char fileNameUTF8[1024],
-      bool loop = false,
-      FileFormats format = kFileFormatPcm16kHzFile,
-      float volumeScaling = 1.0,
-      int startPointMs = 0,
-      int stopPointMs = 0) = 0;
-
-  // Starts playing and mixing streams with the local speaker signal for
-  // playout.
-  virtual int StartPlayingFileLocally(
-      int channel,
-      InStream* stream,
-      FileFormats format = kFileFormatPcm16kHzFile,
-      float volumeScaling = 1.0,
-      int startPointMs = 0,
-      int stopPointMs = 0) = 0;
-
-  // Stops playback of a file on a specific |channel|.
-  virtual int StopPlayingFileLocally(int channel) = 0;
-
-  // Returns the current file playing state for a specific |channel|.
-  virtual int IsPlayingFileLocally(int channel) = 0;
-
-  // Starts reading data from a file and transmits the data either
-  // mixed with or instead of the microphone signal.
-  virtual int StartPlayingFileAsMicrophone(
-      int channel,
-      const char fileNameUTF8[1024],
-      bool loop = false,
-      bool mixWithMicrophone = false,
-      FileFormats format = kFileFormatPcm16kHzFile,
-      float volumeScaling = 1.0) = 0;
-
-  // Starts reading data from a stream and transmits the data either
-  // mixed with or instead of the microphone signal.
-  virtual int StartPlayingFileAsMicrophone(
-      int channel,
-      InStream* stream,
-      bool mixWithMicrophone = false,
-      FileFormats format = kFileFormatPcm16kHzFile,
-      float volumeScaling = 1.0) = 0;
-
-  // Stops playing of a file as microphone signal for a specific |channel|.
-  virtual int StopPlayingFileAsMicrophone(int channel) = 0;
-
-  // Returns whether the |channel| is currently playing a file as microphone.
-  virtual int IsPlayingFileAsMicrophone(int channel) = 0;
-
-  // Starts recording the mixed playout audio.
-  virtual int StartRecordingPlayout(int channel,
-                                    const char* fileNameUTF8,
-                                    CodecInst* compression = NULL,
-                                    int maxSizeBytes = -1) = 0;
-
-  // Stops recording the mixed playout audio.
-  virtual int StopRecordingPlayout(int channel) = 0;
-
-  virtual int StartRecordingPlayout(int channel,
-                                    OutStream* stream,
-                                    CodecInst* compression = NULL) = 0;
-
-  // Starts recording the microphone signal to a file.
-  virtual int StartRecordingMicrophone(const char* fileNameUTF8,
-                                       CodecInst* compression = NULL,
-                                       int maxSizeBytes = -1) = 0;
-
-  // Starts recording the microphone signal to a stream.
-  virtual int StartRecordingMicrophone(OutStream* stream,
-                                       CodecInst* compression = NULL) = 0;
-
-  // Stops recording the microphone signal.
-  virtual int StopRecordingMicrophone() = 0;
-
- protected:
-  VoEFile() {}
-  virtual ~VoEFile() {}
-};
-
-}  // namespace webrtc
-
-#endif  // VOICE_ENGINE_VOE_FILE_H_
diff --git a/voice_engine/output_mixer.cc b/voice_engine/output_mixer.cc
index b90dc3e..8d1e31d 100644
--- a/voice_engine/output_mixer.cc
+++ b/voice_engine/output_mixer.cc
@@ -12,7 +12,6 @@
 
 #include "modules/audio_processing/include/audio_processing.h"
 #include "rtc_base/format_macros.h"
-#include "system_wrappers/include/file_wrapper.h"
 #include "system_wrappers/include/trace.h"
 #include "voice_engine/statistics.h"
 #include "voice_engine/utility.h"
@@ -33,45 +32,6 @@
     _audioFrame.id_ = id;
 }
 
-void OutputMixer::PlayNotification(int32_t id, uint32_t durationMs)
-{
-    WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId,-1),
-                 "OutputMixer::PlayNotification(id=%d, durationMs=%d)",
-                 id, durationMs);
-    // Not implement yet
-}
-
-void OutputMixer::RecordNotification(int32_t id,
-                                     uint32_t durationMs)
-{
-    WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId,-1),
-                 "OutputMixer::RecordNotification(id=%d, durationMs=%d)",
-                 id, durationMs);
-
-    // Not implement yet
-}
-
-void OutputMixer::PlayFileEnded(int32_t id)
-{
-    WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId,-1),
-                 "OutputMixer::PlayFileEnded(id=%d)", id);
-
-    // not needed
-}
-
-void OutputMixer::RecordFileEnded(int32_t id)
-{
-    WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId,-1),
-                 "OutputMixer::RecordFileEnded(id=%d)", id);
-    assert(id == _instanceId);
-
-    rtc::CritScope cs(&_fileCritSect);
-    _outputFileRecording = false;
-    WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, VoEId(_instanceId,-1),
-                 "OutputMixer::RecordFileEnded() =>"
-                 "output file recorder module is shutdown");
-}
-
 int32_t
 OutputMixer::Create(OutputMixer*& mixer, uint32_t instanceId)
 {
@@ -91,8 +51,7 @@
 OutputMixer::OutputMixer(uint32_t instanceId) :
     _mixerModule(*AudioConferenceMixer::Create(instanceId)),
     _instanceId(instanceId),
-    _mixingFrequencyHz(8000),
-    _outputFileRecording(false)
+    _mixingFrequencyHz(8000)
 {
     WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_instanceId,-1),
                  "OutputMixer::OutputMixer() - ctor");
@@ -119,13 +78,6 @@
 {
     WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_instanceId,-1),
                  "OutputMixer::~OutputMixer() - dtor");
-    {
-        rtc::CritScope cs(&_fileCritSect);
-        if (output_file_recorder_) {
-          output_file_recorder_->RegisterModuleFileCallback(NULL);
-          output_file_recorder_->StopRecording();
-        }
-    }
     _mixerModule.UnRegisterMixedStreamCallback();
     delete &_mixerModule;
 }
@@ -157,192 +109,12 @@
 }
 
 int32_t
-OutputMixer::SetAnonymousMixabilityStatus(MixerParticipant& participant,
-                                          bool mixable)
-{
-    return _mixerModule.SetAnonymousMixabilityStatus(&participant, mixable);
-}
-
-int32_t
 OutputMixer::MixActiveChannels()
 {
     _mixerModule.Process();
     return 0;
 }
 
-int OutputMixer::StartRecordingPlayout(const char* fileName,
-                                       const CodecInst* codecInst)
-{
-    WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,-1),
-                 "OutputMixer::StartRecordingPlayout(fileName=%s)", fileName);
-
-    if (_outputFileRecording)
-    {
-        WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId,-1),
-                     "StartRecordingPlayout() is already recording");
-        return 0;
-    }
-
-    FileFormats format;
-    const uint32_t notificationTime(0);
-    CodecInst dummyCodec={100,"L16",16000,320,1,320000};
-
-    if ((codecInst != NULL) &&
-      ((codecInst->channels < 1) || (codecInst->channels > 2)))
-    {
-        _engineStatisticsPtr->SetLastError(
-            VE_BAD_ARGUMENT, kTraceError,
-            "StartRecordingPlayout() invalid compression");
-        return(-1);
-    }
-    if(codecInst == NULL)
-    {
-        format = kFileFormatPcm16kHzFile;
-        codecInst=&dummyCodec;
-    }
-    else if((STR_CASE_CMP(codecInst->plname,"L16") == 0) ||
-        (STR_CASE_CMP(codecInst->plname,"PCMU") == 0) ||
-        (STR_CASE_CMP(codecInst->plname,"PCMA") == 0))
-    {
-        format = kFileFormatWavFile;
-    }
-    else
-    {
-        format = kFileFormatCompressedFile;
-    }
-
-    rtc::CritScope cs(&_fileCritSect);
-
-    // Destroy the old instance
-    if (output_file_recorder_) {
-      output_file_recorder_->RegisterModuleFileCallback(NULL);
-      output_file_recorder_.reset();
-    }
-
-    output_file_recorder_ = FileRecorder::CreateFileRecorder(
-        _instanceId, (const FileFormats)format);
-    if (!output_file_recorder_) {
-      _engineStatisticsPtr->SetLastError(
-          VE_INVALID_ARGUMENT, kTraceError,
-          "StartRecordingPlayout() fileRecorder format isnot correct");
-      return -1;
-    }
-
-    if (output_file_recorder_->StartRecordingAudioFile(
-            fileName, (const CodecInst&)*codecInst, notificationTime) != 0) {
-      _engineStatisticsPtr->SetLastError(
-          VE_BAD_FILE, kTraceError,
-          "StartRecordingAudioFile() failed to start file recording");
-      output_file_recorder_->StopRecording();
-      output_file_recorder_.reset();
-      return -1;
-    }
-    output_file_recorder_->RegisterModuleFileCallback(this);
-    _outputFileRecording = true;
-
-    return 0;
-}
-
-int OutputMixer::StartRecordingPlayout(OutStream* stream,
-                                       const CodecInst* codecInst)
-{
-    WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,-1),
-                 "OutputMixer::StartRecordingPlayout()");
-
-    if (_outputFileRecording)
-    {
-        WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId,-1),
-                     "StartRecordingPlayout() is already recording");
-        return 0;
-    }
-
-    FileFormats format;
-    const uint32_t notificationTime(0);
-    CodecInst dummyCodec={100,"L16",16000,320,1,320000};
-
-    if (codecInst != NULL && codecInst->channels != 1)
-    {
-        _engineStatisticsPtr->SetLastError(
-            VE_BAD_ARGUMENT, kTraceError,
-            "StartRecordingPlayout() invalid compression");
-        return(-1);
-    }
-    if(codecInst == NULL)
-    {
-        format = kFileFormatPcm16kHzFile;
-        codecInst=&dummyCodec;
-    }
-    else if((STR_CASE_CMP(codecInst->plname,"L16") == 0) ||
-        (STR_CASE_CMP(codecInst->plname,"PCMU") == 0) ||
-        (STR_CASE_CMP(codecInst->plname,"PCMA") == 0))
-    {
-        format = kFileFormatWavFile;
-    }
-    else
-    {
-        format = kFileFormatCompressedFile;
-    }
-
-    rtc::CritScope cs(&_fileCritSect);
-
-    // Destroy the old instance
-    if (output_file_recorder_) {
-      output_file_recorder_->RegisterModuleFileCallback(NULL);
-      output_file_recorder_.reset();
-    }
-
-    output_file_recorder_ = FileRecorder::CreateFileRecorder(
-        _instanceId, (const FileFormats)format);
-    if (!output_file_recorder_) {
-      _engineStatisticsPtr->SetLastError(
-          VE_INVALID_ARGUMENT, kTraceError,
-          "StartRecordingPlayout() fileRecorder format isnot correct");
-      return -1;
-    }
-
-    if (output_file_recorder_->StartRecordingAudioFile(stream, *codecInst,
-                                                       notificationTime) != 0) {
-      _engineStatisticsPtr->SetLastError(
-          VE_BAD_FILE, kTraceError,
-          "StartRecordingAudioFile() failed to start file recording");
-      output_file_recorder_->StopRecording();
-      output_file_recorder_.reset();
-      return -1;
-    }
-
-    output_file_recorder_->RegisterModuleFileCallback(this);
-    _outputFileRecording = true;
-
-    return 0;
-}
-
-int OutputMixer::StopRecordingPlayout()
-{
-    WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,-1),
-                 "OutputMixer::StopRecordingPlayout()");
-
-    if (!_outputFileRecording)
-    {
-        WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_instanceId,-1),
-                     "StopRecordingPlayout() file isnot recording");
-        return -1;
-    }
-
-    rtc::CritScope cs(&_fileCritSect);
-
-    if (output_file_recorder_->StopRecording() != 0) {
-      _engineStatisticsPtr->SetLastError(
-          VE_STOP_RECORDING_FAILED, kTraceError,
-          "StopRecording(), could not stop recording");
-      return -1;
-    }
-    output_file_recorder_->RegisterModuleFileCallback(NULL);
-    output_file_recorder_.reset();
-    _outputFileRecording = false;
-
-    return 0;
-}
-
 int OutputMixer::GetMixedAudio(int sample_rate_hz,
                                size_t num_channels,
                                AudioFrame* frame) {
@@ -351,13 +123,6 @@
       "OutputMixer::GetMixedAudio(sample_rate_hz=%d, num_channels=%" PRIuS ")",
       sample_rate_hz, num_channels);
 
-  // --- Record playout if enabled
-  {
-    rtc::CritScope cs(&_fileCritSect);
-    if (_outputFileRecording && output_file_recorder_)
-      output_file_recorder_->RecordAudioToFile(_audioFrame);
-  }
-
   frame->num_channels_ = num_channels;
   frame->sample_rate_hz_ = sample_rate_hz;
   // TODO(andrew): Ideally the downmixing would occur much earlier, in
diff --git a/voice_engine/output_mixer.h b/voice_engine/output_mixer.h
index b34b663..284f92d 100644
--- a/voice_engine/output_mixer.h
+++ b/voice_engine/output_mixer.h
@@ -18,7 +18,6 @@
 #include "modules/audio_conference_mixer/include/audio_conference_mixer.h"
 #include "modules/audio_conference_mixer/include/audio_conference_mixer_defines.h"
 #include "rtc_base/criticalsection.h"
-#include "voice_engine/file_recorder.h"
 
 namespace webrtc {
 
@@ -29,8 +28,7 @@
 
 class Statistics;
 
-class OutputMixer : public AudioMixerOutputReceiver,
-                    public FileCallback
+class OutputMixer : public AudioMixerOutputReceiver
 {
 public:
     static int32_t Create(OutputMixer*& mixer, uint32_t instanceId);
@@ -49,20 +47,9 @@
     int32_t SetMixabilityStatus(MixerParticipant& participant,
                                 bool mixable);
 
-    int32_t SetAnonymousMixabilityStatus(MixerParticipant& participant,
-                                         bool mixable);
-
     int GetMixedAudio(int sample_rate_hz, size_t num_channels,
                       AudioFrame* audioFrame);
 
-    // VoEFile
-    int StartRecordingPlayout(const char* fileName,
-                              const CodecInst* codecInst);
-
-    int StartRecordingPlayout(OutStream* stream,
-                              const CodecInst* codecInst);
-    int StopRecordingPlayout();
-
     virtual ~OutputMixer();
 
     // from AudioMixerOutputReceiver
@@ -72,14 +59,6 @@
         const AudioFrame** uniqueAudioFrames,
         uint32_t size);
 
-    // For file recording
-    void PlayNotification(int32_t id, uint32_t durationMs);
-
-    void RecordNotification(int32_t id, uint32_t durationMs);
-
-    void PlayFileEnded(int32_t id);
-    void RecordFileEnded(int32_t id);
-
 private:
     OutputMixer(uint32_t instanceId);
 
@@ -87,8 +66,6 @@
     Statistics* _engineStatisticsPtr;
     AudioProcessing* _audioProcessingModulePtr;
 
-    // Protects output_file_recorder_ and _outputFileRecording.
-    rtc::CriticalSection _fileCritSect;
     AudioConferenceMixer& _mixerModule;
     AudioFrame _audioFrame;
     // Converts mixed audio to the audio device output rate.
@@ -97,8 +74,6 @@
     PushResampler<int16_t> audioproc_resampler_;
     int _instanceId;
     int _mixingFrequencyHz;
-    std::unique_ptr<FileRecorder> output_file_recorder_;
-    bool _outputFileRecording;
 };
 
 }  // namespace voe
diff --git a/voice_engine/transmit_mixer.cc b/voice_engine/transmit_mixer.cc
index fefbc47..a888eb1 100644
--- a/voice_engine/transmit_mixer.cc
+++ b/voice_engine/transmit_mixer.cc
@@ -67,64 +67,6 @@
 }
 #endif  // WEBRTC_VOICE_ENGINE_TYPING_DETECTION
 
-void TransmitMixer::PlayNotification(int32_t id,
-                                     uint32_t durationMs)
-{
-    WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, -1),
-                 "TransmitMixer::PlayNotification(id=%d, durationMs=%d)",
-                 id, durationMs);
-
-    // Not implement yet
-}
-
-void TransmitMixer::RecordNotification(int32_t id,
-                                       uint32_t durationMs)
-{
-    WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId,-1),
-                 "TransmitMixer::RecordNotification(id=%d, durationMs=%d)",
-                 id, durationMs);
-
-    // Not implement yet
-}
-
-void TransmitMixer::PlayFileEnded(int32_t id)
-{
-    WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, -1),
-                 "TransmitMixer::PlayFileEnded(id=%d)", id);
-
-    assert(id == _filePlayerId);
-
-    rtc::CritScope cs(&_critSect);
-
-    _filePlaying = false;
-    WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, VoEId(_instanceId, -1),
-                 "TransmitMixer::PlayFileEnded() =>"
-                 "file player module is shutdown");
-}
-
-void
-TransmitMixer::RecordFileEnded(int32_t id)
-{
-    WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, -1),
-                 "TransmitMixer::RecordFileEnded(id=%d)", id);
-
-    if (id == _fileRecorderId)
-    {
-        rtc::CritScope cs(&_critSect);
-        _fileRecording = false;
-        WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, VoEId(_instanceId, -1),
-                     "TransmitMixer::RecordFileEnded() => fileRecorder module"
-                     "is shutdown");
-    } else if (id == _fileCallRecorderId)
-    {
-        rtc::CritScope cs(&_critSect);
-        _fileCallRecording = false;
-        WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, VoEId(_instanceId, -1),
-                     "TransmitMixer::RecordFileEnded() => fileCallRecorder"
-                     "module is shutdown");
-    }
-}
-
 int32_t
 TransmitMixer::Create(TransmitMixer*& mixer, uint32_t instanceId)
 {
@@ -152,11 +94,6 @@
 }
 
 TransmitMixer::TransmitMixer(uint32_t instanceId) :
-    // Avoid conflict with other channels by adding 1024 - 1026,
-    // won't use as much as 1024 channels.
-    _filePlayerId(instanceId + 1024),
-    _fileRecorderId(instanceId + 1025),
-    _fileCallRecorderId(instanceId + 1026),
 #if WEBRTC_VOICE_ENGINE_TYPING_DETECTION
     _monitorModule(this),
 #endif
@@ -174,21 +111,6 @@
     if (_processThreadPtr)
         _processThreadPtr->DeRegisterModule(&_monitorModule);
 #endif
-    {
-        rtc::CritScope cs(&_critSect);
-        if (file_recorder_) {
-          file_recorder_->RegisterModuleFileCallback(NULL);
-          file_recorder_->StopRecording();
-        }
-        if (file_call_recorder_) {
-          file_call_recorder_->RegisterModuleFileCallback(NULL);
-          file_call_recorder_->StopRecording();
-        }
-        if (file_player_) {
-          file_player_->RegisterModuleFileCallback(NULL);
-          file_player_->StopPlayingFile();
-        }
-    }
 }
 
 int32_t
@@ -295,23 +217,6 @@
     TypingDetection(keyPressed);
 #endif
 
-    // --- Mix with file (does not affect the mixing frequency)
-    if (_filePlaying)
-    {
-        MixOrReplaceAudioWithFile(_audioFrame.sample_rate_hz_);
-    }
-
-    // --- Record to file
-    bool file_recording = false;
-    {
-        rtc::CritScope cs(&_critSect);
-        file_recording =  _fileRecording;
-    }
-    if (file_recording)
-    {
-        RecordAudioToFile(_audioFrame.sample_rate_hz_);
-    }
-
     // --- Measure audio level of speech after all processing.
     double sample_duration = static_cast<double>(nSamples) / samplesPerSec;
     _audioLevel.ComputeLevel(_audioFrame, sample_duration);
@@ -344,509 +249,6 @@
     return 0;
 }
 
-int TransmitMixer::StartPlayingFileAsMicrophone(const char* fileName,
-                                                bool loop,
-                                                FileFormats format,
-                                                int startPosition,
-                                                float volumeScaling,
-                                                int stopPosition,
-                                                const CodecInst* codecInst)
-{
-    WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1),
-                 "TransmitMixer::StartPlayingFileAsMicrophone("
-                 "fileNameUTF8[]=%s,loop=%d, format=%d, volumeScaling=%5.3f,"
-                 " startPosition=%d, stopPosition=%d)", fileName, loop,
-                 format, volumeScaling, startPosition, stopPosition);
-
-    if (_filePlaying)
-    {
-        _engineStatisticsPtr->SetLastError(
-            VE_ALREADY_PLAYING, kTraceWarning,
-            "StartPlayingFileAsMicrophone() is already playing");
-        return 0;
-    }
-
-    rtc::CritScope cs(&_critSect);
-
-    // Destroy the old instance
-    if (file_player_) {
-      file_player_->RegisterModuleFileCallback(NULL);
-      file_player_.reset();
-    }
-
-    // Dynamically create the instance
-    file_player_ =
-        FilePlayer::CreateFilePlayer(_filePlayerId, (const FileFormats)format);
-
-    if (!file_player_) {
-      _engineStatisticsPtr->SetLastError(
-          VE_INVALID_ARGUMENT, kTraceError,
-          "StartPlayingFileAsMicrophone() filePlayer format isnot correct");
-      return -1;
-    }
-
-    const uint32_t notificationTime(0);
-
-    if (file_player_->StartPlayingFile(
-            fileName, loop, startPosition, volumeScaling, notificationTime,
-            stopPosition, (const CodecInst*)codecInst) != 0) {
-      _engineStatisticsPtr->SetLastError(
-          VE_BAD_FILE, kTraceError,
-          "StartPlayingFile() failed to start file playout");
-      file_player_->StopPlayingFile();
-      file_player_.reset();
-      return -1;
-    }
-
-    file_player_->RegisterModuleFileCallback(this);
-    _filePlaying = true;
-
-    return 0;
-}
-
-int TransmitMixer::StartPlayingFileAsMicrophone(InStream* stream,
-                                                FileFormats format,
-                                                int startPosition,
-                                                float volumeScaling,
-                                                int stopPosition,
-                                                const CodecInst* codecInst)
-{
-    WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,-1),
-                 "TransmitMixer::StartPlayingFileAsMicrophone(format=%d,"
-                 " volumeScaling=%5.3f, startPosition=%d, stopPosition=%d)",
-                 format, volumeScaling, startPosition, stopPosition);
-
-    if (stream == NULL)
-    {
-        _engineStatisticsPtr->SetLastError(
-            VE_BAD_FILE, kTraceError,
-            "StartPlayingFileAsMicrophone() NULL as input stream");
-        return -1;
-    }
-
-    if (_filePlaying)
-    {
-        _engineStatisticsPtr->SetLastError(
-            VE_ALREADY_PLAYING, kTraceWarning,
-            "StartPlayingFileAsMicrophone() is already playing");
-        return 0;
-    }
-
-    rtc::CritScope cs(&_critSect);
-
-    // Destroy the old instance
-    if (file_player_) {
-      file_player_->RegisterModuleFileCallback(NULL);
-      file_player_.reset();
-    }
-
-    // Dynamically create the instance
-    file_player_ =
-        FilePlayer::CreateFilePlayer(_filePlayerId, (const FileFormats)format);
-
-    if (!file_player_) {
-      _engineStatisticsPtr->SetLastError(
-          VE_INVALID_ARGUMENT, kTraceWarning,
-          "StartPlayingFileAsMicrophone() filePlayer format isnot correct");
-      return -1;
-    }
-
-    const uint32_t notificationTime(0);
-
-    if (file_player_->StartPlayingFile(stream, startPosition, volumeScaling,
-                                       notificationTime, stopPosition,
-                                       (const CodecInst*)codecInst) != 0) {
-      _engineStatisticsPtr->SetLastError(
-          VE_BAD_FILE, kTraceError,
-          "StartPlayingFile() failed to start file playout");
-      file_player_->StopPlayingFile();
-      file_player_.reset();
-      return -1;
-    }
-    file_player_->RegisterModuleFileCallback(this);
-    _filePlaying = true;
-
-    return 0;
-}
-
-int TransmitMixer::StopPlayingFileAsMicrophone()
-{
-    WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,-1),
-                 "TransmitMixer::StopPlayingFileAsMicrophone()");
-
-    if (!_filePlaying)
-    {
-        return 0;
-    }
-
-    rtc::CritScope cs(&_critSect);
-
-    if (file_player_->StopPlayingFile() != 0) {
-      _engineStatisticsPtr->SetLastError(
-          VE_CANNOT_STOP_PLAYOUT, kTraceError,
-          "StopPlayingFile() couldnot stop playing file");
-      return -1;
-    }
-
-    file_player_->RegisterModuleFileCallback(NULL);
-    file_player_.reset();
-    _filePlaying = false;
-
-    return 0;
-}
-
-int TransmitMixer::IsPlayingFileAsMicrophone() const
-{
-    WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1),
-                 "TransmitMixer::IsPlayingFileAsMicrophone()");
-    return _filePlaying;
-}
-
-int TransmitMixer::StartRecordingMicrophone(const char* fileName,
-                                            const CodecInst* codecInst)
-{
-    WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1),
-                 "TransmitMixer::StartRecordingMicrophone(fileName=%s)",
-                 fileName);
-
-    rtc::CritScope cs(&_critSect);
-
-    if (_fileRecording)
-    {
-        WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1),
-                     "StartRecordingMicrophone() is already recording");
-        return 0;
-    }
-
-    FileFormats format;
-    const uint32_t notificationTime(0); // Not supported in VoE
-    CodecInst dummyCodec = { 100, "L16", 16000, 320, 1, 320000 };
-
-    if (codecInst != NULL && codecInst->channels > 2)
-    {
-        _engineStatisticsPtr->SetLastError(
-            VE_BAD_ARGUMENT, kTraceError,
-            "StartRecordingMicrophone() invalid compression");
-        return (-1);
-    }
-    if (codecInst == NULL)
-    {
-        format = kFileFormatPcm16kHzFile;
-        codecInst = &dummyCodec;
-    } else if ((STR_CASE_CMP(codecInst->plname,"L16") == 0) ||
-        (STR_CASE_CMP(codecInst->plname,"PCMU") == 0) ||
-        (STR_CASE_CMP(codecInst->plname,"PCMA") == 0))
-    {
-        format = kFileFormatWavFile;
-    } else
-    {
-        format = kFileFormatCompressedFile;
-    }
-
-    // Destroy the old instance
-    if (file_recorder_) {
-      file_recorder_->RegisterModuleFileCallback(NULL);
-      file_recorder_.reset();
-    }
-
-    file_recorder_ = FileRecorder::CreateFileRecorder(
-        _fileRecorderId, (const FileFormats)format);
-    if (!file_recorder_) {
-      _engineStatisticsPtr->SetLastError(
-          VE_INVALID_ARGUMENT, kTraceError,
-          "StartRecordingMicrophone() fileRecorder format isnot correct");
-      return -1;
-    }
-
-    if (file_recorder_->StartRecordingAudioFile(
-            fileName, (const CodecInst&)*codecInst, notificationTime) != 0) {
-      _engineStatisticsPtr->SetLastError(
-          VE_BAD_FILE, kTraceError,
-          "StartRecordingAudioFile() failed to start file recording");
-      file_recorder_->StopRecording();
-      file_recorder_.reset();
-      return -1;
-    }
-    file_recorder_->RegisterModuleFileCallback(this);
-    _fileRecording = true;
-
-    return 0;
-}
-
-int TransmitMixer::StartRecordingMicrophone(OutStream* stream,
-                                            const CodecInst* codecInst)
-{
-    WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1),
-               "TransmitMixer::StartRecordingMicrophone()");
-
-    rtc::CritScope cs(&_critSect);
-
-    if (_fileRecording)
-    {
-        WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1),
-                   "StartRecordingMicrophone() is already recording");
-        return 0;
-    }
-
-    FileFormats format;
-    const uint32_t notificationTime(0); // Not supported in VoE
-    CodecInst dummyCodec = { 100, "L16", 16000, 320, 1, 320000 };
-
-    if (codecInst != NULL && codecInst->channels != 1)
-    {
-        _engineStatisticsPtr->SetLastError(
-            VE_BAD_ARGUMENT, kTraceError,
-            "StartRecordingMicrophone() invalid compression");
-        return (-1);
-    }
-    if (codecInst == NULL)
-    {
-        format = kFileFormatPcm16kHzFile;
-        codecInst = &dummyCodec;
-    } else if ((STR_CASE_CMP(codecInst->plname,"L16") == 0) ||
-        (STR_CASE_CMP(codecInst->plname,"PCMU") == 0) ||
-        (STR_CASE_CMP(codecInst->plname,"PCMA") == 0))
-    {
-        format = kFileFormatWavFile;
-    } else
-    {
-        format = kFileFormatCompressedFile;
-    }
-
-    // Destroy the old instance
-    if (file_recorder_) {
-      file_recorder_->RegisterModuleFileCallback(NULL);
-      file_recorder_.reset();
-    }
-
-    file_recorder_ = FileRecorder::CreateFileRecorder(
-        _fileRecorderId, (const FileFormats)format);
-    if (!file_recorder_) {
-      _engineStatisticsPtr->SetLastError(
-          VE_INVALID_ARGUMENT, kTraceError,
-          "StartRecordingMicrophone() fileRecorder format isnot correct");
-      return -1;
-    }
-
-    if (file_recorder_->StartRecordingAudioFile(stream, *codecInst,
-                                                notificationTime) != 0) {
-      _engineStatisticsPtr->SetLastError(
-          VE_BAD_FILE, kTraceError,
-          "StartRecordingAudioFile() failed to start file recording");
-      file_recorder_->StopRecording();
-      file_recorder_.reset();
-      return -1;
-    }
-
-    file_recorder_->RegisterModuleFileCallback(this);
-    _fileRecording = true;
-
-    return 0;
-}
-
-
-int TransmitMixer::StopRecordingMicrophone()
-{
-    WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1),
-                 "TransmitMixer::StopRecordingMicrophone()");
-
-    rtc::CritScope cs(&_critSect);
-
-    if (!_fileRecording)
-    {
-        WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1),
-                   "StopRecordingMicrophone() isnot recording");
-        return 0;
-    }
-
-    if (file_recorder_->StopRecording() != 0) {
-      _engineStatisticsPtr->SetLastError(
-          VE_STOP_RECORDING_FAILED, kTraceError,
-          "StopRecording(), could not stop recording");
-      return -1;
-    }
-    file_recorder_->RegisterModuleFileCallback(NULL);
-    file_recorder_.reset();
-    _fileRecording = false;
-
-    return 0;
-}
-
-int TransmitMixer::StartRecordingCall(const char* fileName,
-                                      const CodecInst* codecInst)
-{
-    WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1),
-                 "TransmitMixer::StartRecordingCall(fileName=%s)", fileName);
-
-    if (_fileCallRecording)
-    {
-        WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1),
-                     "StartRecordingCall() is already recording");
-        return 0;
-    }
-
-    FileFormats format;
-    const uint32_t notificationTime(0); // Not supported in VoE
-    CodecInst dummyCodec = { 100, "L16", 16000, 320, 1, 320000 };
-
-    if (codecInst != NULL && codecInst->channels != 1)
-    {
-        _engineStatisticsPtr->SetLastError(
-            VE_BAD_ARGUMENT, kTraceError,
-            "StartRecordingCall() invalid compression");
-        return (-1);
-    }
-    if (codecInst == NULL)
-    {
-        format = kFileFormatPcm16kHzFile;
-        codecInst = &dummyCodec;
-    } else if ((STR_CASE_CMP(codecInst->plname,"L16") == 0) ||
-        (STR_CASE_CMP(codecInst->plname,"PCMU") == 0) ||
-        (STR_CASE_CMP(codecInst->plname,"PCMA") == 0))
-    {
-        format = kFileFormatWavFile;
-    } else
-    {
-        format = kFileFormatCompressedFile;
-    }
-
-    rtc::CritScope cs(&_critSect);
-
-    // Destroy the old instance
-    if (file_call_recorder_) {
-      file_call_recorder_->RegisterModuleFileCallback(NULL);
-      file_call_recorder_.reset();
-    }
-
-    file_call_recorder_ = FileRecorder::CreateFileRecorder(
-        _fileCallRecorderId, (const FileFormats)format);
-    if (!file_call_recorder_) {
-      _engineStatisticsPtr->SetLastError(
-          VE_INVALID_ARGUMENT, kTraceError,
-          "StartRecordingCall() fileRecorder format isnot correct");
-      return -1;
-    }
-
-    if (file_call_recorder_->StartRecordingAudioFile(
-            fileName, (const CodecInst&)*codecInst, notificationTime) != 0) {
-      _engineStatisticsPtr->SetLastError(
-          VE_BAD_FILE, kTraceError,
-          "StartRecordingAudioFile() failed to start file recording");
-      file_call_recorder_->StopRecording();
-      file_call_recorder_.reset();
-      return -1;
-    }
-    file_call_recorder_->RegisterModuleFileCallback(this);
-    _fileCallRecording = true;
-
-    return 0;
-}
-
-int TransmitMixer::StartRecordingCall(OutStream* stream,
-                                      const  CodecInst* codecInst)
-{
-    WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1),
-                 "TransmitMixer::StartRecordingCall()");
-
-    if (_fileCallRecording)
-    {
-        WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1),
-                     "StartRecordingCall() is already recording");
-        return 0;
-    }
-
-    FileFormats format;
-    const uint32_t notificationTime(0); // Not supported in VoE
-    CodecInst dummyCodec = { 100, "L16", 16000, 320, 1, 320000 };
-
-    if (codecInst != NULL && codecInst->channels != 1)
-    {
-        _engineStatisticsPtr->SetLastError(
-            VE_BAD_ARGUMENT, kTraceError,
-            "StartRecordingCall() invalid compression");
-        return (-1);
-    }
-    if (codecInst == NULL)
-    {
-        format = kFileFormatPcm16kHzFile;
-        codecInst = &dummyCodec;
-    } else if ((STR_CASE_CMP(codecInst->plname,"L16") == 0) ||
-        (STR_CASE_CMP(codecInst->plname,"PCMU") == 0) ||
-        (STR_CASE_CMP(codecInst->plname,"PCMA") == 0))
-    {
-        format = kFileFormatWavFile;
-    } else
-    {
-        format = kFileFormatCompressedFile;
-    }
-
-    rtc::CritScope cs(&_critSect);
-
-    // Destroy the old instance
-    if (file_call_recorder_) {
-      file_call_recorder_->RegisterModuleFileCallback(NULL);
-      file_call_recorder_.reset();
-    }
-
-    file_call_recorder_ = FileRecorder::CreateFileRecorder(
-        _fileCallRecorderId, (const FileFormats)format);
-    if (!file_call_recorder_) {
-      _engineStatisticsPtr->SetLastError(
-          VE_INVALID_ARGUMENT, kTraceError,
-          "StartRecordingCall() fileRecorder format isnot correct");
-      return -1;
-    }
-
-    if (file_call_recorder_->StartRecordingAudioFile(stream, *codecInst,
-                                                     notificationTime) != 0) {
-      _engineStatisticsPtr->SetLastError(
-          VE_BAD_FILE, kTraceError,
-          "StartRecordingAudioFile() failed to start file recording");
-      file_call_recorder_->StopRecording();
-      file_call_recorder_.reset();
-      return -1;
-    }
-
-    file_call_recorder_->RegisterModuleFileCallback(this);
-    _fileCallRecording = true;
-
-    return 0;
-}
-
-int TransmitMixer::StopRecordingCall()
-{
-    WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1),
-                 "TransmitMixer::StopRecordingCall()");
-
-    if (!_fileCallRecording)
-    {
-        WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_instanceId, -1),
-                     "StopRecordingCall() file isnot recording");
-        return -1;
-    }
-
-    rtc::CritScope cs(&_critSect);
-
-    if (file_call_recorder_->StopRecording() != 0) {
-      _engineStatisticsPtr->SetLastError(
-          VE_STOP_RECORDING_FAILED, kTraceError,
-          "StopRecording(), could not stop recording");
-      return -1;
-    }
-
-    file_call_recorder_->RegisterModuleFileCallback(NULL);
-    file_call_recorder_.reset();
-    _fileCallRecording = false;
-
-    return 0;
-}
-
-void
-TransmitMixer::SetMixWithMicStatus(bool mix)
-{
-    _mixFileWithMicrophone = mix;
-}
-
 int8_t TransmitMixer::AudioLevel() const
 {
     // Speech + file level [0,9]
@@ -867,17 +269,6 @@
   return _audioLevel.TotalDuration();
 }
 
-bool TransmitMixer::IsRecordingCall()
-{
-    return _fileCallRecording;
-}
-
-bool TransmitMixer::IsRecordingMic()
-{
-    rtc::CritScope cs(&_critSect);
-    return _fileRecording;
-}
-
 void TransmitMixer::GenerateAudioFrame(const int16_t* audio,
                                        size_t samples_per_channel,
                                        size_t num_channels,
@@ -901,79 +292,6 @@
                    &resampler_, &_audioFrame);
 }
 
-int32_t TransmitMixer::RecordAudioToFile(
-    uint32_t mixingFrequency)
-{
-    rtc::CritScope cs(&_critSect);
-    if (!file_recorder_) {
-      WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1),
-                   "TransmitMixer::RecordAudioToFile() filerecorder doesnot"
-                   "exist");
-      return -1;
-    }
-
-    if (file_recorder_->RecordAudioToFile(_audioFrame) != 0) {
-      WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1),
-                   "TransmitMixer::RecordAudioToFile() file recording"
-                   "failed");
-      return -1;
-    }
-
-    return 0;
-}
-
-int32_t TransmitMixer::MixOrReplaceAudioWithFile(
-    int mixingFrequency)
-{
-    std::unique_ptr<int16_t[]> fileBuffer(new int16_t[640]);
-
-    size_t fileSamples(0);
-    {
-        rtc::CritScope cs(&_critSect);
-        if (!file_player_) {
-          WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1),
-                       "TransmitMixer::MixOrReplaceAudioWithFile()"
-                       "fileplayer doesnot exist");
-          return -1;
-        }
-
-        if (file_player_->Get10msAudioFromFile(fileBuffer.get(), &fileSamples,
-                                               mixingFrequency) == -1) {
-          WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1),
-                       "TransmitMixer::MixOrReplaceAudioWithFile() file"
-                       " mixing failed");
-          return -1;
-        }
-    }
-
-    assert(_audioFrame.samples_per_channel_ == fileSamples);
-
-    if (_mixFileWithMicrophone)
-    {
-        // Currently file stream is always mono.
-        // TODO(xians): Change the code when FilePlayer supports real stereo.
-        MixWithSat(_audioFrame.mutable_data(),
-                   _audioFrame.num_channels_,
-                   fileBuffer.get(),
-                   1,
-                   fileSamples);
-    } else
-    {
-        // Replace ACM audio with file.
-        // Currently file stream is always mono.
-        // TODO(xians): Change the code when FilePlayer supports real stereo.
-        _audioFrame.UpdateFrame(-1,
-                                0xFFFFFFFF,
-                                fileBuffer.get(),
-                                fileSamples,
-                                mixingFrequency,
-                                AudioFrame::kNormalSpeech,
-                                AudioFrame::kVadUnknown,
-                                1);
-    }
-    return 0;
-}
-
 void TransmitMixer::ProcessAudio(int delay_ms, int clock_drift,
                                  int current_mic_level, bool key_pressed) {
   if (audioproc_->set_stream_delay_ms(delay_ms) != 0) {
diff --git a/voice_engine/transmit_mixer.h b/voice_engine/transmit_mixer.h
index e480391..a04f92b 100644
--- a/voice_engine/transmit_mixer.h
+++ b/voice_engine/transmit_mixer.h
@@ -19,8 +19,6 @@
 #include "modules/include/module_common_types.h"
 #include "rtc_base/criticalsection.h"
 #include "voice_engine/audio_level.h"
-#include "voice_engine/file_player.h"
-#include "voice_engine/file_recorder.h"
 #include "voice_engine/include/voe_base.h"
 #include "voice_engine/monitor_module.h"
 #include "voice_engine/voice_engine_defines.h"
@@ -41,7 +39,7 @@
 class MixedAudio;
 class Statistics;
 
-class TransmitMixer : public FileCallback {
+class TransmitMixer {
 public:
     static int32_t Create(TransmitMixer*& mixer, uint32_t instanceId);
 
@@ -84,45 +82,6 @@
     // 'virtual' to allow mocking.
     virtual double GetTotalInputDuration() const;
 
-    bool IsRecordingCall();
-
-    bool IsRecordingMic();
-
-    int StartPlayingFileAsMicrophone(const char* fileName,
-                                     bool loop,
-                                     FileFormats format,
-                                     int startPosition,
-                                     float volumeScaling,
-                                     int stopPosition,
-                                     const CodecInst* codecInst);
-
-    int StartPlayingFileAsMicrophone(InStream* stream,
-                                     FileFormats format,
-                                     int startPosition,
-                                     float volumeScaling,
-                                     int stopPosition,
-                                     const CodecInst* codecInst);
-
-    int StopPlayingFileAsMicrophone();
-
-    int IsPlayingFileAsMicrophone() const;
-
-    int StartRecordingMicrophone(const char* fileName,
-                                 const CodecInst* codecInst);
-
-    int StartRecordingMicrophone(OutStream* stream,
-                                 const CodecInst* codecInst);
-
-    int StopRecordingMicrophone();
-
-    int StartRecordingCall(const char* fileName, const CodecInst* codecInst);
-
-    int StartRecordingCall(OutStream* stream, const CodecInst* codecInst);
-
-    int StopRecordingCall();
-
-    void SetMixWithMicStatus(bool mix);
-
     int32_t RegisterVoiceEngineObserver(VoiceEngineObserver& observer);
 
     virtual ~TransmitMixer();
@@ -132,17 +91,6 @@
     void OnPeriodicProcess();
 #endif
 
-    // FileCallback
-    void PlayNotification(const int32_t id,
-                          const uint32_t durationMs);
-
-    void RecordNotification(const int32_t id,
-                            const uint32_t durationMs);
-
-    void PlayFileEnded(const int32_t id);
-
-    void RecordFileEnded(const int32_t id);
-
   // Virtual to allow mocking.
   virtual void EnableStereoChannelSwapping(bool enable);
   bool IsStereoChannelSwappingEnabled();
@@ -165,10 +113,6 @@
                             size_t nSamples,
                             size_t nChannels,
                             int samplesPerSec);
-    int32_t RecordAudioToFile(uint32_t mixingFrequency);
-
-    int32_t MixOrReplaceAudioWithFile(
-        int mixingFrequency);
 
     void ProcessAudio(int delay_ms, int clock_drift, int current_mic_level,
                       bool key_pressed);
@@ -187,15 +131,6 @@
     // owns
     AudioFrame _audioFrame;
     PushResampler<int16_t> resampler_;  // ADM sample rate -> mixing rate
-    std::unique_ptr<FilePlayer> file_player_;
-    std::unique_ptr<FileRecorder> file_recorder_;
-    std::unique_ptr<FileRecorder> file_call_recorder_;
-    int _filePlayerId = 0;
-    int _fileRecorderId = 0;
-    int _fileCallRecorderId = 0;
-    bool _filePlaying = false;
-    bool _fileRecording = false;
-    bool _fileCallRecording = false;
     voe::AudioLevel _audioLevel;
     // protect file instances and their variables in MixedParticipants()
     rtc::CriticalSection _critSect;
@@ -209,7 +144,6 @@
 #endif
 
     int _instanceId = 0;
-    bool _mixFileWithMicrophone = false;
     uint32_t _captureLevel = 0;
     bool stereo_codec_ = false;
     bool swap_stereo_channels_ = false;
diff --git a/voice_engine/utility.cc b/voice_engine/utility.cc
index bd9ea8b..ecc3e22 100644
--- a/voice_engine/utility.cc
+++ b/voice_engine/utility.cc
@@ -88,41 +88,5 @@
   }
 }
 
-void MixWithSat(int16_t target[],
-                size_t target_channel,
-                const int16_t source[],
-                size_t source_channel,
-                size_t source_len) {
-  RTC_DCHECK_GE(target_channel, 1);
-  RTC_DCHECK_LE(target_channel, 2);
-  RTC_DCHECK_GE(source_channel, 1);
-  RTC_DCHECK_LE(source_channel, 2);
-
-  if (target_channel == 2 && source_channel == 1) {
-    // Convert source from mono to stereo.
-    int32_t left = 0;
-    int32_t right = 0;
-    for (size_t i = 0; i < source_len; ++i) {
-      left = source[i] + target[i * 2];
-      right = source[i] + target[i * 2 + 1];
-      target[i * 2] = WebRtcSpl_SatW32ToW16(left);
-      target[i * 2 + 1] = WebRtcSpl_SatW32ToW16(right);
-    }
-  } else if (target_channel == 1 && source_channel == 2) {
-    // Convert source from stereo to mono.
-    int32_t temp = 0;
-    for (size_t i = 0; i < source_len / 2; ++i) {
-      temp = ((source[i * 2] + source[i * 2 + 1]) >> 1) + target[i];
-      target[i] = WebRtcSpl_SatW32ToW16(temp);
-    }
-  } else {
-    int32_t temp = 0;
-    for (size_t i = 0; i < source_len; ++i) {
-      temp = source[i] + target[i];
-      target[i] = WebRtcSpl_SatW32ToW16(temp);
-    }
-  }
-}
-
 }  // namespace voe
 }  // namespace webrtc
diff --git a/voice_engine/utility.h b/voice_engine/utility.h
index c0c11ee..dc23e16 100644
--- a/voice_engine/utility.h
+++ b/voice_engine/utility.h
@@ -45,12 +45,6 @@
                       PushResampler<int16_t>* resampler,
                       AudioFrame* dst_frame);
 
-void MixWithSat(int16_t target[],
-                size_t target_channel,
-                const int16_t source[],
-                size_t source_channel,
-                size_t source_len);
-
 }  // namespace voe
 }  // namespace webrtc
 
diff --git a/voice_engine/voe_base_impl.cc b/voice_engine/voe_base_impl.cc
index 8768b32..ec28e06 100644
--- a/voice_engine/voe_base_impl.cc
+++ b/voice_engine/voe_base_impl.cc
@@ -597,8 +597,7 @@
 }
 
 int32_t VoEBaseImpl::StopSend() {
-  if (shared_->NumOfSendingChannels() == 0 &&
-      !shared_->transmit_mixer()->IsRecordingMic()) {
+  if (shared_->NumOfSendingChannels() == 0) {
     // Stop audio-device recording if no channel is recording
     if (shared_->audio_device()->StopRecording() != 0) {
       shared_->SetLastError(VE_CANNOT_STOP_RECORDING, kTraceError,
diff --git a/voice_engine/voe_file_impl.cc b/voice_engine/voe_file_impl.cc
deleted file mode 100644
index 9bf8c7a..0000000
--- a/voice_engine/voe_file_impl.cc
+++ /dev/null
@@ -1,466 +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.
- */
-
-#include "voice_engine/voe_file_impl.h"
-
-#include "system_wrappers/include/file_wrapper.h"
-#include "system_wrappers/include/trace.h"
-#include "voice_engine/channel.h"
-#include "voice_engine/include/voe_errors.h"
-#include "voice_engine/output_mixer.h"
-#include "voice_engine/transmit_mixer.h"
-#include "voice_engine/voice_engine_impl.h"
-
-namespace webrtc {
-
-VoEFile* VoEFile::GetInterface(VoiceEngine* voiceEngine) {
-  if (NULL == voiceEngine) {
-    return NULL;
-  }
-  VoiceEngineImpl* s = static_cast<VoiceEngineImpl*>(voiceEngine);
-  s->AddRef();
-  return s;
-}
-
-VoEFileImpl::VoEFileImpl(voe::SharedData* shared) : _shared(shared) {
-  WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "VoEFileImpl::VoEFileImpl() - ctor");
-}
-
-VoEFileImpl::~VoEFileImpl() {
-  WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "VoEFileImpl::~VoEFileImpl() - dtor");
-}
-
-int VoEFileImpl::StartPlayingFileLocally(int channel,
-                                         const char fileNameUTF8[1024],
-                                         bool loop,
-                                         FileFormats format,
-                                         float volumeScaling,
-                                         int startPointMs,
-                                         int stopPointMs) {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "StartPlayingFileLocally(channel=%d, fileNameUTF8[]=%s, "
-               "loop=%d, format=%d, volumeScaling=%5.3f, startPointMs=%d,"
-               " stopPointMs=%d)",
-               channel, fileNameUTF8, loop, format, volumeScaling, startPointMs,
-               stopPointMs);
-  static_assert(1024 == FileWrapper::kMaxFileNameSize, "");
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-  voe::Channel* channelPtr = ch.channel();
-  if (channelPtr == NULL) {
-    _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
-                          "StartPlayingFileLocally() failed to locate channel");
-    return -1;
-  }
-
-  return channelPtr->StartPlayingFileLocally(fileNameUTF8, loop, format,
-                                             startPointMs, volumeScaling,
-                                             stopPointMs, NULL);
-}
-
-int VoEFileImpl::StartPlayingFileLocally(int channel,
-                                         InStream* stream,
-                                         FileFormats format,
-                                         float volumeScaling,
-                                         int startPointMs,
-                                         int stopPointMs) {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "StartPlayingFileLocally(channel=%d, stream, format=%d, "
-               "volumeScaling=%5.3f, startPointMs=%d, stopPointMs=%d)",
-               channel, format, volumeScaling, startPointMs, stopPointMs);
-
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-
-  voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-  voe::Channel* channelPtr = ch.channel();
-  if (channelPtr == NULL) {
-    _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
-                          "StartPlayingFileLocally() failed to locate channel");
-    return -1;
-  }
-
-  return channelPtr->StartPlayingFileLocally(stream, format, startPointMs,
-                                             volumeScaling, stopPointMs, NULL);
-}
-
-int VoEFileImpl::StopPlayingFileLocally(int channel) {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "StopPlayingFileLocally()");
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-  voe::Channel* channelPtr = ch.channel();
-  if (channelPtr == NULL) {
-    _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
-                          "StopPlayingFileLocally() failed to locate channel");
-    return -1;
-  }
-  return channelPtr->StopPlayingFileLocally();
-}
-
-int VoEFileImpl::IsPlayingFileLocally(int channel) {
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-  voe::Channel* channelPtr = ch.channel();
-  if (channelPtr == NULL) {
-    _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
-                          "StopPlayingFileLocally() failed to locate channel");
-    return -1;
-  }
-  return channelPtr->IsPlayingFileLocally();
-}
-
-int VoEFileImpl::StartPlayingFileAsMicrophone(int channel,
-                                              const char fileNameUTF8[1024],
-                                              bool loop,
-                                              bool mixWithMicrophone,
-                                              FileFormats format,
-                                              float volumeScaling) {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "StartPlayingFileAsMicrophone(channel=%d, fileNameUTF8=%s, "
-               "loop=%d, mixWithMicrophone=%d, format=%d, "
-               "volumeScaling=%5.3f)",
-               channel, fileNameUTF8, loop, mixWithMicrophone, format,
-               volumeScaling);
-  static_assert(1024 == FileWrapper::kMaxFileNameSize, "");
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-
-  const uint32_t startPointMs(0);
-  const uint32_t stopPointMs(0);
-
-  if (channel == -1) {
-    int res = _shared->transmit_mixer()->StartPlayingFileAsMicrophone(
-        fileNameUTF8, loop, format, startPointMs, volumeScaling, stopPointMs,
-        NULL);
-    if (res) {
-      WEBRTC_TRACE(
-          kTraceError, kTraceVoice, VoEId(_shared->instance_id(), -1),
-          "StartPlayingFileAsMicrophone() failed to start playing file");
-      return (-1);
-    } else {
-      _shared->transmit_mixer()->SetMixWithMicStatus(mixWithMicrophone);
-      return (0);
-    }
-  } else {
-    // Add file after demultiplexing <=> affects one channel only
-    voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-    voe::Channel* channelPtr = ch.channel();
-    if (channelPtr == NULL) {
-      _shared->SetLastError(
-          VE_CHANNEL_NOT_VALID, kTraceError,
-          "StartPlayingFileAsMicrophone() failed to locate channel");
-      return -1;
-    }
-
-    int res = channelPtr->StartPlayingFileAsMicrophone(
-        fileNameUTF8, loop, format, startPointMs, volumeScaling, stopPointMs,
-        NULL);
-    if (res) {
-      WEBRTC_TRACE(
-          kTraceError, kTraceVoice, VoEId(_shared->instance_id(), -1),
-          "StartPlayingFileAsMicrophone() failed to start playing file");
-      return -1;
-    } else {
-      channelPtr->SetMixWithMicStatus(mixWithMicrophone);
-      return 0;
-    }
-  }
-}
-
-int VoEFileImpl::StartPlayingFileAsMicrophone(int channel,
-                                              InStream* stream,
-                                              bool mixWithMicrophone,
-                                              FileFormats format,
-                                              float volumeScaling) {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "StartPlayingFileAsMicrophone(channel=%d, stream,"
-               " mixWithMicrophone=%d, format=%d, volumeScaling=%5.3f)",
-               channel, mixWithMicrophone, format, volumeScaling);
-
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-
-  const uint32_t startPointMs(0);
-  const uint32_t stopPointMs(0);
-
-  if (channel == -1) {
-    int res = _shared->transmit_mixer()->StartPlayingFileAsMicrophone(
-        stream, format, startPointMs, volumeScaling, stopPointMs, NULL);
-    if (res) {
-      WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_shared->instance_id(), -1),
-                   "StartPlayingFileAsMicrophone() failed to start "
-                   "playing stream");
-      return (-1);
-    } else {
-      _shared->transmit_mixer()->SetMixWithMicStatus(mixWithMicrophone);
-      return (0);
-    }
-  } else {
-    // Add file after demultiplexing <=> affects one channel only
-    voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-    voe::Channel* channelPtr = ch.channel();
-    if (channelPtr == NULL) {
-      _shared->SetLastError(
-          VE_CHANNEL_NOT_VALID, kTraceError,
-          "StartPlayingFileAsMicrophone() failed to locate channel");
-      return -1;
-    }
-
-    int res = channelPtr->StartPlayingFileAsMicrophone(
-        stream, format, startPointMs, volumeScaling, stopPointMs, NULL);
-    if (res) {
-      WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_shared->instance_id(), -1),
-                   "StartPlayingFileAsMicrophone() failed to start "
-                   "playing stream");
-      return -1;
-    } else {
-      channelPtr->SetMixWithMicStatus(mixWithMicrophone);
-      return 0;
-    }
-  }
-}
-
-int VoEFileImpl::StopPlayingFileAsMicrophone(int channel) {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "StopPlayingFileAsMicrophone(channel=%d)", channel);
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  if (channel == -1) {
-    // Stop adding file before demultiplexing <=> affects all channels
-    return _shared->transmit_mixer()->StopPlayingFileAsMicrophone();
-  } else {
-    // Stop adding file after demultiplexing <=> affects one channel only
-    voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-    voe::Channel* channelPtr = ch.channel();
-    if (channelPtr == NULL) {
-      _shared->SetLastError(
-          VE_CHANNEL_NOT_VALID, kTraceError,
-          "StopPlayingFileAsMicrophone() failed to locate channel");
-      return -1;
-    }
-    return channelPtr->StopPlayingFileAsMicrophone();
-  }
-}
-
-int VoEFileImpl::IsPlayingFileAsMicrophone(int channel) {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "IsPlayingFileAsMicrophone(channel=%d)", channel);
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  if (channel == -1) {
-    return _shared->transmit_mixer()->IsPlayingFileAsMicrophone();
-  } else {
-    // Stop adding file after demultiplexing <=> affects one channel only
-    voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-    voe::Channel* channelPtr = ch.channel();
-    if (channelPtr == NULL) {
-      _shared->SetLastError(
-          VE_CHANNEL_NOT_VALID, kTraceError,
-          "IsPlayingFileAsMicrophone() failed to locate channel");
-      return -1;
-    }
-    return channelPtr->IsPlayingFileAsMicrophone();
-  }
-}
-
-int VoEFileImpl::StartRecordingPlayout(int channel,
-                                       const char* fileNameUTF8,
-                                       CodecInst* compression,
-                                       int maxSizeBytes) {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "StartRecordingPlayout(channel=%d, fileNameUTF8=%s, "
-               "compression, maxSizeBytes=%d)",
-               channel, fileNameUTF8, maxSizeBytes);
-  static_assert(1024 == FileWrapper::kMaxFileNameSize, "");
-
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  if (channel == -1) {
-    return _shared->output_mixer()->StartRecordingPlayout(fileNameUTF8,
-                                                          compression);
-  } else {
-    // Add file after demultiplexing <=> affects one channel only
-    voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-    voe::Channel* channelPtr = ch.channel();
-    if (channelPtr == NULL) {
-      _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
-                            "StartRecordingPlayout() failed to locate channel");
-      return -1;
-    }
-    return channelPtr->StartRecordingPlayout(fileNameUTF8, compression);
-  }
-}
-
-int VoEFileImpl::StartRecordingPlayout(int channel,
-                                       OutStream* stream,
-                                       CodecInst* compression) {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "StartRecordingPlayout(channel=%d, stream, compression)",
-               channel);
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  if (channel == -1) {
-    return _shared->output_mixer()->StartRecordingPlayout(stream, compression);
-  } else {
-    voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-    voe::Channel* channelPtr = ch.channel();
-    if (channelPtr == NULL) {
-      _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
-                            "StartRecordingPlayout() failed to locate channel");
-      return -1;
-    }
-    return channelPtr->StartRecordingPlayout(stream, compression);
-  }
-}
-
-int VoEFileImpl::StopRecordingPlayout(int channel) {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "StopRecordingPlayout(channel=%d)", channel);
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  if (channel == -1) {
-    return _shared->output_mixer()->StopRecordingPlayout();
-  } else {
-    voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-    voe::Channel* channelPtr = ch.channel();
-    if (channelPtr == NULL) {
-      _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
-                            "StopRecordingPlayout() failed to locate channel");
-      return -1;
-    }
-    return channelPtr->StopRecordingPlayout();
-  }
-}
-
-int VoEFileImpl::StartRecordingMicrophone(const char* fileNameUTF8,
-                                          CodecInst* compression,
-                                          int maxSizeBytes) {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "StartRecordingMicrophone(fileNameUTF8=%s, compression, "
-               "maxSizeBytes=%d)",
-               fileNameUTF8, maxSizeBytes);
-  static_assert(1024 == FileWrapper::kMaxFileNameSize, "");
-
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  if (_shared->transmit_mixer()->StartRecordingMicrophone(fileNameUTF8,
-                                                          compression)) {
-    WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_shared->instance_id(), -1),
-                 "StartRecordingMicrophone() failed to start recording");
-    return -1;
-  }
-  if (!_shared->audio_device()->Recording()) {
-    if (_shared->audio_device()->InitRecording() != 0) {
-      WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_shared->instance_id(), -1),
-                   "StartRecordingMicrophone() failed to initialize recording");
-      return -1;
-    }
-    if (_shared->audio_device()->StartRecording() != 0) {
-      WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_shared->instance_id(), -1),
-                   "StartRecordingMicrophone() failed to start recording");
-      return -1;
-    }
-  }
-  return 0;
-}
-
-int VoEFileImpl::StartRecordingMicrophone(OutStream* stream,
-                                          CodecInst* compression) {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "StartRecordingMicrophone(stream, compression)");
-
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  if (_shared->transmit_mixer()->StartRecordingMicrophone(stream,
-                                                          compression) == -1) {
-    WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_shared->instance_id(), -1),
-                 "StartRecordingMicrophone() failed to start recording");
-    return -1;
-  }
-  if (!_shared->audio_device()->Recording()) {
-    if (_shared->audio_device()->InitRecording() != 0) {
-      WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_shared->instance_id(), -1),
-                   "StartRecordingMicrophone() failed to initialize recording");
-      return -1;
-    }
-    if (_shared->audio_device()->StartRecording() != 0) {
-      WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_shared->instance_id(), -1),
-                   "StartRecordingMicrophone() failed to start recording");
-      return -1;
-    }
-  }
-  return 0;
-}
-
-int VoEFileImpl::StopRecordingMicrophone() {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "StopRecordingMicrophone()");
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-
-  int err = 0;
-
-  // TODO(xians): consider removing Start/StopRecording() in
-  // Start/StopRecordingMicrophone() if no channel is recording.
-  if (_shared->NumOfSendingChannels() == 0 &&
-      _shared->audio_device()->Recording()) {
-    // Stop audio-device recording if no channel is recording
-    if (_shared->audio_device()->StopRecording() != 0) {
-      _shared->SetLastError(
-          VE_CANNOT_STOP_RECORDING, kTraceError,
-          "StopRecordingMicrophone() failed to stop recording");
-      err = -1;
-    }
-  }
-
-  if (_shared->transmit_mixer()->StopRecordingMicrophone() != 0) {
-    WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_shared->instance_id(), -1),
-                 "StopRecordingMicrophone() failed to stop recording to mixer");
-    err = -1;
-  }
-
-  return err;
-}
-
-}  // namespace webrtc
diff --git a/voice_engine/voe_file_impl.h b/voice_engine/voe_file_impl.h
deleted file mode 100644
index d3392a1..0000000
--- a/voice_engine/voe_file_impl.h
+++ /dev/null
@@ -1,95 +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.
- */
-
-#ifndef VOICE_ENGINE_VOE_FILE_IMPL_H_
-#define VOICE_ENGINE_VOE_FILE_IMPL_H_
-
-#include "voice_engine/include/voe_file.h"
-#include "voice_engine/shared_data.h"
-
-namespace webrtc {
-
-class VoEFileImpl : public VoEFile {
- public:
-  // Playout file locally
-
-  int StartPlayingFileLocally(int channel,
-                              const char fileNameUTF8[1024],
-                              bool loop = false,
-                              FileFormats format = kFileFormatPcm16kHzFile,
-                              float volumeScaling = 1.0,
-                              int startPointMs = 0,
-                              int stopPointMs = 0) override;
-
-  int StartPlayingFileLocally(int channel,
-                              InStream* stream,
-                              FileFormats format = kFileFormatPcm16kHzFile,
-                              float volumeScaling = 1.0,
-                              int startPointMs = 0,
-                              int stopPointMs = 0) override;
-
-  int StopPlayingFileLocally(int channel) override;
-
-  int IsPlayingFileLocally(int channel) override;
-
-  // Use file as microphone input
-
-  int StartPlayingFileAsMicrophone(int channel,
-                                   const char fileNameUTF8[1024],
-                                   bool loop = false,
-                                   bool mixWithMicrophone = false,
-                                   FileFormats format = kFileFormatPcm16kHzFile,
-                                   float volumeScaling = 1.0) override;
-
-  int StartPlayingFileAsMicrophone(int channel,
-                                   InStream* stream,
-                                   bool mixWithMicrophone = false,
-                                   FileFormats format = kFileFormatPcm16kHzFile,
-                                   float volumeScaling = 1.0) override;
-
-  int StopPlayingFileAsMicrophone(int channel) override;
-
-  int IsPlayingFileAsMicrophone(int channel) override;
-
-  // Record speaker signal to file
-
-  int StartRecordingPlayout(int channel,
-                            const char* fileNameUTF8,
-                            CodecInst* compression = NULL,
-                            int maxSizeBytes = -1) override;
-
-  int StartRecordingPlayout(int channel,
-                            OutStream* stream,
-                            CodecInst* compression = NULL) override;
-
-  int StopRecordingPlayout(int channel) override;
-
-  // Record microphone signal to file
-
-  int StartRecordingMicrophone(const char* fileNameUTF8,
-                               CodecInst* compression = NULL,
-                               int maxSizeBytes = -1) override;
-
-  int StartRecordingMicrophone(OutStream* stream,
-                               CodecInst* compression = NULL) override;
-
-  int StopRecordingMicrophone() override;
-
- protected:
-  VoEFileImpl(voe::SharedData* shared);
-  ~VoEFileImpl() override;
-
- private:
-  voe::SharedData* _shared;
-};
-
-}  // namespace webrtc
-
-#endif  // VOICE_ENGINE_VOE_FILE_IMPL_H_
diff --git a/voice_engine/voice_engine_impl.h b/voice_engine/voice_engine_impl.h
index fab4cdc..3a6fe27 100644
--- a/voice_engine/voice_engine_impl.h
+++ b/voice_engine/voice_engine_impl.h
@@ -17,7 +17,6 @@
 #include "typedefs.h"  // NOLINT(build/include)
 #include "voice_engine/voe_base_impl.h"
 #include "voice_engine/voe_codec_impl.h"
-#include "voice_engine/voe_file_impl.h"
 #include "voice_engine/voe_network_impl.h"
 #include "voice_engine/voe_rtp_rtcp_impl.h"
 
@@ -29,7 +28,6 @@
 class VoiceEngineImpl : public voe::SharedData,  // Must be the first base class
                         public VoiceEngine,
                         public VoECodecImpl,
-                        public VoEFileImpl,
                         public VoENetworkImpl,
                         public VoERTP_RTCPImpl,
                         public VoEBaseImpl {
@@ -37,7 +35,6 @@
   VoiceEngineImpl()
       : SharedData(),
         VoECodecImpl(this),
-        VoEFileImpl(this),
         VoENetworkImpl(this),
         VoERTP_RTCPImpl(this),
         VoEBaseImpl(this),