Webratc AGCアルゴリズムの原理紹介(二)


音声アルゴリズム
はじめに
このシリーズはWebratcのagcアルゴリズムを紹介します.webratcのagcアルゴリズムは、様々な状況をより詳細に考慮し、かつ、一定の点数を使用した方法で実現されるので、内容が多い.このいくつかの文章の中でできるだけはっきりと述べます.
一、AGCの三つの流れ
関数
呼び出し
機能
Process Render Audio
遠端出力前
AGCのWebRtcAgc_を呼び出します.Add Farend
AnalyzerCapture Audio
近端高域フィルタ後
モードによって、可変アナログ(kAdaptive Analog)がWebRtcAgc_を呼び出します.AddMi,可変アナログ(kAdaptive Digital)呼び出しWebRtcAgc_Virtual Mic
ProcesCapture Audio
近端VAND後出力前
AGCのWebRtcAgc_を呼び出します.Process
この3つの流れはAGCの主要なインターフェースである.これら三つの流れを詳しく紹介します.
二、ProcessRender Audio
まずProcessRenderAudioを紹介します.この関数は遠端で呼び出されます.主な目的は遠端信号のVAND属性を分析することです.AGCのWebRtcAgc_を呼び出しました.Add Farend関数実はWebRtcAgc_AddFarend関数はパラメータのチェックをしただけで、最後にWebRtcAgc_を呼び出しました.Add Farend ToDigital、WebRtcAgc_Add Farend ToDigitalはWebRtcAgcに呼び出しました.ProcessVad
Created with Rapha l 2.10 Start Process RenderAudio(AudioBuffer*audio)WebRtcAgc_Add Farend(myuhandle,mixedca,static Coucast(audio-)samples uplit-uchannel))Check input WebRtcAgc_Add Farend ToDigital(&stt->digital Agc,&ingufar[i],subFraames)WebRtcAgc_ProcessVad(&stt->vadFarend,inufar,nrSamples)End
再Check inputの流れでは、以下のサンプルレートとフレーム長の入力データのみをサポートします.1、8 Kサンプルレート、10または20 msの長さデータ、subFramesは80です.2、16 Kサンプルレート、10または20 msの長さデータ、subFramesは160;3、32 Kサンプルレート、5または10 msの長さデータ、subFramesは160;WebRtcAgc_ProcessVadアルゴリズムは詳しくは次回に分解します.
三、AnalyzerCaptureAudio
AnalyzeCapturAudioフローは主に処理されていない音を分析するために用いられます.異なるモードに応じてデジタルの異なる処理が起動されます.流れは以下の通りです
Created with Rapha l 2.10 Start Analyze CapturAudio(AudioBuffer*audio)kAdaptive Analog(yes)or kAdaptive Digital(not)?WebRtcAgc_AddMi End WebRtcAgc_Virtual Mimiyes no
kFixedDigitalのAGCモードを選択した場合、AnalyzerCaptureAudioは機能しません.
四、Process Capture Audio
ProcesCapturAudioはAGCの重要な呼び出しWebRtcAgc_を含む処理の中核である.Process正常なパラメータ検出以外に音量調節に関する流れがあります.
//...
    int err = WebRtcAgc_Process(
        my_handle,
        audio->low_pass_split_data(i),
        audio->high_pass_split_data(i),
        static_cast(audio->samples_per_split_channel()),
        audio->low_pass_split_data(i),
        audio->high_pass_split_data(i),
        capture_levels_[i],
        &capture_level_out,
        apm_->echo_cancellation()->stream_has_echo(),
        &saturation_warning);
//...
    capture_levels_[i] = capture_level_out;
//...
  }
  if (mode_ == kAdaptiveAnalog) {
    // Take the analog level to be the average across the handles.
    analog_capture_level_ = 0;
    for (int i = 0; i < num_handles(); i++) {
      analog_capture_level_ += capture_levels_[i];
    }
    analog_capture_level_ /= num_handles();
  }
capture_levelsWebRtcAgc_を通じてですProcessで計算しました.その後のanlog_.capture_level_=capture_levels.同時にアナロゴマークcapture_levelAnalyzeCapturAudioに使われるWebRtcAgc_Virtual Micでは、設定音量として入力し、同時にcapture_を算出します.levels
Created with Rapha l 2.10 Start kAdaptive Analog(yes)or kAdaptive Digital(no)WebRtcAgc_Process input capture_levelsand out put anlogucapture_level.The capture_levelsis last anlog_capture_level End WebRtcAgc_Virtual Mic is inputted anlogucapture_leveland out put capture_levelsThe capture_levelsis not used.yes no
実はこの回ルートのmode制御は、デジタルモードを選択したら、WebRtcAgc_Virtual Micはanlog_を入力します.capture_level獲得したキャプチャーlevelsWebRtcAgc_に使いますProcessの入力ですが、WebRtcAgc_Process入力値はcapture_と書く.levels後は廃棄されました.シミュレーションモードを選択したらWebRtcAgc_を実行しません.Virtual Mic、それではWebRtcAgc_Process入力capture_levels,毎回更新して、結果をアナロゴグに保存します.capture_levelにあります.