WebRTC 音频处理流程(二) 预解复用部分

1、 上一篇文章已将大概流程图画出来,这一篇文章开始分析预解复用部分,就是算WebRTC核心音频处理算法实现部分。AGC 是自动增益补偿部分(Automatic Gain Control),AGC 可以自动调整麦克风的收音量,使得声音输出保持一定的音量水平,不会因为发声者与麦克风的距离改变时,声音忽大忽小。AEC、AECM是回声消除部分(Acoustic Echo Chancellor) ,AEC可以消除各种延迟的回声。AECM仅仅处理采样频率为8kHz与16kHz 频率的声音。这部分功能在整体流程图的位置是以为红色部分:

现在先注解这部分核心功能。主要接口调用代码位于Audio_process_impl.cc中。在开始注解之前,我们要先了解音频的基础。

音频基础知识

采样率: 音频采样率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然。在当今的主流采集卡上,采样频率一般共分为22.05KHz、44.1KHz、48KHz三个等级,22.05KHz只能达到FM广播的声音品质,44.1KHz则是理论上的CD音质界限,48KHz则更加精确一些。

采样通道   :即声音的通道的数目。常见的单声道和立体声(双声道)。

2、杂七杂八的看了两天代码, 看了编解码器在NetEQ 中才会用到,然后确定回头分析开始看ACE部分。

AudioProcessing::Create()    //new 各个模块处理的的对象

 new EchoCancellationImpl();

  new EchoControlMobileImpl();

        new GainControlImpl
();

        new HighPassFilterImpl();
 
        new LevelEstimatorImpl();

        new NoiseSuppressionImpl();
 
        new VoiceDetectionImpl();

        new GainControlForExperimentalAgc();
 

EchoCancellationImpl初始化中设置

      drift_compensation_enabled_(false)    //初始化中不使用时钟速率补偿模块
      metrics_enabled_(false),                 //不计算各种回声指标:包括远端、近段
      suppression_level_(kModerateSuppression),//初始化中设置噪声抑制等级kModerateSuppression
      stream_drift_samples_(0),                //时钟差异采样
      was_stream_drift_set_(false),             
      stream_has_echo_(false),              //
      delay_logging_enabled_(false),        //不使用延迟记录
      extended_filter_enabled_(false),      //不使用扩展滤波器
      delay_agnostic_enabled_(false),
      aec3_enabled_(false),                 //不适用  aec3
      render_queue_element_max_size_(0)     //播放队列max_size 为 0 

kSampleRate16kHz

   StreamConfig(int sample_rate_hz = 0,
               size_t num_channels = 0,
               bool has_keyboard = false)
      : sample_rate_hz_(sample_rate_hz),
        num_channels_(num_channels),
        has_keyboard_(has_keyboard),
        num_frames_(calculate_frames(sample_rate_hz)) {}   

初始化的值都是kSampleRate16kHz  16000 ,1,false  

近端采样率、远端采样率、近端声道数、远端声道数量的初始值都是1

  stream_properties_.reset(
      new StreamProperties(sample_rate_hz, num_reverse_channels,
                           num_output_channels, num_proc_channels));

sample_rate_hz  =  16000

num_reverse_channels = 1

num_output_channels = 1

num_proc_channels = 1

根据 num_reverse_channels  * num_output_channels    结果大小创建多少个 WebRtcAec 处理器, 

通过WebRtcAec_Create();  创建并且  WebRtcAec_Init ()进行初始化,至此enable完成初始化。


由于有很多入门的朋友需要,故花了点时间将 WebRTC回声消除模块代码分离,

支持windows操作系统, VS 2010 上调试、下载地址


WebRTC回声消除代码




  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值