为什么要设置通道个数?
告诉系统输出设备的使用通道个数,假如扬声器是4声道,设置通道个数为2,则会有2个声道没有声音。
立体声还是单声道?
源码分析
H:\webrtc-20210315\webrtc-20210315\webrtc\webrtc-checkout\src\media\engine\adm_helpers.cc
void Init(AudioDeviceModule* adm) 方法
webrtc::adm_helpers::Init
void Init(AudioDeviceModule* adm) {**// Set number of channelsbool available = false;if (adm->StereoPlayoutIsAvailable(&available) != 0) {RTC_LOG(LS_ERROR) << "Failed to query stereo playout.";}if (adm->SetStereoPlayout(available) != 0) {RTC_LOG(LS_ERROR) << "Failed to set stereo playout mode.";}***}adm->StereoPlayoutIsAvailable(&available)->int32_t AudioDeviceModuleImpl::StereoRecordingIsAvailable(bool* available) const {**bool isAvailable = false;if (audio_device_->StereoRecordingIsAvailable(isAvailable) == -1) {return -1;}*available = isAvailable;***==}->int32_t AudioDeviceWindowsCore::StereoRecordingIsAvailable(bool& available) {available = true;return 0;}
adm->SetStereoPlayout(available)
AudioDeviceModuleImpl::SetStereoPlayout
int32_t AudioDeviceModuleImpl::SetStereoPlayout(bool enable) {RTC_LOG(INFO) << __FUNCTION__ << "(" << enable << ")";CHECKinitialized_();// 上节课的 AudioDeviceWindowsCore::InitSpeakerLocked成功后,该函数就会返回true// 主要返回的是_speakerIsInitialized变量值if (audio_device_->PlayoutIsInitialized()) {RTC_LOG(LERROR)<< "unable to set stereo mode while playing side is initialized";return -1;}if (audio_device_->SetStereoPlayout(enable)) {RTC_LOG(WARNING) << "stereo playout is not supported";return -1;}int8_t nChannels(1);if (enable) {nChannels = 2;}// buffer会根据通道的数量来计算大小audio_device_buffer_.SetPlayoutChannels(nChannels);return 0;}
audiodevice->SetStereoPlayout(enable),enable正常是true
int32_t AudioDeviceWindowsCore::SetStereoPlayout(bool enable) {MutexLock lock(&mutex_);if (enable) {_playChannelsPrioList[0] = 2; // try stereo first_playChannelsPrioList[1] = 1;_playChannels = 2;} else {_playChannelsPrioList[0] = 1; // try mono first_playChannelsPrioList[1] = 2;_playChannels = 1;}return 0;}
