본문 바로가기

WebRTC

webRTC aec3 pipline

audioproc_f.exe

 

rtc_tools/audioproc_f/audioproc_float_main.cc //main

 

api/test/audioproc_float.h //안쪽의 껍데기

 

modules/audio_processing/test/audioproc_float_impl.h //실제 테스트 툴 코드

 

이 안에서 input output 외부로 부터 전달 받고 RunSimulation()에서

 

modules/audio_processing/test/audio_processing_simulator.h 을 기반으로 만들어진

 

modules/audio_processing/test/aec_dump_based_simulator.h 

OR

modules/audio_processing/test/wav_based_simulator.h

 

simulator 클래스의 *_based_simulator의 Process()와 기반인 audio_processing_simulator의 ProcessStream()을 통해 modules/audio_processing/ 안에 있는 aec3, agc, vad 등등 동작함.

 

simulator에서 다시 audio_processing_impl의 ProcessStream() -> ProcessCaptureStreamLocked()에서 submodules_.echo_controller->AnalyzeCapture() -> ProcessCaptureStreamLocked() 

 

항상 aec는 16000hz sample rate로 동작함.

 

ProcessCaptureStreamLocked() 에서 echo_path_gain_change가 되었는지 bool값으로 알아낸 후

echo_controller->ProcessCapture()를 한다.

 

modules/audio_processing/aec3/echo_canceller3.cc

 

EchoCanceller3::ProcessCapture() -> ProcessCaptureFrameContent() 가 호출 되고

 

Frame_blocker에서 capture block을 추출 해 // 추정

block_processor->ProcessCapture() 를 진행한다.

 

 

aec3_common.h 에서 kBlockSize = kFFTLengthBy2 = 256; 으로 설정하면

echo_remover -> ProcessCapture() 부분에서 x ,y 를 받아오는 부분이 있고 이부분에서 256개씩 받아올 것이다.

 

그다음 echo_remover에 overlap을 시킬수 있는 것을 만들고

istft 를 해주는 것을 돌려 

 

float 형태의 output을 출력해면 될 것이다.

 

aec 부분은 빼고 fft -> overlap -> ifft -> overlap -> bypass 되는지 확인 해보면 수월할듯.

'WebRTC' 카테고리의 다른 글

SoX 명령어 cheat sheet  (0) 2020.07.22
aec_dump 관련 내용  (0) 2020.07.16
chromium echo cancellation 테스트  (0) 2020.06.05
chromium 빌드하기  (0) 2020.06.03
OverView  (0) 2020.06.03