webrtc中AudioProcessing的使用

2021-07-02 05:49:31 字數 2078 閱讀 3980

1.audioprocessing的例項化和配置:

audioprocessing* apm = audioprocessing::create(0);

apm->level_estimator()->enable(true);//啟用重試次數估計元件

apm->echo_cancellation()->enable(true);//啟用回聲消除元件

apm->echo_cancellation()->enable_metrics(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->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_capture是本地音訊frame捕捉的時間;

t_process是同樣的本地音訊frame被交給processstream()方法的時間。

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 中的頻寬偵測

pacing bitrate 為allocated bitrate bps 1000 kdefaultpacemultiplier,這裡的kdefaultpacemultiplier 2.5 void pacedsender setallocatedsendbitrate int allocated...

移植WebRTC中的VAD

原始碼中vad include vad.h webrtc vad.h mock mock vad.h vad.cc vad core.c vad core.h vad core unittest.cc vad filterbank.c vad filterbank.h vad filterbank ...

webrtc中AGC的應用

webrtc audioprocessing的使用 1.audioprocessing的例項化和配置 audioprocessing apm audioprocessing create 0 apm level estimator enable true 啟用重試次數估計元件 apm echo ca...