WEBRTC系列之AGC 算法原理初始(三)

Webrtc 系列文章:

WEBRTC系列之基于IOS平台编译WEBRTC(一)

WEBRTC系列之 AGC 算法原理初识(二)

1、 基本概念

1.1、 IOS平台自带AGC功能

    可以通过以下方法查看ios平台是否支持AGC和设置AGC(代码摘自webrtc):

//1. 创建Component,设置开启硬件音频处理
// Create an audio component description to identify the Voice Processing
  // I/O audio unit.
  AudioComponentDescription vpio_unit_description;
  vpio_unit_description.componentType = kAudioUnitType_Output;
  vpio_unit_description.componentSubType = kAudioUnitSubType_VoiceProcessingIO;//设置这个 sub type 后,会启用系统的 AEC, AGC, NS 等
  vpio_unit_description.componentManufacturer = kAudioUnitManufacturer_Apple;
  vpio_unit_description.componentFlags = 0;
  vpio_unit_description.componentFlagsMask = 0;

  // Obtain an audio unit instance given the description.
  AudioComponent found_vpio_unit_ref =
      AudioComponentFindNext(nullptr, &vpio_unit_description);

  // Create a Voice Processing IO audio unit.
  OSStatus result = noErr;
  result = AudioComponentInstanceNew(found_vpio_unit_ref, &vpio_unit_);
  if (result != noErr) {
    vpio_unit_ = nullptr;
    RTCLogError(@"AudioComponentInstanceNew failed. Error=%ld.", (long)result);
    return false;
  }


// 2. 查看是否支持AGC,webRTC中封装在GetAGCState方法中
UInt32 size = sizeof(*enabled);
  OSStatus result = AudioUnitGetProperty(vpio_unit_,
                                         kAUVoiceIOProperty_VoiceProcessingEnableAGC,
                                         kAudioUnitScope_Global,
                                         kInputBus,
                                         enabled,
                                         &size);
  RTCLog(@"VPIO unit AGC: %u", static_cast<unsigned int>(*enabled));

  // 设置开启AGC
    UInt32 enable_agc = 1;
    result =
        AudioUnitSetProperty(vpio_unit_,
                             kAUVoiceIOProperty_VoiceProcessingEnableAGC,
                             kAudioUnitScope_Global, kInputBus, &enable_agc,
                             sizeof(enable_agc));
    if (result != noErr) {
      RTCLogError(@"Failed to enable the built-in AGC. "
                   "Error=%ld.",
                  (long)result);
      RTC_HISTOGRAM_COUNTS_SPARSE_100000(
          "WebRTC.Audio.SetAGCStateErrorCode", (-1) * result);
    }

//3. 初始化AudioUnit
AudioUnitInitialize(vpio_unit_);

1.2、关键回调接口分析

    在直播录制中比较关键的一步就是Render Callback Function(webrtc中对应设置的方法为OnDeliverRecordedData)。AudioUnit每次都是处理一段音频数据,每次处理完成一段数据的时候,这个回调函数就会被调用一次。 代码摘自webrtc:

/ Disable AU buffer allocation for the recorder, we allocate our own.
  // TODO(henrika): not sure that it actually saves resource to make this call.
  UInt32 flag = 0;
  result = AudioUnitSetProperty(
      vpio_unit_, kAudioUnitProperty_ShouldAllocateBuffer,
      kAudioUnitScope_Output, kInputBus, &flag, sizeof(flag));
  if (result != noErr) {
    DisposeAudioUnit();
    RTCLogError(@"Failed to disable buffer allocation on the input bus. "
                 "Error=%ld.&
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebRTC AGC(自适应增益控制)算法是一种音频信号处理算法,用于调节音频输入信号的增益水平,以在通信中实现更好的音质和更高的语音识别准确度。 AGC算法通过监测音频输入信号的强度,并自动调整增益水平,以确保输出信号保持在可接受的范围内,避免声音过高或过低。这种自适应调节可以使通话中的语音更加清晰和稳定,而不会因为某一方的声音过弱或过强而听不清。另外,AGC算法还可以提供麦克风阵列的噪音抑制功能,减少环境噪音对通信质量的影响。 AGC算法的核心思想是根据音频输入信号的能量级别,动态调整增益水平。当输入信号较弱时,AGC会增加增益,以增强信号的强度。而当输入信号较强时,AGC会减小增益,以避免声音失真。这种自动调整可以根据通话环境中的变化进行实时优化,提供更好的音频体验。 WebRTC AGC算法的应用范围广泛,例如语音通信、视频会议、语音识别等领域,都可以受益于AGC算法的应用。通过实时优化音频输入信号的增益,AGC可以提供更好的通话质量和语音识别准确度,提升用户体验并提高通信效率。 总而言之,WebRTC AGC算法是一种音频信号处理算法,通过自适应调整音频输入信号的增益水平,提供清晰稳定的通话音质和更高的语音识别准确度。它在现代通信中发挥重要作用,为用户提供了更好的音频体验和通信效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值