audio_device模块的目录结构如下:
- include 文件夹是该工程的库包含导出文件;
- android、ios、linux、mac、win文件夹分别对应于相应操作系统,该部分主要完成音频的录音和播放处理,部分设备也会进行混音处理; 下面以windows系统为例做主要的介绍:
2.1. audio_device_core_win(.cc/h)和audio_device_wave_win(.cc/h),这两个模块的功能相同,都主要用于设备的控制管理,如设备的选择、开始录音、停止录音、开始播放、停止播放、麦克风静音等相关操作的实现;
不同的是audio_device_core_win直接通过com接口操作音频系统底层;而audio_device_wave_win是直接调用现成的SDK操作音频。 如果windows操作系统支持直接操作音频系统底层将会调用audio_device_core_win模块,否则调用audio_device_wave_win模块。如下面代码:
if (AudioDeviceWindowsCore::CoreAudioIsSupported())
{
// create *Windows Core Audio* implementation
ptrAudioDevice = new AudioDeviceWindowsCore(Id());
WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "Windows Core Audio APIs will be utilized");
}
else
{
// create *Windows Wave Audio* implementation
ptrAudioDevice = new AudioDeviceWindowsWave(Id());
if (ptrAudioDevice != NULL)
{
// Core Audio was not supported => revert to Windows Wave instead
_platformAudioLayer = kWindowsWaveAudio; // modify the state set at construction
WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "Windows Core Audio is *not* supported => Wave APIs will be utilized instead");
}
}
2.2,audio_device_utility_win(.cc/h),公用方法的文件,只有简单的几个函数,可以不太深究;
2.3 audio_mixer_manager_win(.cc/h),该模块主要用于数据的管理操作,以及音频的混音播放处理。
- dummy文件夹,是模拟设备的调用处理,里面没有什么实际源码;
- 上图能看到的“.cc”和“.h”是该模块的业务处理核心。
4.1 audio_device_buffer,音频的数据处理,捕获的音频的回调数据,需要播放的音频处理业务。
4.2 audio_device_config,配置处理,使用默认的即可。
4.3 audio_device_generic,通用模块,也就是该模块消除了设备的无关性,每个设备模块都会继承该模块, windows操作继承该模块的为 audio_device_core_win和audio_device_wave_win。
4.4 audio_device_impl,接口模块,外部使用的接口模块;
4.5 audio_device_utility,通用模块,主要提供通用的函数与定义。