Move webrtc::AudioDeviceModule include to api/ folder

Bug: webrtc:15874
Change-Id: I5bdb19d5e710838b41e6ca283d406c9f1f21286b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/348060
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Commit-Queue: Florent Castelli <orphis@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#42137}
diff --git a/api/BUILD.gn b/api/BUILD.gn
index 2b484f8..152f2cb 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -80,12 +80,12 @@
       ":libjingle_peerconnection_api",
       ":scoped_refptr",
       "../api/rtc_event_log:rtc_event_log_factory",
-      "../modules/audio_device:audio_device_api",
       "../pc:peer_connection_factory",
       "../pc:webrtc_sdp",
       "../rtc_base:threading",
       "../rtc_base/system:rtc_export",
       "../stats:rtc_stats",
+      "audio:audio_device",
       "audio:audio_mixer_api",
       "audio:audio_processing",
       "audio_codecs:audio_codecs_api",
diff --git a/api/DEPS b/api/DEPS
index 0536d70..b34925e 100644
--- a/api/DEPS
+++ b/api/DEPS
@@ -75,6 +75,10 @@
     "+rtc_base/socket_address.h",
   ],
 
+  "audio_device_defines\.h": [
+    "+rtc_base/strings/string_builder.h",
+  ],
+
   "candidate\.h": [
     "+rtc_base/network_constants.h",
     "+rtc_base/socket_address.h",
diff --git a/api/audio/BUILD.gn b/api/audio/BUILD.gn
index 2fc4b19..de654c7 100644
--- a/api/audio/BUILD.gn
+++ b/api/audio/BUILD.gn
@@ -8,6 +8,22 @@
 
 import("../../webrtc.gni")
 
+rtc_source_set("audio_device") {
+  visibility = [ "*" ]
+  sources = [
+    "audio_device.h",
+    "audio_device_defines.h",
+  ]
+  deps = [
+    "..:ref_count",
+    "..:scoped_refptr",
+    "../../rtc_base:checks",
+    "../../rtc_base:stringutils",
+    "../task_queue",
+  ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+}
+
 rtc_library("audio_frame_api") {
   visibility = [ "*" ]
   sources = [
diff --git a/api/audio/audio_device.h b/api/audio/audio_device.h
new file mode 100644
index 0000000..65e5c5f
--- /dev/null
+++ b/api/audio/audio_device.h
@@ -0,0 +1,194 @@
+/*
+ *  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 API_AUDIO_AUDIO_DEVICE_H_
+#define API_AUDIO_AUDIO_DEVICE_H_
+
+#include "absl/types/optional.h"
+#include "api/audio/audio_device_defines.h"
+#include "api/ref_count.h"
+#include "api/scoped_refptr.h"
+#include "api/task_queue/task_queue_factory.h"
+
+namespace webrtc {
+
+class AudioDeviceModuleForTest;
+
+class AudioDeviceModule : public webrtc::RefCountInterface {
+ public:
+  enum AudioLayer {
+    kPlatformDefaultAudio = 0,
+    kWindowsCoreAudio,
+    kWindowsCoreAudio2,
+    kLinuxAlsaAudio,
+    kLinuxPulseAudio,
+    kAndroidJavaAudio,
+    kAndroidOpenSLESAudio,
+    kAndroidJavaInputAndOpenSLESOutputAudio,
+    kAndroidAAudioAudio,
+    kAndroidJavaInputAndAAudioOutputAudio,
+    kDummyAudio,
+  };
+
+  enum WindowsDeviceType {
+    kDefaultCommunicationDevice = -1,
+    kDefaultDevice = -2
+  };
+
+  struct Stats {
+    // The fields below correspond to similarly-named fields in the WebRTC stats
+    // spec. https://w3c.github.io/webrtc-stats/#playoutstats-dict*
+    double synthesized_samples_duration_s = 0;
+    uint64_t synthesized_samples_events = 0;
+    double total_samples_duration_s = 0;
+    double total_playout_delay_s = 0;
+    uint64_t total_samples_count = 0;
+  };
+
+ public:
+  // Creates a default ADM for usage in production code.
+  static rtc::scoped_refptr<AudioDeviceModule> Create(
+      AudioLayer audio_layer,
+      TaskQueueFactory* task_queue_factory);
+  // Creates an ADM with support for extra test methods. Don't use this factory
+  // in production code.
+  static rtc::scoped_refptr<AudioDeviceModuleForTest> CreateForTest(
+      AudioLayer audio_layer,
+      TaskQueueFactory* task_queue_factory);
+
+  // Retrieve the currently utilized audio layer
+  virtual int32_t ActiveAudioLayer(AudioLayer* audioLayer) const = 0;
+
+  // Full-duplex transportation of PCM audio
+  virtual int32_t RegisterAudioCallback(AudioTransport* audioCallback) = 0;
+
+  // Main initialization and termination
+  virtual int32_t Init() = 0;
+  virtual int32_t Terminate() = 0;
+  virtual bool Initialized() const = 0;
+
+  // Device enumeration
+  virtual int16_t PlayoutDevices() = 0;
+  virtual int16_t RecordingDevices() = 0;
+  virtual int32_t PlayoutDeviceName(uint16_t index,
+                                    char name[kAdmMaxDeviceNameSize],
+                                    char guid[kAdmMaxGuidSize]) = 0;
+  virtual int32_t RecordingDeviceName(uint16_t index,
+                                      char name[kAdmMaxDeviceNameSize],
+                                      char guid[kAdmMaxGuidSize]) = 0;
+
+  // Device selection
+  virtual int32_t SetPlayoutDevice(uint16_t index) = 0;
+  virtual int32_t SetPlayoutDevice(WindowsDeviceType device) = 0;
+  virtual int32_t SetRecordingDevice(uint16_t index) = 0;
+  virtual int32_t SetRecordingDevice(WindowsDeviceType device) = 0;
+
+  // Audio transport initialization
+  virtual int32_t PlayoutIsAvailable(bool* available) = 0;
+  virtual int32_t InitPlayout() = 0;
+  virtual bool PlayoutIsInitialized() const = 0;
+  virtual int32_t RecordingIsAvailable(bool* available) = 0;
+  virtual int32_t InitRecording() = 0;
+  virtual bool RecordingIsInitialized() const = 0;
+
+  // Audio transport control
+  virtual int32_t StartPlayout() = 0;
+  virtual int32_t StopPlayout() = 0;
+  virtual bool Playing() const = 0;
+  virtual int32_t StartRecording() = 0;
+  virtual int32_t StopRecording() = 0;
+  virtual bool Recording() const = 0;
+
+  // Audio mixer initialization
+  virtual int32_t InitSpeaker() = 0;
+  virtual bool SpeakerIsInitialized() const = 0;
+  virtual int32_t InitMicrophone() = 0;
+  virtual bool MicrophoneIsInitialized() const = 0;
+
+  // Speaker volume controls
+  virtual int32_t SpeakerVolumeIsAvailable(bool* available) = 0;
+  virtual int32_t SetSpeakerVolume(uint32_t volume) = 0;
+  virtual int32_t SpeakerVolume(uint32_t* volume) const = 0;
+  virtual int32_t MaxSpeakerVolume(uint32_t* maxVolume) const = 0;
+  virtual int32_t MinSpeakerVolume(uint32_t* minVolume) const = 0;
+
+  // Microphone volume controls
+  virtual int32_t MicrophoneVolumeIsAvailable(bool* available) = 0;
+  virtual int32_t SetMicrophoneVolume(uint32_t volume) = 0;
+  virtual int32_t MicrophoneVolume(uint32_t* volume) const = 0;
+  virtual int32_t MaxMicrophoneVolume(uint32_t* maxVolume) const = 0;
+  virtual int32_t MinMicrophoneVolume(uint32_t* minVolume) const = 0;
+
+  // Speaker mute control
+  virtual int32_t SpeakerMuteIsAvailable(bool* available) = 0;
+  virtual int32_t SetSpeakerMute(bool enable) = 0;
+  virtual int32_t SpeakerMute(bool* enabled) const = 0;
+
+  // Microphone mute control
+  virtual int32_t MicrophoneMuteIsAvailable(bool* available) = 0;
+  virtual int32_t SetMicrophoneMute(bool enable) = 0;
+  virtual int32_t MicrophoneMute(bool* enabled) const = 0;
+
+  // Stereo support
+  virtual int32_t StereoPlayoutIsAvailable(bool* available) const = 0;
+  virtual int32_t SetStereoPlayout(bool enable) = 0;
+  virtual int32_t StereoPlayout(bool* enabled) const = 0;
+  virtual int32_t StereoRecordingIsAvailable(bool* available) const = 0;
+  virtual int32_t SetStereoRecording(bool enable) = 0;
+  virtual int32_t StereoRecording(bool* enabled) const = 0;
+
+  // Playout delay
+  virtual int32_t PlayoutDelay(uint16_t* delayMS) const = 0;
+
+  // Only supported on Android.
+  virtual bool BuiltInAECIsAvailable() const = 0;
+  virtual bool BuiltInAGCIsAvailable() const = 0;
+  virtual bool BuiltInNSIsAvailable() const = 0;
+
+  // Enables the built-in audio effects. Only supported on Android.
+  virtual int32_t EnableBuiltInAEC(bool enable) = 0;
+  virtual int32_t EnableBuiltInAGC(bool enable) = 0;
+  virtual int32_t EnableBuiltInNS(bool enable) = 0;
+
+  // Play underrun count. Only supported on Android.
+  // TODO(alexnarest): Make it abstract after upstream projects support it.
+  virtual int32_t GetPlayoutUnderrunCount() const { return -1; }
+
+  // Used to generate RTC stats. If not implemented, RTCAudioPlayoutStats will
+  // not be present in the stats.
+  virtual absl::optional<Stats> GetStats() const { return absl::nullopt; }
+
+// Only supported on iOS.
+#if defined(WEBRTC_IOS)
+  virtual int GetPlayoutAudioParameters(AudioParameters* params) const = 0;
+  virtual int GetRecordAudioParameters(AudioParameters* params) const = 0;
+#endif  // WEBRTC_IOS
+
+ protected:
+  ~AudioDeviceModule() override {}
+};
+
+// Extends the default ADM interface with some extra test methods.
+// Intended for usage in tests only and requires a unique factory method.
+class AudioDeviceModuleForTest : public AudioDeviceModule {
+ public:
+  // Triggers internal restart sequences of audio streaming. Can be used by
+  // tests to emulate events corresponding to e.g. removal of an active audio
+  // device or other actions which causes the stream to be disconnected.
+  virtual int RestartPlayoutInternally() = 0;
+  virtual int RestartRecordingInternally() = 0;
+
+  virtual int SetPlayoutSampleRate(uint32_t sample_rate) = 0;
+  virtual int SetRecordingSampleRate(uint32_t sample_rate) = 0;
+};
+
+}  // namespace webrtc
+
+#endif  // API_AUDIO_AUDIO_DEVICE_H_
diff --git a/api/audio/audio_device_defines.h b/api/audio/audio_device_defines.h
new file mode 100644
index 0000000..304b876
--- /dev/null
+++ b/api/audio/audio_device_defines.h
@@ -0,0 +1,178 @@
+/*
+ *  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 API_AUDIO_AUDIO_DEVICE_DEFINES_H_
+#define API_AUDIO_AUDIO_DEVICE_DEFINES_H_
+
+#include <stddef.h>
+
+#include <cstdint>
+#include <string>
+
+#include "absl/types/optional.h"
+#include "rtc_base/strings/string_builder.h"
+
+namespace webrtc {
+
+static const int kAdmMaxDeviceNameSize = 128;
+static const int kAdmMaxFileNameSize = 512;
+static const int kAdmMaxGuidSize = 128;
+
+static const int kAdmMinPlayoutBufferSizeMs = 10;
+static const int kAdmMaxPlayoutBufferSizeMs = 250;
+
+// ----------------------------------------------------------------------------
+//  AudioTransport
+// ----------------------------------------------------------------------------
+
+class AudioTransport {
+ public:
+  // TODO(bugs.webrtc.org/13620) Deprecate this function
+  virtual int32_t RecordedDataIsAvailable(const void* audioSamples,
+                                          size_t nSamples,
+                                          size_t nBytesPerSample,
+                                          size_t nChannels,
+                                          uint32_t samplesPerSec,
+                                          uint32_t totalDelayMS,
+                                          int32_t clockDrift,
+                                          uint32_t currentMicLevel,
+                                          bool keyPressed,
+                                          uint32_t& newMicLevel) = 0;  // NOLINT
+
+  virtual int32_t RecordedDataIsAvailable(
+      const void* audioSamples,
+      size_t nSamples,
+      size_t nBytesPerSample,
+      size_t nChannels,
+      uint32_t samplesPerSec,
+      uint32_t totalDelayMS,
+      int32_t clockDrift,
+      uint32_t currentMicLevel,
+      bool keyPressed,
+      uint32_t& newMicLevel,
+      absl::optional<int64_t> estimatedCaptureTimeNS) {  // NOLINT
+    // TODO(webrtc:13620) Make the default behaver of the new API to behave as
+    // the old API. This can be pure virtual if all uses of the old API is
+    // removed.
+    return RecordedDataIsAvailable(
+        audioSamples, nSamples, nBytesPerSample, nChannels, samplesPerSec,
+        totalDelayMS, clockDrift, currentMicLevel, keyPressed, newMicLevel);
+  }
+
+  // Implementation has to setup safe values for all specified out parameters.
+  virtual int32_t NeedMorePlayData(size_t nSamples,
+                                   size_t nBytesPerSample,
+                                   size_t nChannels,
+                                   uint32_t samplesPerSec,
+                                   void* audioSamples,
+                                   size_t& nSamplesOut,  // NOLINT
+                                   int64_t* elapsed_time_ms,
+                                   int64_t* ntp_time_ms) = 0;  // NOLINT
+
+  // Method to pull mixed render audio data from all active VoE channels.
+  // The data will not be passed as reference for audio processing internally.
+  virtual void PullRenderData(int bits_per_sample,
+                              int sample_rate,
+                              size_t number_of_channels,
+                              size_t number_of_frames,
+                              void* audio_data,
+                              int64_t* elapsed_time_ms,
+                              int64_t* ntp_time_ms) = 0;
+
+ protected:
+  virtual ~AudioTransport() {}
+};
+
+// Helper class for storage of fundamental audio parameters such as sample rate,
+// number of channels, native buffer size etc.
+// Note that one audio frame can contain more than one channel sample and each
+// sample is assumed to be a 16-bit PCM sample. Hence, one audio frame in
+// stereo contains 2 * (16/8) = 4 bytes of data.
+class AudioParameters {
+ public:
+  // This implementation does only support 16-bit PCM samples.
+  static const size_t kBitsPerSample = 16;
+  AudioParameters()
+      : sample_rate_(0),
+        channels_(0),
+        frames_per_buffer_(0),
+        frames_per_10ms_buffer_(0) {}
+  AudioParameters(int sample_rate, size_t channels, size_t frames_per_buffer)
+      : sample_rate_(sample_rate),
+        channels_(channels),
+        frames_per_buffer_(frames_per_buffer),
+        frames_per_10ms_buffer_(static_cast<size_t>(sample_rate / 100)) {}
+  void reset(int sample_rate, size_t channels, size_t frames_per_buffer) {
+    sample_rate_ = sample_rate;
+    channels_ = channels;
+    frames_per_buffer_ = frames_per_buffer;
+    frames_per_10ms_buffer_ = static_cast<size_t>(sample_rate / 100);
+  }
+  size_t bits_per_sample() const { return kBitsPerSample; }
+  void reset(int sample_rate, size_t channels, double buffer_duration) {
+    reset(sample_rate, channels,
+          static_cast<size_t>(sample_rate * buffer_duration + 0.5));
+  }
+  void reset(int sample_rate, size_t channels) {
+    reset(sample_rate, channels, static_cast<size_t>(0));
+  }
+  int sample_rate() const { return sample_rate_; }
+  size_t channels() const { return channels_; }
+  size_t frames_per_buffer() const { return frames_per_buffer_; }
+  size_t frames_per_10ms_buffer() const { return frames_per_10ms_buffer_; }
+  size_t GetBytesPerFrame() const { return channels_ * kBitsPerSample / 8; }
+  size_t GetBytesPerBuffer() const {
+    return frames_per_buffer_ * GetBytesPerFrame();
+  }
+  // The WebRTC audio device buffer (ADB) only requires that the sample rate
+  // and number of channels are configured. Hence, to be "valid", only these
+  // two attributes must be set.
+  bool is_valid() const { return ((sample_rate_ > 0) && (channels_ > 0)); }
+  // Most platforms also require that a native buffer size is defined.
+  // An audio parameter instance is considered to be "complete" if it is both
+  // "valid" (can be used by the ADB) and also has a native frame size.
+  bool is_complete() const { return (is_valid() && (frames_per_buffer_ > 0)); }
+  size_t GetBytesPer10msBuffer() const {
+    return frames_per_10ms_buffer_ * GetBytesPerFrame();
+  }
+  double GetBufferSizeInMilliseconds() const {
+    if (sample_rate_ == 0)
+      return 0.0;
+    return frames_per_buffer_ / (sample_rate_ / 1000.0);
+  }
+  double GetBufferSizeInSeconds() const {
+    if (sample_rate_ == 0)
+      return 0.0;
+    return static_cast<double>(frames_per_buffer_) / (sample_rate_);
+  }
+  std::string ToString() const {
+    char ss_buf[1024];
+    rtc::SimpleStringBuilder ss(ss_buf);
+    ss << "AudioParameters: ";
+    ss << "sample_rate=" << sample_rate() << ", channels=" << channels();
+    ss << ", frames_per_buffer=" << frames_per_buffer();
+    ss << ", frames_per_10ms_buffer=" << frames_per_10ms_buffer();
+    ss << ", bytes_per_frame=" << GetBytesPerFrame();
+    ss << ", bytes_per_buffer=" << GetBytesPerBuffer();
+    ss << ", bytes_per_10ms_buffer=" << GetBytesPer10msBuffer();
+    ss << ", size_in_ms=" << GetBufferSizeInMilliseconds();
+    return ss.str();
+  }
+
+ private:
+  int sample_rate_;
+  size_t channels_;
+  size_t frames_per_buffer_;
+  size_t frames_per_10ms_buffer_;
+};
+
+}  // namespace webrtc
+
+#endif  // API_AUDIO_AUDIO_DEVICE_DEFINES_H_
diff --git a/api/create_peerconnection_factory.cc b/api/create_peerconnection_factory.cc
index 42bfa60..46105a2 100644
--- a/api/create_peerconnection_factory.cc
+++ b/api/create_peerconnection_factory.cc
@@ -13,6 +13,7 @@
 #include <memory>
 #include <utility>
 
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_processing.h"
 #include "api/enable_media.h"
 #include "api/peer_connection_interface.h"
@@ -20,7 +21,6 @@
 #include "api/scoped_refptr.h"
 #include "api/task_queue/default_task_queue_factory.h"
 #include "api/transport/field_trial_based_config.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "rtc_base/thread.h"
 
 namespace webrtc {
diff --git a/api/create_peerconnection_factory.h b/api/create_peerconnection_factory.h
index adb4de9..18febb6 100644
--- a/api/create_peerconnection_factory.h
+++ b/api/create_peerconnection_factory.h
@@ -13,6 +13,7 @@
 
 #include <memory>
 
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/audio_decoder_factory.h"
@@ -33,7 +34,6 @@
 
 namespace webrtc {
 
-class AudioDeviceModule;
 class AudioFrameProcessor;
 
 // Create a new instance of PeerConnectionFactoryInterface with optional video
diff --git a/api/voip/BUILD.gn b/api/voip/BUILD.gn
index f175c30..7cf9a7a 100644
--- a/api/voip/BUILD.gn
+++ b/api/voip/BUILD.gn
@@ -40,8 +40,8 @@
     ":voip_api",
     "..:scoped_refptr",
     "../../audio/voip:voip_core",
-    "../../modules/audio_device:audio_device_api",
     "../../rtc_base:logging",
+    "../audio:audio_device",
     "../audio:audio_processing",
     "../audio_codecs:audio_codecs_api",
     "../task_queue",
diff --git a/api/voip/voip_engine_factory.h b/api/voip/voip_engine_factory.h
index 3abced7..1972fcd 100644
--- a/api/voip/voip_engine_factory.h
+++ b/api/voip/voip_engine_factory.h
@@ -13,13 +13,13 @@
 
 #include <memory>
 
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/audio_decoder_factory.h"
 #include "api/audio_codecs/audio_encoder_factory.h"
 #include "api/scoped_refptr.h"
 #include "api/task_queue/task_queue_factory.h"
 #include "api/voip/voip_engine.h"
-#include "modules/audio_device/include/audio_device.h"
 
 namespace webrtc {
 
diff --git a/audio/BUILD.gn b/audio/BUILD.gn
index 07a0006..ef5ec3d 100644
--- a/audio/BUILD.gn
+++ b/audio/BUILD.gn
@@ -49,6 +49,7 @@
     "../api:sequence_checker",
     "../api:transport_api",
     "../api/audio:aec3_factory",
+    "../api/audio:audio_device",
     "../api/audio:audio_frame_api",
     "../api/audio:audio_frame_processor",
     "../api/audio:audio_mixer_api",
@@ -130,10 +131,10 @@
     deps = [
       ":audio",
       "../api:simulated_network_api",
+      "../api/audio:audio_device",
       "../api/task_queue",
       "../call:fake_network",
       "../call:simulated_network",
-      "../modules/audio_device:audio_device_api",
       "../modules/audio_device:test_audio_device_module",
       "../system_wrappers",
       "../test:test_common",
@@ -191,7 +192,6 @@
       "../call:rtp_sender",
       "../common_audio",
       "../logging:mocks",
-      "../modules/audio_device:audio_device_api",
       "../modules/audio_device:audio_device_impl",  # For TestAudioDeviceModule
       "../modules/audio_device:mock_audio_device",
       "../modules/audio_mixer:audio_mixer_impl",
@@ -235,11 +235,11 @@
     deps = [
       ":audio",
       "../api:mock_frame_transformer",
+      "../api/audio:audio_device",
       "../api/audio_codecs:builtin_audio_decoder_factory",
       "../api/crypto:frame_decryptor_interface",
       "../api/task_queue:default_task_queue_factory",
       "../logging:mocks",
-      "../modules/audio_device:audio_device_api",
       "../modules/audio_device:mock_audio_device",
       "../modules/rtp_rtcp",
       "../modules/rtp_rtcp:rtp_rtcp_format",
diff --git a/audio/audio_state.cc b/audio/audio_state.cc
index 6f20e7b..a0861ee 100644
--- a/audio/audio_state.cc
+++ b/audio/audio_state.cc
@@ -15,12 +15,12 @@
 #include <utility>
 #include <vector>
 
+#include "api/audio/audio_device.h"
 #include "api/sequence_checker.h"
 #include "api/task_queue/task_queue_base.h"
 #include "api/units/time_delta.h"
 #include "audio/audio_receive_stream.h"
 #include "audio/audio_send_stream.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
 
diff --git a/audio/audio_transport_impl.h b/audio/audio_transport_impl.h
index d7a4b7d..3012cc2 100644
--- a/audio/audio_transport_impl.h
+++ b/audio/audio_transport_impl.h
@@ -14,12 +14,12 @@
 #include <memory>
 #include <vector>
 
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio/audio_processing.h"
 #include "api/scoped_refptr.h"
 #include "common_audio/resampler/include/push_resampler.h"
 #include "modules/async_audio_processing/async_audio_processing.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "rtc_base/synchronization/mutex.h"
 #include "rtc_base/thread_annotations.h"
 
diff --git a/audio/channel_receive.cc b/audio/channel_receive.cc
index 17cf859..dc34d18 100644
--- a/audio/channel_receive.cc
+++ b/audio/channel_receive.cc
@@ -17,6 +17,7 @@
 #include <utility>
 #include <vector>
 
+#include "api/audio/audio_device.h"
 #include "api/crypto/frame_decryptor_interface.h"
 #include "api/frame_transformer_interface.h"
 #include "api/rtc_event_log/rtc_event_log.h"
@@ -32,7 +33,6 @@
 #include "logging/rtc_event_log/events/rtc_event_neteq_set_minimum_delay.h"
 #include "modules/audio_coding/acm2/acm_receiver.h"
 #include "modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor_config.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "modules/pacing/packet_router.h"
 #include "modules/rtp_rtcp/include/receive_statistics.h"
 #include "modules/rtp_rtcp/include/remote_ntp_time_estimator.h"
diff --git a/audio/channel_receive_unittest.cc b/audio/channel_receive_unittest.cc
index 8ca1e9e..47ec37c 100644
--- a/audio/channel_receive_unittest.cc
+++ b/audio/channel_receive_unittest.cc
@@ -11,12 +11,12 @@
 #include "audio/channel_receive.h"
 
 #include "absl/strings/escaping.h"
+#include "api/audio/audio_device.h"
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
 #include "api/crypto/frame_decryptor_interface.h"
 #include "api/task_queue/default_task_queue_factory.h"
 #include "api/test/mock_frame_transformer.h"
 #include "logging/rtc_event_log/mock/mock_rtc_event_log.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "modules/audio_device/include/mock_audio_device.h"
 #include "modules/rtp_rtcp/source/byte_io.h"
 #include "modules/rtp_rtcp/source/rtcp_packet/receiver_report.h"
diff --git a/audio/test/audio_end_to_end_test.h b/audio/test/audio_end_to_end_test.h
index d326b79..a5a6397 100644
--- a/audio/test/audio_end_to_end_test.h
+++ b/audio/test/audio_end_to_end_test.h
@@ -14,9 +14,9 @@
 #include <string>
 #include <vector>
 
+#include "api/audio/audio_device.h"
 #include "api/task_queue/task_queue_base.h"
 #include "api/test/simulated_network.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "modules/audio_device/include/test_audio_device.h"
 #include "test/call_test.h"
 
diff --git a/audio/voip/BUILD.gn b/audio/voip/BUILD.gn
index 2b07179..a9a9a67 100644
--- a/audio/voip/BUILD.gn
+++ b/audio/voip/BUILD.gn
@@ -17,11 +17,11 @@
     ":audio_channel",
     "..:audio",
     "../../api:scoped_refptr",
+    "../../api/audio:audio_device",
     "../../api/audio:audio_processing",
     "../../api/audio_codecs:audio_codecs_api",
     "../../api/task_queue",
     "../../api/voip:voip_api",
-    "../../modules/audio_device:audio_device_api",
     "../../modules/audio_mixer:audio_mixer_impl",
     "../../rtc_base:criticalsection",
     "../../rtc_base:logging",
@@ -42,7 +42,6 @@
     "../../api/audio_codecs:audio_codecs_api",
     "../../api/task_queue",
     "../../api/voip:voip_api",
-    "../../modules/audio_device:audio_device_api",
     "../../modules/rtp_rtcp",
     "../../modules/rtp_rtcp:rtp_rtcp_format",
     "../../rtc_base:criticalsection",
diff --git a/audio/voip/voip_core.h b/audio/voip/voip_core.h
index 2c7c7ee..4a6031d 100644
--- a/audio/voip/voip_core.h
+++ b/audio/voip/voip_core.h
@@ -17,6 +17,7 @@
 #include <unordered_map>
 #include <vector>
 
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/audio_decoder_factory.h"
 #include "api/audio_codecs/audio_encoder_factory.h"
@@ -31,7 +32,6 @@
 #include "api/voip/voip_volume_control.h"
 #include "audio/audio_transport_impl.h"
 #include "audio/voip/audio_channel.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "modules/audio_mixer/audio_mixer_impl.h"
 #include "rtc_base/synchronization/mutex.h"
 
diff --git a/call/BUILD.gn b/call/BUILD.gn
index 43e32a3..00fa602 100644
--- a/call/BUILD.gn
+++ b/call/BUILD.gn
@@ -50,6 +50,7 @@
     "../api:scoped_refptr",
     "../api:transport_api",
     "../api/adaptation:resource_adaptation_api",
+    "../api/audio:audio_device",
     "../api/audio:audio_frame_processor",
     "../api/audio:audio_mixer_api",
     "../api/audio:audio_processing",
@@ -560,6 +561,7 @@
         ":video_stream_api",
         "../api:rtc_event_log_output_file",
         "../api:simulated_network_api",
+        "../api/audio:audio_device",
         "../api/audio_codecs:builtin_audio_encoder_factory",
         "../api/numerics",
         "../api/rtc_event_log",
diff --git a/call/audio_state.h b/call/audio_state.h
index 8f6bc7d..bd43868 100644
--- a/call/audio_state.h
+++ b/call/audio_state.h
@@ -10,11 +10,11 @@
 #ifndef CALL_AUDIO_STATE_H_
 #define CALL_AUDIO_STATE_H_
 
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio/audio_processing.h"
 #include "api/scoped_refptr.h"
 #include "modules/async_audio_processing/async_audio_processing.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "rtc_base/ref_count.h"
 
 namespace webrtc {
diff --git a/call/call_perf_tests.cc b/call/call_perf_tests.cc
index 0df31c4..dfdfec8 100644
--- a/call/call_perf_tests.cc
+++ b/call/call_perf_tests.cc
@@ -15,6 +15,7 @@
 
 #include "absl/flags/flag.h"
 #include "absl/strings/string_view.h"
+#include "api/audio/audio_device.h"
 #include "api/audio_codecs/builtin_audio_encoder_factory.h"
 #include "api/numerics/samples_stats_counter.h"
 #include "api/rtc_event_log/rtc_event_log.h"
@@ -32,7 +33,6 @@
 #include "media/engine/internal_encoder_factory.h"
 #include "media/engine/simulcast_encoder_adapter.h"
 #include "modules/audio_coding/include/audio_coding_module.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "modules/audio_device/include/test_audio_device.h"
 #include "modules/audio_mixer/audio_mixer_impl.h"
 #include "modules/rtp_rtcp/source/rtp_packet.h"
diff --git a/examples/BUILD.gn b/examples/BUILD.gn
index c66f282..3d7d19c 100644
--- a/examples/BUILD.gn
+++ b/examples/BUILD.gn
@@ -689,6 +689,7 @@
       "../api:media_stream_interface",
       "../api:rtp_sender_interface",
       "../api:scoped_refptr",
+      "../api/audio:audio_device",
       "../api/audio:audio_mixer_api",
       "../api/audio:audio_processing",
       "../api/audio_codecs:audio_codecs_api",
diff --git a/examples/peerconnection/client/conductor.cc b/examples/peerconnection/client/conductor.cc
index 1dd9dcd..23e5781 100644
--- a/examples/peerconnection/client/conductor.cc
+++ b/examples/peerconnection/client/conductor.cc
@@ -19,6 +19,7 @@
 
 #include "absl/memory/memory.h"
 #include "absl/types/optional.h"
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/audio_decoder_factory.h"
@@ -41,7 +42,6 @@
 #include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h"
 #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h"
 #include "examples/peerconnection/client/defaults.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "modules/video_capture/video_capture.h"
 #include "modules/video_capture/video_capture_factory.h"
 #include "p2p/base/port_allocator.h"
diff --git a/media/BUILD.gn b/media/BUILD.gn
index 6a13f78..5a0a5ef 100644
--- a/media/BUILD.gn
+++ b/media/BUILD.gn
@@ -577,6 +577,7 @@
     "../api:scoped_refptr",
     "../api:sequence_checker",
     "../api:transport_api",
+    "../api/audio:audio_device",
     "../api/audio:audio_frame_api",
     "../api/audio:audio_frame_processor",
     "../api/audio:audio_mixer_api",
diff --git a/media/base/media_engine.h b/media/base/media_engine.h
index 8d5b01c..63cc86f 100644
--- a/media/base/media_engine.h
+++ b/media/base/media_engine.h
@@ -30,7 +30,6 @@
 #include "rtc_base/system/file_wrapper.h"
 
 namespace webrtc {
-class AudioDeviceModule;
 class AudioMixer;
 class Call;
 }  // namespace webrtc
diff --git a/media/engine/adm_helpers.cc b/media/engine/adm_helpers.cc
index c349b7c..12dfbc9 100644
--- a/media/engine/adm_helpers.cc
+++ b/media/engine/adm_helpers.cc
@@ -10,7 +10,7 @@
 
 #include "media/engine/adm_helpers.h"
 
-#include "modules/audio_device/include/audio_device.h"
+#include "api/audio/audio_device.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
 
diff --git a/media/engine/webrtc_voice_engine.h b/media/engine/webrtc_voice_engine.h
index d668287..502a062 100644
--- a/media/engine/webrtc_voice_engine.h
+++ b/media/engine/webrtc_voice_engine.h
@@ -24,6 +24,7 @@
 #include "absl/functional/any_invocable.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/optional.h"
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_frame_processor.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio/audio_processing.h"
@@ -59,7 +60,6 @@
 #include "media/base/rtp_utils.h"
 #include "media/base/stream_params.h"
 #include "modules/async_audio_processing/async_audio_processing.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
 #include "modules/rtp_rtcp/source/rtp_packet_received.h"
 #include "rtc_base/buffer.h"
diff --git a/modules/audio_device/BUILD.gn b/modules/audio_device/BUILD.gn
index 359867e..d15071c 100644
--- a/modules/audio_device/BUILD.gn
+++ b/modules/audio_device/BUILD.gn
@@ -26,7 +26,7 @@
 rtc_source_set("audio_device_default") {
   visibility = [ "*" ]
   sources = [ "include/audio_device_default.h" ]
-  deps = [ ":audio_device_api" ]
+  deps = [ "../../api/audio:audio_device" ]
 }
 
 rtc_source_set("audio_device") {
@@ -47,15 +47,7 @@
     "include/audio_device.h",
     "include/audio_device_defines.h",
   ]
-  deps = [
-    "../../api:ref_count",
-    "../../api:scoped_refptr",
-    "../../api/task_queue",
-    "../../rtc_base:checks",
-    "../../rtc_base:refcount",
-    "../../rtc_base:stringutils",
-  ]
-  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+  deps = [ "../../api/audio:audio_device" ]
 }
 
 rtc_library("audio_device_config") {
@@ -70,9 +62,9 @@
     "fine_audio_buffer.h",
   ]
   deps = [
-    ":audio_device_api",
     "../../api:array_view",
     "../../api:sequence_checker",
+    "../../api/audio:audio_device",
     "../../api/task_queue",
     "../../common_audio:common_audio_c",
     "../../rtc_base:buffer",
@@ -96,8 +88,8 @@
     "audio_device_generic.h",
   ]
   deps = [
-    ":audio_device_api",
     ":audio_device_buffer",
+    "../../api/audio:audio_device",
     "../../rtc_base:logging",
   ]
 }
@@ -118,8 +110,8 @@
     ]
 
     deps = [
-      ":audio_device_api",
       ":audio_device_name",
+      "../../api/audio:audio_device",
       "../../api/units:time_delta",
       "../../rtc_base:checks",
       "../../rtc_base:logging",
@@ -157,12 +149,12 @@
     ]
 
     deps = [
-      ":audio_device_api",
       ":audio_device_buffer",
       ":windows_core_audio_utility",
       "../../api:make_ref_counted",
       "../../api:scoped_refptr",
       "../../api:sequence_checker",
+      "../../api/audio:audio_device",
       "../../api/task_queue",
       "../../rtc_base:checks",
       "../../rtc_base:logging",
@@ -191,7 +183,6 @@
       "test_audio_device_impl.h",
     ]
     deps = [
-      ":audio_device_api",
       ":audio_device_buffer",
       ":audio_device_default",
       ":audio_device_generic",
@@ -199,6 +190,7 @@
       "../../api:array_view",
       "../../api:make_ref_counted",
       "../../api:scoped_refptr",
+      "../../api/audio:audio_device",
       "../../api/task_queue",
       "../../api/units:time_delta",
       "../../common_audio",
@@ -228,9 +220,9 @@
     "dummy/audio_device_dummy.h",
   ]
   deps = [
-    ":audio_device_api",
     ":audio_device_buffer",
     ":audio_device_generic",
+    "../../api/audio:audio_device",
   ]
 }
 
@@ -267,7 +259,6 @@
 rtc_library("audio_device_impl") {
   visibility = [ "*" ]
   deps = [
-    ":audio_device_api",
     ":audio_device_buffer",
     ":audio_device_config",
     ":audio_device_default",
@@ -278,6 +269,7 @@
     "../../api:refcountedbase",
     "../../api:scoped_refptr",
     "../../api:sequence_checker",
+    "../../api/audio:audio_device",
     "../../api/task_queue",
     "../../api/units:time_delta",
     "../../common_audio",
@@ -450,6 +442,7 @@
     ":audio_device_buffer",
     ":audio_device_impl",
     "../../api:make_ref_counted",
+    "../../api/audio:audio_device",
     "../../test:test_support",
   ]
   absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
@@ -474,6 +467,7 @@
       "../../api:array_view",
       "../../api:scoped_refptr",
       "../../api:sequence_checker",
+      "../../api/audio:audio_device",
       "../../api/task_queue",
       "../../api/task_queue:default_task_queue_factory",
       "../../api/units:time_delta",
diff --git a/modules/audio_device/audio_device_buffer.h b/modules/audio_device/audio_device_buffer.h
index b96696e..e9a90ab 100644
--- a/modules/audio_device/audio_device_buffer.h
+++ b/modules/audio_device/audio_device_buffer.h
@@ -17,10 +17,10 @@
 #include <atomic>
 #include <memory>
 
+#include "api/audio/audio_device_defines.h"
 #include "api/sequence_checker.h"
 #include "api/task_queue/task_queue_base.h"
 #include "api/task_queue/task_queue_factory.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 #include "rtc_base/buffer.h"
 #include "rtc_base/synchronization/mutex.h"
 #include "rtc_base/thread_annotations.h"
diff --git a/modules/audio_device/audio_device_data_observer.cc b/modules/audio_device/audio_device_data_observer.cc
index 0524830..9643f75 100644
--- a/modules/audio_device/audio_device_data_observer.cc
+++ b/modules/audio_device/audio_device_data_observer.cc
@@ -10,8 +10,8 @@
 
 #include "modules/audio_device/include/audio_device_data_observer.h"
 
+#include "api/audio/audio_device_defines.h"
 #include "api/make_ref_counted.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 #include "rtc_base/checks.h"
 
 namespace webrtc {
diff --git a/modules/audio_device/audio_device_generic.h b/modules/audio_device/audio_device_generic.h
index 41e24eb..3fa3ed9 100644
--- a/modules/audio_device/audio_device_generic.h
+++ b/modules/audio_device/audio_device_generic.h
@@ -13,9 +13,9 @@
 
 #include <stdint.h>
 
+#include "api/audio/audio_device.h"
+#include "api/audio/audio_device_defines.h"
 #include "modules/audio_device/audio_device_buffer.h"
-#include "modules/audio_device/include/audio_device.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 
 namespace webrtc {
 
diff --git a/modules/audio_device/audio_device_impl.h b/modules/audio_device/audio_device_impl.h
index 46d91a4..1e84eda 100644
--- a/modules/audio_device/audio_device_impl.h
+++ b/modules/audio_device/audio_device_impl.h
@@ -17,9 +17,9 @@
 
 #include <memory>
 
+#include "api/audio/audio_device.h"
 #include "api/task_queue/task_queue_factory.h"
 #include "modules/audio_device/audio_device_buffer.h"
-#include "modules/audio_device/include/audio_device.h"
 
 namespace webrtc {
 
diff --git a/modules/audio_device/audio_device_unittest.cc b/modules/audio_device/audio_device_unittest.cc
index e03c116..8275f21 100644
--- a/modules/audio_device/audio_device_unittest.cc
+++ b/modules/audio_device/audio_device_unittest.cc
@@ -8,7 +8,7 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-#include "modules/audio_device/include/audio_device.h"
+#include "api/audio/audio_device.h"
 
 #include <algorithm>
 #include <cstring>
diff --git a/modules/audio_device/dummy/audio_device_dummy.h b/modules/audio_device/dummy/audio_device_dummy.h
index 2a25410..6550915 100644
--- a/modules/audio_device/dummy/audio_device_dummy.h
+++ b/modules/audio_device/dummy/audio_device_dummy.h
@@ -13,10 +13,10 @@
 
 #include <stdint.h>
 
+#include "api/audio/audio_device.h"
+#include "api/audio/audio_device_defines.h"
 #include "modules/audio_device/audio_device_buffer.h"
 #include "modules/audio_device/audio_device_generic.h"
-#include "modules/audio_device/include/audio_device.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 
 namespace webrtc {
 
diff --git a/modules/audio_device/include/audio_device.h b/modules/audio_device/include/audio_device.h
index 47d2aec..3549e00 100644
--- a/modules/audio_device/include/audio_device.h
+++ b/modules/audio_device/include/audio_device.h
@@ -11,184 +11,8 @@
 #ifndef MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_H_
 #define MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_H_
 
-#include "absl/types/optional.h"
-#include "api/ref_count.h"
-#include "api/scoped_refptr.h"
-#include "api/task_queue/task_queue_factory.h"
-#include "modules/audio_device/include/audio_device_defines.h"
-
-namespace webrtc {
-
-class AudioDeviceModuleForTest;
-
-class AudioDeviceModule : public webrtc::RefCountInterface {
- public:
-  enum AudioLayer {
-    kPlatformDefaultAudio = 0,
-    kWindowsCoreAudio,
-    kWindowsCoreAudio2,
-    kLinuxAlsaAudio,
-    kLinuxPulseAudio,
-    kAndroidJavaAudio,
-    kAndroidOpenSLESAudio,
-    kAndroidJavaInputAndOpenSLESOutputAudio,
-    kAndroidAAudioAudio,
-    kAndroidJavaInputAndAAudioOutputAudio,
-    kDummyAudio,
-  };
-
-  enum WindowsDeviceType {
-    kDefaultCommunicationDevice = -1,
-    kDefaultDevice = -2
-  };
-
-  struct Stats {
-    // The fields below correspond to similarly-named fields in the WebRTC stats
-    // spec. https://w3c.github.io/webrtc-stats/#playoutstats-dict*
-    double synthesized_samples_duration_s = 0;
-    uint64_t synthesized_samples_events = 0;
-    double total_samples_duration_s = 0;
-    double total_playout_delay_s = 0;
-    uint64_t total_samples_count = 0;
-  };
-
- public:
-  // Creates a default ADM for usage in production code.
-  static rtc::scoped_refptr<AudioDeviceModule> Create(
-      AudioLayer audio_layer,
-      TaskQueueFactory* task_queue_factory);
-  // Creates an ADM with support for extra test methods. Don't use this factory
-  // in production code.
-  static rtc::scoped_refptr<AudioDeviceModuleForTest> CreateForTest(
-      AudioLayer audio_layer,
-      TaskQueueFactory* task_queue_factory);
-
-  // Retrieve the currently utilized audio layer
-  virtual int32_t ActiveAudioLayer(AudioLayer* audioLayer) const = 0;
-
-  // Full-duplex transportation of PCM audio
-  virtual int32_t RegisterAudioCallback(AudioTransport* audioCallback) = 0;
-
-  // Main initialization and termination
-  virtual int32_t Init() = 0;
-  virtual int32_t Terminate() = 0;
-  virtual bool Initialized() const = 0;
-
-  // Device enumeration
-  virtual int16_t PlayoutDevices() = 0;
-  virtual int16_t RecordingDevices() = 0;
-  virtual int32_t PlayoutDeviceName(uint16_t index,
-                                    char name[kAdmMaxDeviceNameSize],
-                                    char guid[kAdmMaxGuidSize]) = 0;
-  virtual int32_t RecordingDeviceName(uint16_t index,
-                                      char name[kAdmMaxDeviceNameSize],
-                                      char guid[kAdmMaxGuidSize]) = 0;
-
-  // Device selection
-  virtual int32_t SetPlayoutDevice(uint16_t index) = 0;
-  virtual int32_t SetPlayoutDevice(WindowsDeviceType device) = 0;
-  virtual int32_t SetRecordingDevice(uint16_t index) = 0;
-  virtual int32_t SetRecordingDevice(WindowsDeviceType device) = 0;
-
-  // Audio transport initialization
-  virtual int32_t PlayoutIsAvailable(bool* available) = 0;
-  virtual int32_t InitPlayout() = 0;
-  virtual bool PlayoutIsInitialized() const = 0;
-  virtual int32_t RecordingIsAvailable(bool* available) = 0;
-  virtual int32_t InitRecording() = 0;
-  virtual bool RecordingIsInitialized() const = 0;
-
-  // Audio transport control
-  virtual int32_t StartPlayout() = 0;
-  virtual int32_t StopPlayout() = 0;
-  virtual bool Playing() const = 0;
-  virtual int32_t StartRecording() = 0;
-  virtual int32_t StopRecording() = 0;
-  virtual bool Recording() const = 0;
-
-  // Audio mixer initialization
-  virtual int32_t InitSpeaker() = 0;
-  virtual bool SpeakerIsInitialized() const = 0;
-  virtual int32_t InitMicrophone() = 0;
-  virtual bool MicrophoneIsInitialized() const = 0;
-
-  // Speaker volume controls
-  virtual int32_t SpeakerVolumeIsAvailable(bool* available) = 0;
-  virtual int32_t SetSpeakerVolume(uint32_t volume) = 0;
-  virtual int32_t SpeakerVolume(uint32_t* volume) const = 0;
-  virtual int32_t MaxSpeakerVolume(uint32_t* maxVolume) const = 0;
-  virtual int32_t MinSpeakerVolume(uint32_t* minVolume) const = 0;
-
-  // Microphone volume controls
-  virtual int32_t MicrophoneVolumeIsAvailable(bool* available) = 0;
-  virtual int32_t SetMicrophoneVolume(uint32_t volume) = 0;
-  virtual int32_t MicrophoneVolume(uint32_t* volume) const = 0;
-  virtual int32_t MaxMicrophoneVolume(uint32_t* maxVolume) const = 0;
-  virtual int32_t MinMicrophoneVolume(uint32_t* minVolume) const = 0;
-
-  // Speaker mute control
-  virtual int32_t SpeakerMuteIsAvailable(bool* available) = 0;
-  virtual int32_t SetSpeakerMute(bool enable) = 0;
-  virtual int32_t SpeakerMute(bool* enabled) const = 0;
-
-  // Microphone mute control
-  virtual int32_t MicrophoneMuteIsAvailable(bool* available) = 0;
-  virtual int32_t SetMicrophoneMute(bool enable) = 0;
-  virtual int32_t MicrophoneMute(bool* enabled) const = 0;
-
-  // Stereo support
-  virtual int32_t StereoPlayoutIsAvailable(bool* available) const = 0;
-  virtual int32_t SetStereoPlayout(bool enable) = 0;
-  virtual int32_t StereoPlayout(bool* enabled) const = 0;
-  virtual int32_t StereoRecordingIsAvailable(bool* available) const = 0;
-  virtual int32_t SetStereoRecording(bool enable) = 0;
-  virtual int32_t StereoRecording(bool* enabled) const = 0;
-
-  // Playout delay
-  virtual int32_t PlayoutDelay(uint16_t* delayMS) const = 0;
-
-  // Only supported on Android.
-  virtual bool BuiltInAECIsAvailable() const = 0;
-  virtual bool BuiltInAGCIsAvailable() const = 0;
-  virtual bool BuiltInNSIsAvailable() const = 0;
-
-  // Enables the built-in audio effects. Only supported on Android.
-  virtual int32_t EnableBuiltInAEC(bool enable) = 0;
-  virtual int32_t EnableBuiltInAGC(bool enable) = 0;
-  virtual int32_t EnableBuiltInNS(bool enable) = 0;
-
-  // Play underrun count. Only supported on Android.
-  // TODO(alexnarest): Make it abstract after upstream projects support it.
-  virtual int32_t GetPlayoutUnderrunCount() const { return -1; }
-
-  // Used to generate RTC stats. If not implemented, RTCAudioPlayoutStats will
-  // not be present in the stats.
-  virtual absl::optional<Stats> GetStats() const { return absl::nullopt; }
-
-// Only supported on iOS.
-#if defined(WEBRTC_IOS)
-  virtual int GetPlayoutAudioParameters(AudioParameters* params) const = 0;
-  virtual int GetRecordAudioParameters(AudioParameters* params) const = 0;
-#endif  // WEBRTC_IOS
-
- protected:
-  ~AudioDeviceModule() override {}
-};
-
-// Extends the default ADM interface with some extra test methods.
-// Intended for usage in tests only and requires a unique factory method.
-class AudioDeviceModuleForTest : public AudioDeviceModule {
- public:
-  // Triggers internal restart sequences of audio streaming. Can be used by
-  // tests to emulate events corresponding to e.g. removal of an active audio
-  // device or other actions which causes the stream to be disconnected.
-  virtual int RestartPlayoutInternally() = 0;
-  virtual int RestartRecordingInternally() = 0;
-
-  virtual int SetPlayoutSampleRate(uint32_t sample_rate) = 0;
-  virtual int SetRecordingSampleRate(uint32_t sample_rate) = 0;
-};
-
-}  // namespace webrtc
+// This is a transitional header forwarding to the new version in the api/
+// folder.
+#include "api/audio/audio_device.h"
 
 #endif  // MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_H_
diff --git a/modules/audio_device/include/audio_device_data_observer.h b/modules/audio_device/include/audio_device_data_observer.h
index 36dc45f..2e8b79a 100644
--- a/modules/audio_device/include/audio_device_data_observer.h
+++ b/modules/audio_device/include/audio_device_data_observer.h
@@ -15,9 +15,9 @@
 #include <stdint.h>
 
 #include "absl/base/attributes.h"
+#include "api/audio/audio_device.h"
 #include "api/scoped_refptr.h"
 #include "api/task_queue/task_queue_factory.h"
-#include "modules/audio_device/include/audio_device.h"
 
 namespace webrtc {
 
diff --git a/modules/audio_device/include/audio_device_default.h b/modules/audio_device/include/audio_device_default.h
index 3779d6f..fb146a9 100644
--- a/modules/audio_device/include/audio_device_default.h
+++ b/modules/audio_device/include/audio_device_default.h
@@ -11,7 +11,7 @@
 #ifndef MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_DEFAULT_H_
 #define MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_DEFAULT_H_
 
-#include "modules/audio_device/include/audio_device.h"
+#include "api/audio/audio_device.h"
 
 namespace webrtc {
 namespace webrtc_impl {
diff --git a/modules/audio_device/include/audio_device_defines.h b/modules/audio_device/include/audio_device_defines.h
index d677d41..d126f78 100644
--- a/modules/audio_device/include/audio_device_defines.h
+++ b/modules/audio_device/include/audio_device_defines.h
@@ -11,167 +11,8 @@
 #ifndef MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_DEFINES_H_
 #define MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_DEFINES_H_
 
-#include <stddef.h>
-
-#include <string>
-
-#include "rtc_base/checks.h"
-#include "rtc_base/strings/string_builder.h"
-
-namespace webrtc {
-
-static const int kAdmMaxDeviceNameSize = 128;
-static const int kAdmMaxFileNameSize = 512;
-static const int kAdmMaxGuidSize = 128;
-
-static const int kAdmMinPlayoutBufferSizeMs = 10;
-static const int kAdmMaxPlayoutBufferSizeMs = 250;
-
-// ----------------------------------------------------------------------------
-//  AudioTransport
-// ----------------------------------------------------------------------------
-
-class AudioTransport {
- public:
-  // TODO(bugs.webrtc.org/13620) Deprecate this function
-  virtual int32_t RecordedDataIsAvailable(const void* audioSamples,
-                                          size_t nSamples,
-                                          size_t nBytesPerSample,
-                                          size_t nChannels,
-                                          uint32_t samplesPerSec,
-                                          uint32_t totalDelayMS,
-                                          int32_t clockDrift,
-                                          uint32_t currentMicLevel,
-                                          bool keyPressed,
-                                          uint32_t& newMicLevel) = 0;  // NOLINT
-
-  virtual int32_t RecordedDataIsAvailable(
-      const void* audioSamples,
-      size_t nSamples,
-      size_t nBytesPerSample,
-      size_t nChannels,
-      uint32_t samplesPerSec,
-      uint32_t totalDelayMS,
-      int32_t clockDrift,
-      uint32_t currentMicLevel,
-      bool keyPressed,
-      uint32_t& newMicLevel,
-      absl::optional<int64_t> estimatedCaptureTimeNS) {  // NOLINT
-    // TODO(webrtc:13620) Make the default behaver of the new API to behave as
-    // the old API. This can be pure virtual if all uses of the old API is
-    // removed.
-    return RecordedDataIsAvailable(
-        audioSamples, nSamples, nBytesPerSample, nChannels, samplesPerSec,
-        totalDelayMS, clockDrift, currentMicLevel, keyPressed, newMicLevel);
-  }
-
-  // Implementation has to setup safe values for all specified out parameters.
-  virtual int32_t NeedMorePlayData(size_t nSamples,
-                                   size_t nBytesPerSample,
-                                   size_t nChannels,
-                                   uint32_t samplesPerSec,
-                                   void* audioSamples,
-                                   size_t& nSamplesOut,  // NOLINT
-                                   int64_t* elapsed_time_ms,
-                                   int64_t* ntp_time_ms) = 0;  // NOLINT
-
-  // Method to pull mixed render audio data from all active VoE channels.
-  // The data will not be passed as reference for audio processing internally.
-  virtual void PullRenderData(int bits_per_sample,
-                              int sample_rate,
-                              size_t number_of_channels,
-                              size_t number_of_frames,
-                              void* audio_data,
-                              int64_t* elapsed_time_ms,
-                              int64_t* ntp_time_ms) = 0;
-
- protected:
-  virtual ~AudioTransport() {}
-};
-
-// Helper class for storage of fundamental audio parameters such as sample rate,
-// number of channels, native buffer size etc.
-// Note that one audio frame can contain more than one channel sample and each
-// sample is assumed to be a 16-bit PCM sample. Hence, one audio frame in
-// stereo contains 2 * (16/8) = 4 bytes of data.
-class AudioParameters {
- public:
-  // This implementation does only support 16-bit PCM samples.
-  static const size_t kBitsPerSample = 16;
-  AudioParameters()
-      : sample_rate_(0),
-        channels_(0),
-        frames_per_buffer_(0),
-        frames_per_10ms_buffer_(0) {}
-  AudioParameters(int sample_rate, size_t channels, size_t frames_per_buffer)
-      : sample_rate_(sample_rate),
-        channels_(channels),
-        frames_per_buffer_(frames_per_buffer),
-        frames_per_10ms_buffer_(static_cast<size_t>(sample_rate / 100)) {}
-  void reset(int sample_rate, size_t channels, size_t frames_per_buffer) {
-    sample_rate_ = sample_rate;
-    channels_ = channels;
-    frames_per_buffer_ = frames_per_buffer;
-    frames_per_10ms_buffer_ = static_cast<size_t>(sample_rate / 100);
-  }
-  size_t bits_per_sample() const { return kBitsPerSample; }
-  void reset(int sample_rate, size_t channels, double buffer_duration) {
-    reset(sample_rate, channels,
-          static_cast<size_t>(sample_rate * buffer_duration + 0.5));
-  }
-  void reset(int sample_rate, size_t channels) {
-    reset(sample_rate, channels, static_cast<size_t>(0));
-  }
-  int sample_rate() const { return sample_rate_; }
-  size_t channels() const { return channels_; }
-  size_t frames_per_buffer() const { return frames_per_buffer_; }
-  size_t frames_per_10ms_buffer() const { return frames_per_10ms_buffer_; }
-  size_t GetBytesPerFrame() const { return channels_ * kBitsPerSample / 8; }
-  size_t GetBytesPerBuffer() const {
-    return frames_per_buffer_ * GetBytesPerFrame();
-  }
-  // The WebRTC audio device buffer (ADB) only requires that the sample rate
-  // and number of channels are configured. Hence, to be "valid", only these
-  // two attributes must be set.
-  bool is_valid() const { return ((sample_rate_ > 0) && (channels_ > 0)); }
-  // Most platforms also require that a native buffer size is defined.
-  // An audio parameter instance is considered to be "complete" if it is both
-  // "valid" (can be used by the ADB) and also has a native frame size.
-  bool is_complete() const { return (is_valid() && (frames_per_buffer_ > 0)); }
-  size_t GetBytesPer10msBuffer() const {
-    return frames_per_10ms_buffer_ * GetBytesPerFrame();
-  }
-  double GetBufferSizeInMilliseconds() const {
-    if (sample_rate_ == 0)
-      return 0.0;
-    return frames_per_buffer_ / (sample_rate_ / 1000.0);
-  }
-  double GetBufferSizeInSeconds() const {
-    if (sample_rate_ == 0)
-      return 0.0;
-    return static_cast<double>(frames_per_buffer_) / (sample_rate_);
-  }
-  std::string ToString() const {
-    char ss_buf[1024];
-    rtc::SimpleStringBuilder ss(ss_buf);
-    ss << "AudioParameters: ";
-    ss << "sample_rate=" << sample_rate() << ", channels=" << channels();
-    ss << ", frames_per_buffer=" << frames_per_buffer();
-    ss << ", frames_per_10ms_buffer=" << frames_per_10ms_buffer();
-    ss << ", bytes_per_frame=" << GetBytesPerFrame();
-    ss << ", bytes_per_buffer=" << GetBytesPerBuffer();
-    ss << ", bytes_per_10ms_buffer=" << GetBytesPer10msBuffer();
-    ss << ", size_in_ms=" << GetBufferSizeInMilliseconds();
-    return ss.str();
-  }
-
- private:
-  int sample_rate_;
-  size_t channels_;
-  size_t frames_per_buffer_;
-  size_t frames_per_10ms_buffer_;
-};
-
-}  // namespace webrtc
+// This is a transitional header forwarding to the new version in the api/
+// folder.
+#include "api/audio/audio_device_defines.h"
 
 #endif  // MODULES_AUDIO_DEVICE_INCLUDE_AUDIO_DEVICE_DEFINES_H_
diff --git a/modules/audio_device/include/audio_device_factory.h b/modules/audio_device/include/audio_device_factory.h
index edd7686..4948c65 100644
--- a/modules/audio_device/include/audio_device_factory.h
+++ b/modules/audio_device/include/audio_device_factory.h
@@ -13,8 +13,8 @@
 
 #include <memory>
 
+#include "api/audio/audio_device.h"
 #include "api/task_queue/task_queue_factory.h"
-#include "modules/audio_device/include/audio_device.h"
 
 namespace webrtc {
 
diff --git a/modules/audio_device/include/fake_audio_device.h b/modules/audio_device/include/fake_audio_device.h
index 2a30317..b348483 100644
--- a/modules/audio_device/include/fake_audio_device.h
+++ b/modules/audio_device/include/fake_audio_device.h
@@ -11,7 +11,7 @@
 #ifndef MODULES_AUDIO_DEVICE_INCLUDE_FAKE_AUDIO_DEVICE_H_
 #define MODULES_AUDIO_DEVICE_INCLUDE_FAKE_AUDIO_DEVICE_H_
 
-#include "modules/audio_device/include/audio_device.h"
+#include "api/audio/audio_device.h"
 #include "modules/audio_device/include/audio_device_default.h"
 
 namespace webrtc {
diff --git a/modules/audio_device/include/mock_audio_device.h b/modules/audio_device/include/mock_audio_device.h
index 73fbdd5..7142684 100644
--- a/modules/audio_device/include/mock_audio_device.h
+++ b/modules/audio_device/include/mock_audio_device.h
@@ -13,8 +13,8 @@
 
 #include <string>
 
+#include "api/audio/audio_device.h"
 #include "api/make_ref_counted.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "test/gmock.h"
 
 namespace webrtc {
diff --git a/modules/audio_device/include/mock_audio_transport.h b/modules/audio_device/include/mock_audio_transport.h
index b886967..cde0e53 100644
--- a/modules/audio_device/include/mock_audio_transport.h
+++ b/modules/audio_device/include/mock_audio_transport.h
@@ -11,7 +11,7 @@
 #ifndef MODULES_AUDIO_DEVICE_INCLUDE_MOCK_AUDIO_TRANSPORT_H_
 #define MODULES_AUDIO_DEVICE_INCLUDE_MOCK_AUDIO_TRANSPORT_H_
 
-#include "modules/audio_device/include/audio_device_defines.h"
+#include "api/audio/audio_device_defines.h"
 #include "test/gmock.h"
 
 namespace webrtc {
diff --git a/modules/audio_device/include/test_audio_device.h b/modules/audio_device/include/test_audio_device.h
index 4b2d755..83954c8 100644
--- a/modules/audio_device/include/test_audio_device.h
+++ b/modules/audio_device/include/test_audio_device.h
@@ -18,10 +18,10 @@
 
 #include "absl/strings/string_view.h"
 #include "api/array_view.h"
+#include "api/audio/audio_device.h"
+#include "api/audio/audio_device_defines.h"
 #include "api/scoped_refptr.h"
 #include "api/task_queue/task_queue_factory.h"
-#include "modules/audio_device/include/audio_device.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 #include "rtc_base/buffer.h"
 
 namespace webrtc {
diff --git a/modules/audio_device/include/test_audio_device_unittest.cc b/modules/audio_device/include/test_audio_device_unittest.cc
index cca8297..165a4fb 100644
--- a/modules/audio_device/include/test_audio_device_unittest.cc
+++ b/modules/audio_device/include/test_audio_device_unittest.cc
@@ -17,12 +17,12 @@
 
 #include "absl/types/optional.h"
 #include "api/array_view.h"
+#include "api/audio/audio_device_defines.h"
 #include "api/task_queue/task_queue_factory.h"
 #include "api/units/time_delta.h"
 #include "api/units/timestamp.h"
 #include "common_audio/wav_file.h"
 #include "common_audio/wav_header.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/synchronization/mutex.h"
diff --git a/modules/audio_device/linux/audio_device_pulse_linux.h b/modules/audio_device/linux/audio_device_pulse_linux.h
index 0cf89ef..d818caf 100644
--- a/modules/audio_device/linux/audio_device_pulse_linux.h
+++ b/modules/audio_device/linux/audio_device_pulse_linux.h
@@ -13,11 +13,11 @@
 
 #include <memory>
 
+#include "api/audio/audio_device.h"
+#include "api/audio/audio_device_defines.h"
 #include "api/sequence_checker.h"
 #include "modules/audio_device/audio_device_buffer.h"
 #include "modules/audio_device/audio_device_generic.h"
-#include "modules/audio_device/include/audio_device.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 #include "modules/audio_device/linux/audio_mixer_manager_pulse_linux.h"
 #include "modules/audio_device/linux/pulseaudiosymboltable_linux.h"
 #include "rtc_base/event.h"
diff --git a/modules/audio_device/linux/audio_mixer_manager_alsa_linux.h b/modules/audio_device/linux/audio_mixer_manager_alsa_linux.h
index d982878..ec6c781 100644
--- a/modules/audio_device/linux/audio_mixer_manager_alsa_linux.h
+++ b/modules/audio_device/linux/audio_mixer_manager_alsa_linux.h
@@ -13,7 +13,7 @@
 
 #include <alsa/asoundlib.h>
 
-#include "modules/audio_device/include/audio_device.h"
+#include "api/audio/audio_device.h"
 #include "modules/audio_device/linux/alsasymboltable_linux.h"
 #include "rtc_base/synchronization/mutex.h"
 
diff --git a/modules/audio_device/mac/audio_mixer_manager_mac.h b/modules/audio_device/mac/audio_mixer_manager_mac.h
index 0ccab48..6767d6c 100644
--- a/modules/audio_device/mac/audio_mixer_manager_mac.h
+++ b/modules/audio_device/mac/audio_mixer_manager_mac.h
@@ -13,7 +13,7 @@
 
 #include <CoreAudio/CoreAudio.h>
 
-#include "modules/audio_device/include/audio_device.h"
+#include "api/audio/audio_device.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/synchronization/mutex.h"
 
diff --git a/modules/audio_device/test_audio_device_impl.h b/modules/audio_device/test_audio_device_impl.h
index 84b4894..87fd9a9 100644
--- a/modules/audio_device/test_audio_device_impl.h
+++ b/modules/audio_device/test_audio_device_impl.h
@@ -14,12 +14,12 @@
 #include <memory>
 #include <vector>
 
+#include "api/audio/audio_device.h"
+#include "api/audio/audio_device_defines.h"
 #include "api/task_queue/task_queue_base.h"
 #include "api/task_queue/task_queue_factory.h"
 #include "modules/audio_device/audio_device_buffer.h"
 #include "modules/audio_device/audio_device_generic.h"
-#include "modules/audio_device/include/audio_device.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 #include "modules/audio_device/include/test_audio_device.h"
 #include "rtc_base/buffer.h"
 #include "rtc_base/synchronization/mutex.h"
diff --git a/modules/audio_device/test_audio_device_impl_test.cc b/modules/audio_device/test_audio_device_impl_test.cc
index e81bb2f..ad15ad5 100644
--- a/modules/audio_device/test_audio_device_impl_test.cc
+++ b/modules/audio_device/test_audio_device_impl_test.cc
@@ -13,13 +13,13 @@
 #include <utility>
 
 #include "absl/types/optional.h"
+#include "api/audio/audio_device.h"
+#include "api/audio/audio_device_defines.h"
 #include "api/task_queue/task_queue_factory.h"
 #include "api/units/time_delta.h"
 #include "api/units/timestamp.h"
 #include "modules/audio_device/audio_device_buffer.h"
 #include "modules/audio_device/audio_device_generic.h"
-#include "modules/audio_device/include/audio_device.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 #include "modules/audio_device/include/test_audio_device.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/synchronization/mutex.h"
diff --git a/modules/audio_device/win/audio_device_module_win.cc b/modules/audio_device/win/audio_device_module_win.cc
index a36c407..00f5443 100644
--- a/modules/audio_device/win/audio_device_module_win.cc
+++ b/modules/audio_device/win/audio_device_module_win.cc
@@ -13,10 +13,10 @@
 #include <memory>
 #include <utility>
 
+#include "api/audio/audio_device.h"
 #include "api/make_ref_counted.h"
 #include "api/sequence_checker.h"
 #include "modules/audio_device/audio_device_buffer.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/string_utils.h"
diff --git a/modules/audio_device/win/audio_device_module_win.h b/modules/audio_device/win/audio_device_module_win.h
index 1ed0b25..d7cd06b 100644
--- a/modules/audio_device/win/audio_device_module_win.h
+++ b/modules/audio_device/win/audio_device_module_win.h
@@ -14,9 +14,9 @@
 #include <memory>
 #include <string>
 
+#include "api/audio/audio_device.h"
 #include "api/scoped_refptr.h"
 #include "api/task_queue/task_queue_factory.h"
-#include "modules/audio_device/include/audio_device.h"
 
 namespace webrtc {
 
diff --git a/modules/audio_device/win/core_audio_utility_win.h b/modules/audio_device/win/core_audio_utility_win.h
index 454e60b..37b90874 100644
--- a/modules/audio_device/win/core_audio_utility_win.h
+++ b/modules/audio_device/win/core_audio_utility_win.h
@@ -23,9 +23,9 @@
 #include <string>
 
 #include "absl/strings/string_view.h"
+#include "api/audio/audio_device_defines.h"
 #include "api/units/time_delta.h"
 #include "modules/audio_device/audio_device_name.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/string_utils.h"
 
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index 42763b4..18063ae 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -867,6 +867,7 @@
     ":rtp_transmission_manager",
     ":sctp_data_channel",
     "../api:libjingle_peerconnection_api",
+    "../api/audio:audio_device",
     "../call:call_interfaces",
     "../modules/audio_device",
   ]
@@ -907,6 +908,7 @@
     "../api:rtp_parameters",
     "../api:scoped_refptr",
     "../api:sequence_checker",
+    "../api/audio:audio_device",
     "../api/audio:audio_processing_statistics",
     "../api/task_queue:task_queue",
     "../api/units:time_delta",
@@ -2145,6 +2147,7 @@
       "../api:rtc_error",
       "../api:rtc_stats_api",
       "../api:scoped_refptr",
+      "../api/audio:audio_device",
       "../api/audio:audio_mixer_api",
       "../api/audio:audio_processing",
       "../api/audio_codecs:audio_codecs_api",
@@ -2164,7 +2167,6 @@
       "../api/video_codecs:video_encoder_factory_template_libvpx_vp9_adapter",
       "../api/video_codecs:video_encoder_factory_template_open_h264_adapter",
       "../media:rtc_media_tests_utils",
-      "../modules/audio_device:audio_device_api",
       "../p2p:basic_port_allocator",
       "../p2p:connection",
       "../p2p:p2p_test_utils",
@@ -2367,6 +2369,7 @@
       "../api:rtp_transceiver_direction",
       "../api:scoped_refptr",
       "../api/adaptation:resource_adaptation_api",
+      "../api/audio:audio_device",
       "../api/audio:audio_mixer_api",
       "../api/audio:audio_processing",
       "../api/audio:audio_processing_statistics",
@@ -2404,7 +2407,6 @@
       "../media:rtc_data_sctp_transport_internal",
       "../media:rtc_media_config",
       "../media:stream_params",
-      "../modules/audio_device:audio_device_api",
       "../modules/rtp_rtcp:rtp_rtcp_format",
       "../p2p:basic_port_allocator",
       "../p2p:connection",
@@ -2597,6 +2599,7 @@
       "../api:rtp_sender_interface",
       "../api:rtp_transceiver_direction",
       "../api:scoped_refptr",
+      "../api/audio:audio_device",
       "../api/audio:audio_mixer_api",
       "../api/audio:audio_processing",
       "../api/crypto:frame_decryptor_interface",
@@ -2620,7 +2623,6 @@
       "../media:rtc_media_config",
       "../media:rtc_media_tests_utils",
       "../media:stream_params",
-      "../modules/audio_device:audio_device_api",
       "../modules/audio_processing:audioproc_test_utils",
       "../modules/rtp_rtcp:rtp_rtcp_format",
       "../p2p:basic_port_allocator",
@@ -2748,6 +2750,7 @@
       "../api:rtp_parameters",
       "../api:scoped_refptr",
       "../api:sequence_checker",
+      "../api/audio:audio_device",
       "../api/audio:audio_mixer_api",
       "../api/audio:audio_processing",
       "../api/audio_codecs:audio_codecs_api",
diff --git a/pc/peer_connection_bundle_unittest.cc b/pc/peer_connection_bundle_unittest.cc
index 269f6c7..7208ba0 100644
--- a/pc/peer_connection_bundle_unittest.cc
+++ b/pc/peer_connection_bundle_unittest.cc
@@ -19,6 +19,7 @@
 #include <utility>
 #include <vector>
 
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
@@ -46,7 +47,6 @@
 #include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h"
 #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h"
 #include "media/base/stream_params.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "p2p/base/p2p_constants.h"
 #include "p2p/base/port.h"
 #include "p2p/base/port_allocator.h"
diff --git a/pc/peer_connection_crypto_unittest.cc b/pc/peer_connection_crypto_unittest.cc
index 57c6c1a..9ba20ca 100644
--- a/pc/peer_connection_crypto_unittest.cc
+++ b/pc/peer_connection_crypto_unittest.cc
@@ -19,6 +19,7 @@
 #include <vector>
 
 #include "absl/types/optional.h"
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
@@ -38,7 +39,6 @@
 #include "api/video_codecs/video_encoder_factory_template_libvpx_vp8_adapter.h"
 #include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h"
 #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "p2p/base/fake_port_allocator.h"
 #include "p2p/base/port_allocator.h"
 #include "p2p/base/transport_description.h"
diff --git a/pc/peer_connection_factory_unittest.cc b/pc/peer_connection_factory_unittest.cc
index d2e8938..eb10a6c 100644
--- a/pc/peer_connection_factory_unittest.cc
+++ b/pc/peer_connection_factory_unittest.cc
@@ -15,6 +15,7 @@
 #include <utility>
 #include <vector>
 
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
@@ -38,7 +39,6 @@
 #include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h"
 #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h"
 #include "media/base/fake_frame_source.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "p2p/base/fake_port_allocator.h"
 #include "p2p/base/port.h"
 #include "p2p/base/port_allocator.h"
diff --git a/pc/peer_connection_ice_unittest.cc b/pc/peer_connection_ice_unittest.cc
index a4b29af..59541e5 100644
--- a/pc/peer_connection_ice_unittest.cc
+++ b/pc/peer_connection_ice_unittest.cc
@@ -19,6 +19,7 @@
 #include <vector>
 
 #include "absl/types/optional.h"
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio/audio_processing.h"
 #include "api/candidate.h"
@@ -28,7 +29,6 @@
 #include "api/peer_connection_interface.h"
 #include "api/rtc_error.h"
 #include "api/scoped_refptr.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "p2p/base/fake_port_allocator.h"
 #include "p2p/base/ice_transport_internal.h"
 #include "p2p/base/p2p_constants.h"
diff --git a/pc/peer_connection_interface_unittest.cc b/pc/peer_connection_interface_unittest.cc
index 97934ba..4d68246 100644
--- a/pc/peer_connection_interface_unittest.cc
+++ b/pc/peer_connection_interface_unittest.cc
@@ -19,6 +19,7 @@
 
 #include "absl/strings/str_replace.h"
 #include "absl/types/optional.h"
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
@@ -55,7 +56,6 @@
 #include "media/base/stream_params.h"
 #include "media/engine/webrtc_media_engine.h"
 #include "media/sctp/sctp_transport_internal.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "p2p/base/fake_port_allocator.h"
 #include "p2p/base/p2p_constants.h"
 #include "p2p/base/port.h"
diff --git a/pc/peer_connection_internal.h b/pc/peer_connection_internal.h
index 6fc1222..4f6d6d2 100644
--- a/pc/peer_connection_internal.h
+++ b/pc/peer_connection_internal.h
@@ -18,9 +18,9 @@
 #include <vector>
 
 #include "absl/types/optional.h"
+#include "api/audio/audio_device.h"
 #include "api/peer_connection_interface.h"
 #include "call/call.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "pc/jsep_transport_controller.h"
 #include "pc/peer_connection_message_handler.h"
 #include "pc/rtp_transceiver.h"
diff --git a/pc/peer_connection_jsep_unittest.cc b/pc/peer_connection_jsep_unittest.cc
index 786b519..fa033ae 100644
--- a/pc/peer_connection_jsep_unittest.cc
+++ b/pc/peer_connection_jsep_unittest.cc
@@ -20,6 +20,7 @@
 
 #include "absl/strings/string_view.h"
 #include "absl/types/optional.h"
+#include "api/audio/audio_device.h"
 #include "api/enable_media_with_defaults.h"
 #include "api/field_trials_view.h"
 #include "api/jsep.h"
@@ -40,7 +41,6 @@
 #include "media/base/media_engine.h"
 #include "media/base/stream_params.h"
 #include "media/engine/webrtc_media_engine.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "p2p/base/p2p_constants.h"
 #include "p2p/base/port_allocator.h"
 #include "p2p/base/transport_info.h"
diff --git a/pc/peer_connection_rampup_tests.cc b/pc/peer_connection_rampup_tests.cc
index 60e7abc..08bc373 100644
--- a/pc/peer_connection_rampup_tests.cc
+++ b/pc/peer_connection_rampup_tests.cc
@@ -14,6 +14,7 @@
 #include <vector>
 
 #include "absl/types/optional.h"
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
@@ -40,7 +41,6 @@
 #include "api/video_codecs/video_encoder_factory_template_libvpx_vp8_adapter.h"
 #include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h"
 #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "p2p/base/port_allocator.h"
 #include "p2p/base/port_interface.h"
 #include "p2p/base/test_turn_server.h"
diff --git a/pc/peer_connection_rtp_unittest.cc b/pc/peer_connection_rtp_unittest.cc
index c162dfd..bde8e18 100644
--- a/pc/peer_connection_rtp_unittest.cc
+++ b/pc/peer_connection_rtp_unittest.cc
@@ -17,6 +17,7 @@
 #include <vector>
 
 #include "absl/types/optional.h"
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
@@ -46,7 +47,6 @@
 #include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h"
 #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h"
 #include "media/base/stream_params.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "p2p/base/port_allocator.h"
 #include "pc/media_session.h"
 #include "pc/peer_connection_wrapper.h"
diff --git a/pc/peer_connection_signaling_unittest.cc b/pc/peer_connection_signaling_unittest.cc
index 64d393a..b6ad190 100644
--- a/pc/peer_connection_signaling_unittest.cc
+++ b/pc/peer_connection_signaling_unittest.cc
@@ -24,6 +24,7 @@
 #include <vector>
 
 #include "absl/types/optional.h"
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
@@ -51,7 +52,6 @@
 #include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h"
 #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h"
 #include "media/base/codec.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "p2p/base/port_allocator.h"
 #include "pc/peer_connection.h"
 #include "pc/peer_connection_proxy.h"
diff --git a/pc/peer_connection_simulcast_unittest.cc b/pc/peer_connection_simulcast_unittest.cc
index b4b998a..53dcd2d 100644
--- a/pc/peer_connection_simulcast_unittest.cc
+++ b/pc/peer_connection_simulcast_unittest.cc
@@ -20,6 +20,7 @@
 #include "absl/algorithm/container.h"
 #include "absl/strings/match.h"
 #include "absl/strings/string_view.h"
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
@@ -51,7 +52,6 @@
 #include "media/base/media_constants.h"
 #include "media/base/rid_description.h"
 #include "media/base/stream_params.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "pc/channel_interface.h"
 #include "pc/peer_connection_wrapper.h"
 #include "pc/sdp_utils.h"
diff --git a/pc/rtc_stats_collector.cc b/pc/rtc_stats_collector.cc
index 1342fff..06dc922 100644
--- a/pc/rtc_stats_collector.cc
+++ b/pc/rtc_stats_collector.cc
@@ -25,6 +25,7 @@
 #include "absl/functional/bind_front.h"
 #include "absl/strings/string_view.h"
 #include "api/array_view.h"
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_processing_statistics.h"
 #include "api/candidate.h"
 #include "api/dtls_transport_interface.h"
@@ -40,7 +41,6 @@
 #include "common_video/include/quality_limitation_reason.h"
 #include "media/base/media_channel.h"
 #include "media/base/media_channel_impl.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "modules/rtp_rtcp/include/report_block_data.h"
 #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
 #include "p2p/base/connection_info.h"
diff --git a/pc/rtc_stats_collector.h b/pc/rtc_stats_collector.h
index 505979c..17eaf7f 100644
--- a/pc/rtc_stats_collector.h
+++ b/pc/rtc_stats_collector.h
@@ -20,6 +20,7 @@
 #include <vector>
 
 #include "absl/types/optional.h"
+#include "api/audio/audio_device.h"
 #include "api/data_channel_interface.h"
 #include "api/media_types.h"
 #include "api/scoped_refptr.h"
@@ -28,7 +29,6 @@
 #include "api/stats/rtcstats_objects.h"
 #include "call/call.h"
 #include "media/base/media_channel.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "pc/data_channel_utils.h"
 #include "pc/peer_connection_internal.h"
 #include "pc/rtp_receiver.h"
diff --git a/pc/rtc_stats_collector_unittest.cc b/pc/rtc_stats_collector_unittest.cc
index 7b3160e..0aa9a62 100644
--- a/pc/rtc_stats_collector_unittest.cc
+++ b/pc/rtc_stats_collector_unittest.cc
@@ -24,6 +24,7 @@
 
 #include "absl/strings/str_replace.h"
 #include "absl/types/optional.h"
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_processing_statistics.h"
 #include "api/candidate.h"
 #include "api/dtls_transport_interface.h"
@@ -46,7 +47,6 @@
 #include "api/video_codecs/scalability_mode.h"
 #include "common_video/include/quality_limitation_reason.h"
 #include "media/base/media_channel.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "modules/rtp_rtcp/include/report_block_data.h"
 #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
 #include "p2p/base/connection_info.h"
diff --git a/pc/sdp_offer_answer_unittest.cc b/pc/sdp_offer_answer_unittest.cc
index 2043ae8..e4324fa 100644
--- a/pc/sdp_offer_answer_unittest.cc
+++ b/pc/sdp_offer_answer_unittest.cc
@@ -13,6 +13,7 @@
 #include <vector>
 
 #include "absl/strings/str_replace.h"
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
@@ -32,7 +33,6 @@
 #include "api/video_codecs/video_encoder_factory_template_libvpx_vp8_adapter.h"
 #include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h"
 #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "p2p/base/port_allocator.h"
 #include "pc/peer_connection_wrapper.h"
 #include "pc/session_description.h"
diff --git a/pc/test/fake_audio_capture_module.h b/pc/test/fake_audio_capture_module.h
index c04373c..f25d151 100644
--- a/pc/test/fake_audio_capture_module.h
+++ b/pc/test/fake_audio_capture_module.h
@@ -25,10 +25,10 @@
 
 #include <memory>
 
+#include "api/audio/audio_device.h"
+#include "api/audio/audio_device_defines.h"
 #include "api/scoped_refptr.h"
 #include "api/sequence_checker.h"
-#include "modules/audio_device/include/audio_device.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 #include "rtc_base/synchronization/mutex.h"
 #include "rtc_base/thread_annotations.h"
 
diff --git a/pc/test/integration_test_helpers.h b/pc/test/integration_test_helpers.h
index b539a87..f1210fb 100644
--- a/pc/test/integration_test_helpers.h
+++ b/pc/test/integration_test_helpers.h
@@ -30,6 +30,7 @@
 #include "absl/memory/memory.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/optional.h"
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_options.h"
 #include "api/candidate.h"
@@ -69,7 +70,6 @@
 #include "media/base/media_engine.h"
 #include "media/base/stream_params.h"
 #include "media/engine/fake_webrtc_video_engine.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "modules/audio_processing/test/audio_processing_builder_for_testing.h"
 #include "p2p/base/fake_ice_transport.h"
 #include "p2p/base/ice_transport_internal.h"
diff --git a/pc/test/mock_peer_connection_internal.h b/pc/test/mock_peer_connection_internal.h
index e586008..c9f896b 100644
--- a/pc/test/mock_peer_connection_internal.h
+++ b/pc/test/mock_peer_connection_internal.h
@@ -17,7 +17,7 @@
 #include <string>
 #include <vector>
 
-#include "modules/audio_device/include/audio_device.h"
+#include "api/audio/audio_device.h"
 #include "pc/peer_connection_internal.h"
 #include "test/gmock.h"
 
diff --git a/pc/test/peer_connection_test_wrapper.cc b/pc/test/peer_connection_test_wrapper.cc
index 068768b..e5c3811 100644
--- a/pc/test/peer_connection_test_wrapper.cc
+++ b/pc/test/peer_connection_test_wrapper.cc
@@ -19,6 +19,7 @@
 
 #include "absl/strings/match.h"
 #include "absl/types/optional.h"
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio/audio_processing.h"
 #include "api/create_peerconnection_factory.h"
@@ -38,7 +39,6 @@
 #include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h"
 #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h"
 #include "media/engine/simulcast_encoder_adapter.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "p2p/base/fake_port_allocator.h"
 #include "p2p/base/port_allocator.h"
 #include "pc/test/fake_periodic_video_source.h"
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 8dba298..7620217 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -234,7 +234,7 @@
         deps = [
           ":audio_device",
           "../api:make_ref_counted",
-          "../modules/audio_device:audio_device_api",
+          "../api/audio:audio_device",
           "../modules/audio_device:audio_device_generic",
           "../rtc_base:checks",
           "../rtc_base:logging",
@@ -298,10 +298,10 @@
           "../api:array_view",
           "../api:scoped_refptr",
           "../api:sequence_checker",
+          "../api/audio:audio_device",
           "../api/task_queue",
           "../api/task_queue:default_task_queue_factory",
           "../api/task_queue:pending_task_safety_flag",
-          "../modules/audio_device:audio_device_api",
           "../modules/audio_device:audio_device_buffer",
           "../modules/audio_device:audio_device_config",
           "../modules/audio_device:audio_device_generic",
@@ -497,9 +497,9 @@
         "../api:refcountedbase",
         "../api:scoped_refptr",
         "../api:sequence_checker",
+        "../api/audio:audio_device",
         "../api/task_queue",
         "../api/task_queue:default_task_queue_factory",
-        "../modules/audio_device:audio_device_api",
         "../modules/audio_device:audio_device_buffer",
         "../rtc_base:buffer",
         "../rtc_base:checks",
@@ -525,7 +525,7 @@
         ":audio_device_api_objc",
         ":audio_device_objc",
         "../api:make_ref_counted",
-        "../modules/audio_device:audio_device_api",
+        "../api/audio:audio_device",
         "../rtc_base:logging",
       ]
       if (is_mac) {
@@ -1066,6 +1066,7 @@
         "../api:rtp_parameters",
         "../api:rtp_sender_interface",
         "../api:scoped_refptr",
+        "../api/audio:audio_device",
         "../api/audio:audio_processing",
         "../api/audio_codecs:audio_codecs_api",
         "../api/audio_codecs:builtin_audio_decoder_factory",
@@ -1081,7 +1082,6 @@
         "../common_video",
         "../media:media_constants",
         "../media:rtc_media_base",
-        "../modules/audio_device:audio_device_api",
         "../modules/audio_processing",
         "../modules/video_coding:video_codec_interface",
         "../pc:peer_connection_factory",
@@ -1169,6 +1169,7 @@
             ":videosource_objc",
             ":videotoolbox_objc",
             "../api:scoped_refptr",
+            "../api/audio:audio_device",
             "../api/audio:audio_processing",
             "../api/audio_codecs:builtin_audio_decoder_factory",
             "../api/audio_codecs:builtin_audio_encoder_factory",
@@ -1180,7 +1181,6 @@
             "../media:codec",
             "../media:rtc_media_base",
             "../media:rtc_media_tests_utils",
-            "../modules/audio_device:audio_device_api",
             "../modules/video_coding:video_codec_interface",
             "../rtc_base:gunit_helpers",
             "../rtc_base:macromagic",
diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn
index ea640ab..593ed36 100644
--- a/sdk/android/BUILD.gn
+++ b/sdk/android/BUILD.gn
@@ -782,6 +782,7 @@
       "../../api:rtp_parameters",
       "../../api:rtp_sender_interface",
       "../../api:turn_customizer",
+      "../../api/audio:audio_device",
       "../../api/audio:audio_processing",
       "../../api/crypto:options",
       "../../api/rtc_event_log:rtc_event_log_factory",
@@ -990,7 +991,7 @@
       ":native_api_jni",
       ":opensles_audio_device_module",
       "../../api:scoped_refptr",
-      "../../modules/audio_device:audio_device_api",
+      "../../api/audio:audio_device",
       "../../rtc_base:checks",
       "../../rtc_base:logging",
       "../../rtc_base:refcount",
@@ -1172,9 +1173,9 @@
       ":native_api_jni",
       "../../api:make_ref_counted",
       "../../api:sequence_checker",
+      "../../api/audio:audio_device",
       "../../api/task_queue",
       "../../api/task_queue:default_task_queue_factory",
-      "../../modules/audio_device:audio_device_api",
       "../../modules/audio_device:audio_device_buffer",
       "../../rtc_base:checks",
       "../../rtc_base:logging",
@@ -1197,7 +1198,7 @@
       ":base_jni",
       ":generated_java_audio_device_module_native_jni",
       "../../api:sequence_checker",
-      "../../modules/audio_device:audio_device_api",
+      "../../api/audio:audio_device",
       "../../modules/audio_device:audio_device_buffer",
       "../../rtc_base:checks",
       "../../rtc_base:logging",
@@ -1260,7 +1261,7 @@
       "../../api:refcountedbase",
       "../../api:scoped_refptr",
       "../../api:sequence_checker",
-      "../../modules/audio_device:audio_device_api",
+      "../../api/audio:audio_device",
       "../../modules/audio_device:audio_device_buffer",
       "../../rtc_base:checks",
       "../../rtc_base:logging",
@@ -1647,6 +1648,7 @@
       "../../api:enable_media_with_defaults",
       "../../api:field_trials_view",
       "../../api:scoped_refptr",
+      "../../api/audio:audio_device",
       "../../api/environment",
       "../../api/environment:environment_factory",
       "../../api/rtc_event_log:rtc_event_log_factory",
diff --git a/sdk/android/native_api/audio_device_module/audio_device_android.h b/sdk/android/native_api/audio_device_module/audio_device_android.h
index b687dca..587d004 100644
--- a/sdk/android/native_api/audio_device_module/audio_device_android.h
+++ b/sdk/android/native_api/audio_device_module/audio_device_android.h
@@ -13,7 +13,7 @@
 
 #include <jni.h>
 
-#include "modules/audio_device/include/audio_device.h"
+#include "api/audio/audio_device.h"
 
 namespace webrtc {
 
diff --git a/sdk/android/native_unittests/audio_device/audio_device_unittest.cc b/sdk/android/native_unittests/audio_device/audio_device_unittest.cc
index 9047641..f75c596 100644
--- a/sdk/android/native_unittests/audio_device/audio_device_unittest.cc
+++ b/sdk/android/native_unittests/audio_device/audio_device_unittest.cc
@@ -8,7 +8,7 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-#include "modules/audio_device/include/audio_device.h"
+#include "api/audio/audio_device.h"
 
 #include <list>
 #include <memory>
diff --git a/sdk/android/src/jni/audio_device/aaudio_player.h b/sdk/android/src/jni/audio_device/aaudio_player.h
index 7286d6e..ddf948c 100644
--- a/sdk/android/src/jni/audio_device/aaudio_player.h
+++ b/sdk/android/src/jni/audio_device/aaudio_player.h
@@ -16,10 +16,10 @@
 #include <memory>
 
 #include "absl/types/optional.h"
+#include "api/audio/audio_device_defines.h"
 #include "api/sequence_checker.h"
 #include "api/task_queue/task_queue_base.h"
 #include "modules/audio_device/audio_device_buffer.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 #include "rtc_base/thread_annotations.h"
 #include "sdk/android/src/jni/audio_device/aaudio_wrapper.h"
 #include "sdk/android/src/jni/audio_device/audio_device_module.h"
diff --git a/sdk/android/src/jni/audio_device/aaudio_recorder.h b/sdk/android/src/jni/audio_device/aaudio_recorder.h
index 016c9b0..5d6881a 100644
--- a/sdk/android/src/jni/audio_device/aaudio_recorder.h
+++ b/sdk/android/src/jni/audio_device/aaudio_recorder.h
@@ -15,10 +15,10 @@
 
 #include <memory>
 
+#include "api/audio/audio_device_defines.h"
 #include "api/sequence_checker.h"
 #include "api/task_queue/task_queue_base.h"
 #include "modules/audio_device/audio_device_buffer.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 #include "sdk/android/src/jni/audio_device/aaudio_wrapper.h"
 #include "sdk/android/src/jni/audio_device/audio_device_module.h"
 
diff --git a/sdk/android/src/jni/audio_device/aaudio_wrapper.h b/sdk/android/src/jni/audio_device/aaudio_wrapper.h
index cbc78a0..d95353f 100644
--- a/sdk/android/src/jni/audio_device/aaudio_wrapper.h
+++ b/sdk/android/src/jni/audio_device/aaudio_wrapper.h
@@ -13,8 +13,8 @@
 
 #include <aaudio/AAudio.h>
 
+#include "api/audio/audio_device_defines.h"
 #include "api/sequence_checker.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 
 namespace webrtc {
 
diff --git a/sdk/android/src/jni/audio_device/audio_device_module.h b/sdk/android/src/jni/audio_device/audio_device_module.h
index e8acc90..92dbb21 100644
--- a/sdk/android/src/jni/audio_device/audio_device_module.h
+++ b/sdk/android/src/jni/audio_device/audio_device_module.h
@@ -14,7 +14,7 @@
 #include <memory>
 
 #include "absl/types/optional.h"
-#include "modules/audio_device/include/audio_device.h"
+#include "api/audio/audio_device.h"
 #include "sdk/android/native_api/jni/scoped_java_ref.h"
 
 namespace webrtc {
diff --git a/sdk/android/src/jni/audio_device/audio_record_jni.h b/sdk/android/src/jni/audio_device/audio_record_jni.h
index 49c905d..72e6157 100644
--- a/sdk/android/src/jni/audio_device/audio_record_jni.h
+++ b/sdk/android/src/jni/audio_device/audio_record_jni.h
@@ -15,9 +15,9 @@
 
 #include <memory>
 
+#include "api/audio/audio_device_defines.h"
 #include "api/sequence_checker.h"
 #include "modules/audio_device/audio_device_buffer.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 #include "sdk/android/src/jni/audio_device/audio_device_module.h"
 
 namespace webrtc {
diff --git a/sdk/android/src/jni/audio_device/audio_track_jni.h b/sdk/android/src/jni/audio_device/audio_track_jni.h
index 5ca907c..10f3ee7 100644
--- a/sdk/android/src/jni/audio_device/audio_track_jni.h
+++ b/sdk/android/src/jni/audio_device/audio_track_jni.h
@@ -16,9 +16,9 @@
 #include <memory>
 
 #include "absl/types/optional.h"
+#include "api/audio/audio_device_defines.h"
 #include "api/sequence_checker.h"
 #include "modules/audio_device/audio_device_buffer.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 #include "sdk/android/src/jni/audio_device/audio_common.h"
 #include "sdk/android/src/jni/audio_device/audio_device_module.h"
 
diff --git a/sdk/android/src/jni/audio_device/opensles_player.h b/sdk/android/src/jni/audio_device/opensles_player.h
index 8a22432..3d63bd7 100644
--- a/sdk/android/src/jni/audio_device/opensles_player.h
+++ b/sdk/android/src/jni/audio_device/opensles_player.h
@@ -18,11 +18,11 @@
 #include <memory>
 
 #include "absl/types/optional.h"
+#include "api/audio/audio_device_defines.h"
 #include "api/scoped_refptr.h"
 #include "api/sequence_checker.h"
 #include "modules/audio_device/audio_device_buffer.h"
 #include "modules/audio_device/fine_audio_buffer.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 #include "sdk/android/src/jni/audio_device/audio_common.h"
 #include "sdk/android/src/jni/audio_device/audio_device_module.h"
 #include "sdk/android/src/jni/audio_device/opensles_common.h"
diff --git a/sdk/android/src/jni/audio_device/opensles_recorder.h b/sdk/android/src/jni/audio_device/opensles_recorder.h
index 93c4e4e..bffe086 100644
--- a/sdk/android/src/jni/audio_device/opensles_recorder.h
+++ b/sdk/android/src/jni/audio_device/opensles_recorder.h
@@ -17,11 +17,11 @@
 
 #include <memory>
 
+#include "api/audio/audio_device_defines.h"
 #include "api/scoped_refptr.h"
 #include "api/sequence_checker.h"
 #include "modules/audio_device/audio_device_buffer.h"
 #include "modules/audio_device/fine_audio_buffer.h"
-#include "modules/audio_device/include/audio_device_defines.h"
 #include "sdk/android/src/jni/audio_device/audio_common.h"
 #include "sdk/android/src/jni/audio_device/audio_device_module.h"
 #include "sdk/android/src/jni/audio_device/opensles_common.h"
diff --git a/sdk/android/src/jni/pc/peer_connection_factory.cc b/sdk/android/src/jni/pc/peer_connection_factory.cc
index ace3a56..9d4f94f 100644
--- a/sdk/android/src/jni/pc/peer_connection_factory.cc
+++ b/sdk/android/src/jni/pc/peer_connection_factory.cc
@@ -14,13 +14,13 @@
 #include <utility>
 
 #include "absl/memory/memory.h"
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_processing.h"
 #include "api/enable_media.h"
 #include "api/rtc_event_log/rtc_event_log_factory.h"
 #include "api/task_queue/default_task_queue_factory.h"
 #include "api/video_codecs/video_decoder_factory.h"
 #include "api/video_codecs/video_encoder_factory.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "modules/utility/include/jvm_android.h"
 #include "rtc_base/event_tracer.h"
 #include "rtc_base/physical_socket_server.h"
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm
index 6a393b0..eb03d68 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm
+++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm
@@ -31,6 +31,7 @@
 #include "sdk/objc/native/api/ssl_certificate_verifier.h"
 #include "system_wrappers/include/field_trial.h"
 
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
 #include "api/audio_codecs/builtin_audio_encoder_factory.h"
@@ -41,7 +42,6 @@
 #import "components/video_codec/RTCVideoDecoderFactoryH264.h"
 #import "components/video_codec/RTCVideoEncoderFactoryH264.h"
 #include "media/base/media_constants.h"
-#include "modules/audio_device/include/audio_device.h"
 
 #include "sdk/objc/native/api/objc_audio_device_module.h"
 #include "sdk/objc/native/api/video_decoder_factory.h"
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder.mm b/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder.mm
index caec4a6..28ded10 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder.mm
+++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder.mm
@@ -11,12 +11,12 @@
 #import "RTCPeerConnectionFactoryBuilder.h"
 #import "RTCPeerConnectionFactory+Native.h"
 
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/audio_decoder_factory.h"
 #include "api/audio_codecs/audio_encoder_factory.h"
 #include "api/video_codecs/video_decoder_factory.h"
 #include "api/video_codecs/video_encoder_factory.h"
-#include "modules/audio_device/include/audio_device.h"
 
 @implementation RTCPeerConnectionFactoryBuilder {
   std::unique_ptr<webrtc::VideoEncoderFactory> _videoEncoderFactory;
diff --git a/sdk/objc/native/api/audio_device_module.h b/sdk/objc/native/api/audio_device_module.h
index 3405469..a58b085 100644
--- a/sdk/objc/native/api/audio_device_module.h
+++ b/sdk/objc/native/api/audio_device_module.h
@@ -13,7 +13,7 @@
 
 #include <memory>
 
-#include "modules/audio_device/include/audio_device.h"
+#include "api/audio/audio_device.h"
 
 namespace webrtc {
 
diff --git a/sdk/objc/native/api/objc_audio_device_module.h b/sdk/objc/native/api/objc_audio_device_module.h
index 0fe2dda..be1950e 100644
--- a/sdk/objc/native/api/objc_audio_device_module.h
+++ b/sdk/objc/native/api/objc_audio_device_module.h
@@ -11,8 +11,8 @@
 #ifndef SDK_OBJC_NATIVE_API_OBJC_AUDIO_DEVICE_MODULE_H_
 #define SDK_OBJC_NATIVE_API_OBJC_AUDIO_DEVICE_MODULE_H_
 
+#include "api/audio/audio_device.h"
 #import "components/audio/RTCAudioDevice.h"
-#include "modules/audio_device/include/audio_device.h"
 
 namespace webrtc {
 
diff --git a/sdk/objc/native/src/audio/audio_device_module_ios.h b/sdk/objc/native/src/audio/audio_device_module_ios.h
index 189d7e6..f4487a5 100644
--- a/sdk/objc/native/src/audio/audio_device_module_ios.h
+++ b/sdk/objc/native/src/audio/audio_device_module_ios.h
@@ -13,10 +13,10 @@
 
 #include <memory>
 
+#include "api/audio/audio_device.h"
 #include "api/task_queue/task_queue_factory.h"
 #include "audio_device_ios.h"
 #include "modules/audio_device/audio_device_buffer.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "rtc_base/checks.h"
 
 namespace webrtc {
diff --git a/sdk/objc/native/src/objc_audio_device.h b/sdk/objc/native/src/objc_audio_device.h
index fcfe7a6..a9c1ae9 100644
--- a/sdk/objc/native/src/objc_audio_device.h
+++ b/sdk/objc/native/src/objc_audio_device.h
@@ -15,8 +15,8 @@
 
 #import "components/audio/RTCAudioDevice.h"
 
+#include "api/audio/audio_device.h"
 #include "modules/audio_device/audio_device_buffer.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "rtc_base/thread.h"
 
 @class ObjCAudioDeviceDelegate;
diff --git a/sdk/objc/unittests/RTCPeerConnectionFactoryBuilderTest.mm b/sdk/objc/unittests/RTCPeerConnectionFactoryBuilderTest.mm
index 83dc38e..807c550 100644
--- a/sdk/objc/unittests/RTCPeerConnectionFactoryBuilderTest.mm
+++ b/sdk/objc/unittests/RTCPeerConnectionFactoryBuilderTest.mm
@@ -21,12 +21,12 @@
 #import "api/peerconnection/RTCPeerConnectionFactoryBuilder+DefaultComponents.h"
 #import "api/peerconnection/RTCPeerConnectionFactoryBuilder.h"
 
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
 #include "api/audio_codecs/builtin_audio_encoder_factory.h"
 #include "api/video_codecs/video_decoder_factory.h"
 #include "api/video_codecs/video_encoder_factory.h"
-#include "modules/audio_device/include/audio_device.h"
 
 #include "rtc_base/gunit.h"
 #include "rtc_base/system/unused.h"
diff --git a/test/BUILD.gn b/test/BUILD.gn
index 26ada7f..d1554d7 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -1270,6 +1270,7 @@
       "../api:rtp_parameters",
       "../api:simulated_network_api",
       "../api:transport_api",
+      "../api/audio:audio_device",
       "../api/audio_codecs:builtin_audio_decoder_factory",
       "../api/audio_codecs:builtin_audio_encoder_factory",
       "../api/environment",
@@ -1289,7 +1290,6 @@
       "../call:simulated_network",
       "../call:simulated_packet_receiver",
       "../call:video_stream_api",
-      "../modules/audio_device:audio_device_api",
       "../modules/audio_device:test_audio_device_module",
       "../modules/audio_mixer:audio_mixer_impl",
       "../modules/rtp_rtcp",
diff --git a/test/call_test.cc b/test/call_test.cc
index b3a7e73..cb2c0f0 100644
--- a/test/call_test.cc
+++ b/test/call_test.cc
@@ -13,6 +13,7 @@
 #include <algorithm>
 #include <memory>
 
+#include "api/audio/audio_device.h"
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
 #include "api/audio_codecs/builtin_audio_encoder_factory.h"
 #include "api/environment/environment.h"
@@ -23,7 +24,6 @@
 #include "call/fake_network_pipe.h"
 #include "call/packet_receiver.h"
 #include "call/simulated_network.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "modules/audio_device/include/test_audio_device.h"
 #include "modules/audio_mixer/audio_mixer_impl.h"
 #include "rtc_base/checks.h"
diff --git a/test/call_test.h b/test/call_test.h
index decf02f..46ea7f7 100644
--- a/test/call_test.h
+++ b/test/call_test.h
@@ -17,6 +17,7 @@
 
 #include "absl/types/optional.h"
 #include "api/array_view.h"
+#include "api/audio/audio_device.h"
 #include "api/environment/environment.h"
 #include "api/rtc_event_log/rtc_event_log.h"
 #include "api/task_queue/task_queue_base.h"
@@ -27,7 +28,6 @@
 #include "api/units/time_delta.h"
 #include "api/video/video_bitrate_allocator_factory.h"
 #include "call/call.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "modules/audio_device/include/test_audio_device.h"
 #include "test/encoder_settings.h"
 #include "test/fake_decoder.h"
diff --git a/test/scenario/BUILD.gn b/test/scenario/BUILD.gn
index 8d85f6e..33bd3d8 100644
--- a/test/scenario/BUILD.gn
+++ b/test/scenario/BUILD.gn
@@ -87,6 +87,7 @@
       "../../api:sequence_checker",
       "../../api:time_controller",
       "../../api:transport_api",
+      "../../api/audio:audio_device",
       "../../api/audio_codecs:builtin_audio_decoder_factory",
       "../../api/audio_codecs:builtin_audio_encoder_factory",
       "../../api/environment",
diff --git a/test/scenario/call_client.h b/test/scenario/call_client.h
index f3c483e..c5f5581 100644
--- a/test/scenario/call_client.h
+++ b/test/scenario/call_client.h
@@ -17,13 +17,13 @@
 #include <vector>
 
 #include "api/array_view.h"
+#include "api/audio/audio_device.h"
 #include "api/environment/environment.h"
 #include "api/rtc_event_log/rtc_event_log.h"
 #include "api/rtp_parameters.h"
 #include "api/test/time_controller.h"
 #include "api/units/data_rate.h"
 #include "call/call.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "modules/congestion_controller/goog_cc/test/goog_cc_printer.h"
 #include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
 #include "rtc_base/task_queue_for_test.h"
diff --git a/video/BUILD.gn b/video/BUILD.gn
index cf724b7..2f25d3a 100644
--- a/video/BUILD.gn
+++ b/video/BUILD.gn
@@ -520,6 +520,7 @@
         "../api:rtc_event_log_output_file",
         "../api:test_dependency_factory",
         "../api:video_quality_test_fixture_api",
+        "../api/audio:audio_device",
         "../api/environment",
         "../api/numerics",
         "../api/rtc_event_log:rtc_event_log_factory",
@@ -539,7 +540,6 @@
         "../media:rtc_audio_video",
         "../media:rtc_internal_video_codecs",
         "../media:rtc_simulcast_encoder_adapter",
-        "../modules/audio_device:audio_device_api",
         "../modules/audio_device:audio_device_module_from_input_and_output",
         "../modules/audio_device:windows_core_audio_utility",
         "../modules/audio_mixer:audio_mixer_impl",
diff --git a/video/video_quality_test.cc b/video/video_quality_test.cc
index 28bdca9..995fada 100644
--- a/video/video_quality_test.cc
+++ b/video/video_quality_test.cc
@@ -22,6 +22,7 @@
 #include <string>
 #include <vector>
 
+#include "api/audio/audio_device.h"
 #include "api/fec_controller_override.h"
 #include "api/rtc_event_log_output_file.h"
 #include "api/task_queue/default_task_queue_factory.h"
@@ -37,7 +38,6 @@
 #include "media/engine/internal_encoder_factory.h"
 #include "media/engine/simulcast_encoder_adapter.h"
 #include "media/engine/webrtc_video_engine.h"
-#include "modules/audio_device/include/audio_device.h"
 #include "modules/audio_mixer/audio_mixer_impl.h"
 #include "modules/video_coding/codecs/h264/include/h264.h"
 #include "modules/video_coding/codecs/vp8/include/vp8.h"
diff --git a/webrtc_lib_link_test.cc b/webrtc_lib_link_test.cc
index 0148a54..e3a7a7b 100644
--- a/webrtc_lib_link_test.cc
+++ b/webrtc_lib_link_test.cc
@@ -8,6 +8,7 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/audio_decoder_factory_template.h"
 #include "api/audio_codecs/audio_encoder_factory_template.h"
@@ -29,7 +30,6 @@
 #include "api/video_codecs/video_encoder_factory_template_libvpx_vp8_adapter.h"
 #include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h"
 #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h"
-#include "modules/audio_device/include/audio_device.h"
 
 namespace webrtc {