这个其实就是从Audio_processing.h中拿出来的。
APM should be placed in the signal chain as close to the audio hardware abstraction layer (HAL) as possible.
APM accepts only 16-bit linear PCM audio data in frames of 10 ms.Multiple channels should be interleaved.
Audio Processing instantiation and configuration:    
AudioProcessing * apm = AudioProcessing :: Create (0);
apm-> level_estimator () -> Enable (true); // Enable retries estimation component
apm-> echo_cancellation () -> Enable (true); // Enable echo cancellation module
apm-> echo_cancellation () -> enable_metrics (true); //
apm-> echo_cancellation () -> enable_drift_compensation (true); // Enable clock compensation module (sound capture device clock frequency clock frequency and playback devices may be different)
apm-> gain_control () -> Enable (true); // Enable gain control module, client must enable Oh!
apm-> high_pass_filter () -> Enable (true); // high-pass filter components, DC offset and low frequency noise filtering, client must be enabled
apm-> noise_suppression () -> Enable (true); // noise suppression components, client must be enabled
apm-> voice_detection () -> Enable (true); // enable voice detection component, to detect whether there voices
apm-> voice_detection () -> set_likelihood (VoiceDetection :: kModerateLikelihood); // Set the voice detection threshold, the threshold bigger voice less likely to be ignored, some noise may be treated the same voice.
apm-> Initialize (); // Reserved internal state set by the user in all cases of re-initialization apm, to start processing a new audio stream. After creating the first stream does not necessarily need to call this method.
2.AudioProcessing workflow:
AudioProcessing is event-driven, event into the Initialize event, capturing audio event, rendering the audio event.
 
Initialize event:
apm-> set_sample_rate_hz (sample_rate_hz); // set the sample rate of local and remote audio stream
apm-> echo_cancellation () -> set_device_sample_rate_hz (); // set the sample rate audio equipment, we assume that the audio capture and playback device using the same sampling rate. (Must be called when the drift component is enabled)
apm-> set_num_channels (num_capture_input_channels, num_capture_output_channels);
// set the local and remote audio stream of the number of channels
 
Play event:
apm-> AnalyzeReverseStream (& far_frame)); // analysis of 10ms frame data far end of the audio stream, these data provide a reference for echo suppression. (Enable echo suppression when calling needs)
 
Capture events:
apm-> gain_control () -> set_stream_analog_level (capture_level);
apm-> set_stream_delay_ms (delay_ms + extra_delay_ms); // set the delay in milliseconds between local and remote audio streams of. This delay is the time difference and the distal end of the audio stream between the local audio streams, calculated as:
delay = (t_render – t_analyze) + (t_process – t_capture) ;
Among them
t_analyze end audio stream is time to AnalyzeReverseStream () method;
t_render is just similar to the distal end of the audio frame playback time;
t_capture local audio capture time frame;
t_process is the same time frame was given to local audio ProcessStream () method.
 apm-> echo_cancellation () -> set_stream_drift_samples (drift_samples); // Set the difference between the audio device to capture and playback sampling rate. (Must be called when the drift component is enabled)
int err = apm-> ProcessStream (& near_frame); // processing audio streams, including all aspects of the deal. (Such as gain adjustment, echo cancellation, noise suppression, voice activity detection, high throughput rate without decoding Oh! Do for pcm data processing)
capture_level = apm-> gain_control () -> stream_analog_level (); // under emulation mode, you must call this method after ProcessStream, get the recommended analog value of new audio HAL.
stream_has_voice = apm-> voice_detection () -> stream_has_voice (); // detect whether there is a voice, you must call this method after ProcessStream
ns_speech_prob = apm-> noise_suppression () -> speech_probability (); // returns the internal voice priority calculated the probability of the current frame.
 
3.AudioProcessing release
AudioProcessing :: Destroy (apm);
apm = NULL;
另一个示例
AudioProcessing* apm = AudioProcessing::Create(0);
apm->set_sample_rate_hz(32000);
Super-wideband processing.
// Mono capture and stereo render.
apm->set_num_channels(1, 1);
apm->set_num_reverse_channels(2);
apm->high_pass_filter()->Enable(true);
apm->echo_cancellation()->enable_drift_compensation(false);
apm->echo_cancellation()->Enable(true);
apm->noise_reduction()->set_level(kHighSuppression);
apm->noise_reduction()->Enable(true);
apm->gain_control()->set_analog_level_limits(0, 255);
apm->gain_control()->set_mode(kAdaptiveAnalog);
apm->gain_control()->Enable(true);
apm->voice_detection()->Enable(true);
// Start a voice call...
// ... Render frame arrives bound for the audio HAL ...
apm->AnalyzeReverseStream(render_frame);
// ... Capture frame arrives from the audio HAL ...
// Call required set_stream_ functions.
apm->set_stream_delay_ms(delay_ms);
apm->gain_control()->set_stream_analog_level(analog_level);
apm->ProcessStream(capture_frame);
// Call required stream_ functions.
analog_level = apm->gain_control()->stream_analog_level();
has_voice = apm->stream_has_voice();
// Repeate render and capture processing for the duration of the call...
// Start a new call...
apm->Initialize();
// Close the application...
AudioProcessing::Destroy(apm);
apm = NULL;
参考:
http://www.rosoo.net/a/201504/17270.html webrtc 的回声抵消(aec、aecm)算法简介
http://blog.csdn.net/liulina603/article/details/21019915?locationNum=5&fps=1 DemuxAndMix() 这个函数,主要负责AudioProcess的所有过程,包括Aec,Aecm,AGC

webrtc中APM(AudioProcessing module)的使用2的更多相关文章

  1. webrtc中APM(AudioProcessing module)的使用

    一,实例化和配置 AudioProcessing* apm = AudioProcessing::Create(0); //这里的0指的是channelID,只是一个标注那个通道的表示 apm-> ...

  2. android studio 中移除module和恢复module

    一.移除Android Studio中module 在Android Studio中想要删除某个module时,在Android Studio中选中module,右键发现没有delete,如图: An ...

  3. Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析

    本文主要介绍WebRTC中丢包重传NACK的实现,作者:weizhenwei ,文章最早发表在编风网,微信ID:befoio 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID ...

  4. Android IOS WebRTC 音视频开发总结(八十六)-- WebRTC中RTP/RTCP协议实现分析

    本文主要介绍WebRTC中的RTP/RTCP协议,作者:weizhenwei ,文章最早发表在编风网,微信ID:befoio 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID ...

  5. webrtc中的带宽自适应算法

    转自:http://www.xuebuyuan.com/1248366.html webrtc中的带宽自适应算法分为两种: 1, 发端带宽控制, 原理是由rtcp中的丢包统计来动态的增加或减少带宽,在 ...

  6. Node.js中exports,module.exports以及require方法

    在Node.js中,使用module.exports.f = ...与使用exports.f = ...是一样的,此时exports就是module.exports的一种简写方式.但是,需要注意的是, ...

  7. WebRTC中的NetEQ

    NetEQ使得WebRTC语音引擎能够快速且高解析度地适应不断变化的网络环境,确保了音质优美且缓冲延迟最小,其集成了自适应抖动控制以及丢包隐藏算法. WebRTC和NetEQ概述 WebRTC Web ...

  8. [转载]Pytorch中nn.Linear module的理解

    [转载]Pytorch中nn.Linear module的理解 本文转载并援引全文纯粹是为了构建和分类自己的知识,方便自己未来的查找,没啥其他意思. 这个模块要实现的公式是:y=xAT+*b 来源:h ...

  9. ULPFEC在WebRTC中的实现[转载]

    一.WebRTC对抗网络丢包的两种手段     丢包重传(NACK)和前向纠错(FEC).FEC是一种前向纠错技术,发送端将负载数据加上一定的冗余纠错码一起发送,接收端根据接收到的纠错码对数据进行差错 ...

随机推荐

  1. thinkphp如何一次性的上传多个文件,在文件域中可以多选?

    可以做到类似于某度网盘的样式吗? 文件夹的命名, 可以用单数, 也可以用复数, 在同一个项目中, 只要统一就好了. 毕竟项目开发不同于英语写作. 建议使用缩写, 不管是不是缩写都用单数, 这样简洁,容 ...

  2. 3. web前端开发分享-css,js提高篇

    一. css基础知识掌握之后(个人的标准是:弄清块元素与内联元素的区别,弄清float的应用场景,弄清position[pə'zɪʃən] 下五个属性static['stætɪk],relative[ ...

  3. 蒙特卡洛模拟入门的几个小例子(R语言实现)

    嗯,第一个例子是怎么用蒙特卡洛模拟求pi的值:第二个是用蒙特卡洛模拟求解定积分:第三个是用蒙特卡洛模拟证券市场求解其收益:第四个是用蒙特卡洛模拟验证OLS的参数的无偏性:然后还要R是如何求导,计算导数 ...

  4. prototype,__proto__,constructor

    proto属性: 所有对象都有此属性.但它不是规范里定义的属性,并不是所有JavaScript运行环境都支持.它指向对象的原型,也就是你说的继承链里的原型.通过Object.getPrototypeO ...

  5. c++ 接口和抽象类

    其实对抽象类与接口的区别一直是搞不太清楚,最近正在学习<设计模式>,期间用到了很多c++多态的知识.这是才恍然发现,是应该整理下这方面的知识了.但在翻阅书本.上网查阅资料之际,发现有篇文章 ...

  6. vim的编译安装及其插件YouCompleteMe安装

    相关的环境: win 7 x64 vs2013 community python 2.7.10 AMD64 python 3.5 AMD64 LLVM 3.5 cmake 3.5   YouCompl ...

  7. Web获取客户端物理MAC地址(ocx插件)

    主要是通过ActiveX控件 从本地获取到MAC地址,传入到浏览器打开的网页中,再提交到服务器. 具体详解与步骤看文档中: 文件实例包下载 DotNetFX 文件夹附件文件:(可能安装时需用) dot ...

  8. Mantis搭建步骤

    (1)安装EeasyPHP (2)解压Mantis到EeasyPHP内www目录下 (3)将PHP复制到www目录下 并修改apache下httpd.conf及php.ini两个文件的php配置目录 ...

  9. ElasticSearch详解与优化设计

    简介 概念 安装部署 ES安装 数据索引 索引优化 内存优化 1简介 ElasticSearch(简称ES)是一个分布式.Restful的搜索及分析服务器,设计用于分布式计算:能够达到实时搜索,稳定, ...

  10. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...