webrtc--AudioProcessing的使用

1.AudioProcessing的實例化和配置:    事件

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

 

apm->level_estimator()->Enable(true);//啓用重試次數估計組件工作流

apm->echo_cancellation()->Enable(true);//啓用回聲消除組件it

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

apm->echo_cancellation()->enable_drift_compensation(true);//啓用時鐘補償模塊(聲音捕捉設備的時鐘頻率和播放設備的時鐘頻率可能不同)stream

apm->gain_control()->Enable(true);//啓用增益控制組件,client必須啓用哦!音頻

apm->high_pass_filter()->Enable(true);//高經過濾器組件,過濾DC偏移和低頻噪音,client必須啓用cli

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;

相關文章
相關標籤/搜索