zoukankan      html  css  js  c++  java
  • webrtc中AGC的应用

    webrtc--AudioProcessing的使用

    1.AudioProcessing的实例化和配置:

    AudioProcessing* apm = AudioProcessing::Create(0);

    apm->level_estimator()->Enable(true);//启用重试次数估计组件

    apm->echo_cancellation()->Enable(true);//启用回声消除组件

    apm->echo_cancellation()->enable_metrics(true);//

    apm->echo_cancellation()->enable_drift_compensation(true);//启用时钟补偿模块(声音捕捉设备的时钟频率和播放设备的时钟频率可能不一样)

    apm->gain_control()->Enable(true);//启用增益控制组件,client必须启用哦!

    apm->high_pass_filter()->Enable(true);//高通过滤器组件,过滤DC偏移和低频噪音,client必须启用

    apm->noise_suppression()->Enable(true);//噪声抑制组件,client必须启用

    apm->voice_detection()->Enable(true);//启用语音检测组件,检测是否有说话声

    apm->voice_detection()->set_likelihood( VoiceDetection::kModerateLikelihood);//设置语音检测的阀值,阀值越大,语音越不容易被忽略,同样一些噪音可能被当成语音。

    apm->Initialize();//保留所有用户设置的情况下重新初始化apm的内部状态,用于开始处理一个新的音频流。第一个流创建之后不一定需要调用此方法。

    2.AudioProcessing的工作流程:

    AudioProcessing也是事件驱动的,事件分为初始化事件、捕捉音频事件、渲染音频事件。

    初始化事件:

    apm->set_sample_rate_hz(sample_rate_hz);//设置本地和远程音频流的采样率

    apm->echo_cancellation()->set_device_sample_rate_hz();//设置音频设备的采样率,我们假定音频采集和播放设备采用同样的采样率。(drift组件启用时必须调用)

    apm->set_num_channels(num_capture_input_channels, num_capture_output_channels);//设置本地和远程音频流的通道数

    播放事件:

    apm->AnalyzeReverseStream(&far_frame));//分析远端音频流的10ms的frame数据,这些数据为回声抑制提供参考。(启用回声抑制的时候需要调用)

    捕捉事件:

    apm->gain_control()->set_stream_analog_level(capture_level);

    apm->set_stream_delay_ms(delay_ms + extra_delay_ms);//设置本地和远端音频流之间的延迟,单位毫秒。这个延迟是远端音频流和本地音频流之间的时差,计算方法为:

    delay = (t_render - t_analyze) + (t_process - t_capture);

    其中

    t_analyze是远端音频流交给AnalyzeReverseStream()方法的时间;

    t_render是与刚才同样的远端音频frame的播放时间;

    t_capture是本地音频frame捕捉的时间;

    t_process是同样的本地音频frame被交给ProcessStream()方法的时间。

    apm->echo_cancellation()->set_stream_drift_samples(drift_samples);//设置音频设备捕捉和播放的采样率的差值。(drift组件启用时必须调用)

    int err = apm->ProcessStream(&near_frame);//处理音频流,包括各个环节的处理。(如增益调节、回声消除、噪声抑制、语音检测、高通过率等,没有解码哦!是针对pcm数据做处理的)

    capture_level = apm->gain_control()->stream_analog_level();//模拟模式下,必须在ProcessStream之后调用此方法,获取新的音频HAL的推荐模拟值。这个麦克风音量值可以设置用来调节本地麦克风音量值

    stream_has_voice =apm->voice_detection()->stream_has_voice();//检测是否有语音,必须在ProcessStream之后调用此方法

    ns_speech_prob = apm->noise_suppression()->speech_probability();//返回内部计算出的当前frame的人声优先概率。

    3.AudioProcessing 的释放

    AudioProcessing::Destroy(apm);
    apm = NULL;

    更多参考:

    Webrtc AGC 算法原理介绍(二)

    WEBRTC中AGC模块分析(上)

    WebRTC中AGC模块分析(下)

    webrtc--AudioProcessing的使用

    Webrtc AGC 算法原理初识一

    Webrtc AGC 算法二

    WebRTC AudioProcessing 3A: AEC AGC ANC 初探

    WebRTC 音频AGC/AEC/NS各平台设置源码分析

  • 相关阅读:
    在线jq库
    解决python3.6的UnicodeEncodeError: 'gbk' codec can't encode character 'xbb' in position 28613: illegal multibyte sequence
    PHP后台支付的开发:微信支付和支付宝支付
    PHP操控Excel视频教程
    微信h5静默、非静默授权获取用户openId的方法和步骤
    OAuth2.0微信网页授权登录
    微信第三方登录 -- (PC端+移动端)
    web字体规范
    移动端字体设置
    在 Web 内容中使用系统字体
  • 原文地址:https://www.cnblogs.com/ZY-Dream/p/13125731.html
Copyright © 2011-2022 走看看