2013-10-30 23 views
0

두 개의 WebRtcAecm 함수를 올바르게 사용하는 방법을 이해하려고합니다. 모바일에서 에코 제거에 사용되는 두 가지 주요 기능이있는 것 같습니다.WebRtcAecm 함수를 사용하는 적절한 방법

첫 번째 WebRtcAecm_BufferFarend이다

int32_t WebRtcAecm_BufferFarend(void* aecmInst, 
          const int16_t* farend, 
          int16_t nrOfSamples); 

I는 우리가 원격 단부에서 수신 된 오디오 데이터를 전달하는 곳을 추측한다. 오디오 패킷을 계속 수신하면서이 방법을 계속 호출합니까? 또한이 함수는 전달 된 버퍼의 사본을 만들어 다음 패킷에 대해 동일한 버퍼를 재사용 할 수 있습니까?

다른 기능은 WebRtcAecm_Process입니다 : 인터넷에서 코드 조각에서

int32_t WebRtcAecm_Process(void* aecmInst, 
         const int16_t* nearendNoisy, 
         const int16_t* nearendClean, 
         int16_t* out, 
         int16_t nrOfSamples, 
         int16_t msInSndCardBuf); 

, 나는 같은 포인터가 nearendNoisy 및 nearendClean에 사용되는 것을 보았다. 잡음 제거를하지 않으면 nearendClean 매개 변수가 null이 아니어야합니까?

마지막으로 두 개의 다른 스레드에서이 두 메서드를 호출 할 때 문제가 있습니까? 우리의 원격 오디오 수신기 코드는 하나의 스레드에 있고 우리의 마이크 수신기 코드는 다른 스레드에 있습니다.

도움을 주셔서 감사합니다.

답변

0

project은 github에 게시되어있어이 함수를 호출하는 방법을 정확하게 보여줍니다.

nearendClean은 실제로 NULL로 설정할 수 있으며 항상 NULL로 설정합니다. '내 NS는 AECM 처리 후입니다.

홀프 나는 도왔습니다.

+0

고맙습니다. 귀하의 코드는 매우 도움이되었습니다. 문안 인사. – Peter

+0

안녕하세요. 나는 당신의 모범을 실행했고 그 결과물은 새로운 파일이었다. 그러나 내가 연주했을 때 아무런 소리도 들리지 않았습니다 (심지어 입력 파일에서 인간의 목소리까지). 나 좀 도와 줄 수있어? 감사. – Spinning

+0

@Spinning 안녕하세요, 나는 nearend 및 farend 신호와 동일한 PCM 오디오를 사용하고 지연을 10ms로 설정 했으므로 이상적인 출력은 전혀 들리지 않습니다. BTW, AECM (심지어 APM)으로 프로그램을 최적화하는 데 오랜 시간이 걸린 후에도 실시간 VoIP 전화에서 100 % 완벽하게 작동하지 못합니다. 따라서 AECM을 사용하려면 피드백을 준비하십시오. 더 많은 정보. [google aecm issues] (https://code.google.com/p/webrtc/issues/list?can=2&q=aecm&colspec=ID+Pri+Mstone+ReleaseBlock+Area+Status+Owner+Summary&x=)에서 찾을 수 있습니다. mstone & y = 소유자 & 셀 = 타일) – BillHoo