簡體   English   中英

任何聲學回聲消除(AEC)庫能夠達到48 kHz?

[英]Any acoustic echo cancellation (AEC) library capable of 48 kHz?

我正在開發一個以48 kHz的采樣率運行的VoIP應用程序。 由於它使用內部使用48 kHz的Opus作為其編解碼器,而且目前大多數Android硬件本機運行頻率為48 kHz,因此AEC是我現在所缺少的唯一一個難題。 我已經找到了WebRTC實現,但我似乎無法弄清楚如何使其工作。 看起來它會隨機破壞內存並且遲早會崩潰整個事情。 當它沒有崩潰時,聲音有點粗糙,好像它對於幀的一半更安靜。 這是我處理20毫秒幀的代碼:

webrtc::SplittingFilter* splittingFilter;
webrtc::IFChannelBuffer* bufferIn;
webrtc::IFChannelBuffer* bufferOut;
webrtc::IFChannelBuffer* bufferOut2;
// ...
splittingFilter=new webrtc::SplittingFilter(1, 3, 960);
bufferIn=new webrtc::IFChannelBuffer(960, 1, 1);
bufferOut=new webrtc::IFChannelBuffer(960, 1, 3);
bufferOut2=new webrtc::IFChannelBuffer(960, 1, 3);
// ...
int16_t* samples=(int16_t*)data;
float* fsamples[3];
float* foutput[3];
int i;
float* fbuf=bufferIn->fbuf()->bands(0)[0];
// convert the data from 16-bit PCM into float
for(i=0;i<960;i++){
    fbuf[i]=samples[i]/(float)32767;
}
// split it into three "bands" that the AEC needs and for some reason can't do itself
splittingFilter->Analysis(bufferIn, bufferOut);
// split the frame into 6 consecutive 160-sample blocks and perform AEC on them
for(i=0;i<6;i++){
    fsamples[0]=&bufferOut->fbuf()->bands(0)[0][160*i];
    fsamples[1]=&bufferOut->fbuf()->bands(0)[1][160*i];
    fsamples[2]=&bufferOut->fbuf()->bands(0)[2][160*i];
    foutput[0]=&bufferOut2->fbuf()->bands(0)[0][160*i];
    foutput[1]=&bufferOut2->fbuf()->bands(0)[1][160*i];
    foutput[2]=&bufferOut2->fbuf()->bands(0)[2][160*i];
    int32_t res=WebRtcAec_Process(aecState, (const float* const*) fsamples, 3, foutput, 160, 20, 0);
}
// put the "bands" back together
splittingFilter->Synthesis(bufferOut2, bufferIn);
// convert the processed data back into 16-bit PCM
for(i=0;i<960;i++){
    samples[i]=(int16_t) (CLAMP(fbuf[i], -1, 1)*32767);
}

如果我注釋掉實際的回聲消除並且只是來回執行浮點轉換和波段分割,它不會破壞內存,聽起來不奇怪並無限期地運行。 (我確實將farend /揚聲器信號傳遞給AEC,我只是不想通過將其包含在問題中來使我的代碼混亂)

我也試過Android的內置AEC。 雖然它確實有效,但它會對16 kHz的捕獲信號進行上采樣。

不幸的是,沒有免費的AEC包支持48khz。 因此,要么轉移到32khz,要么使用48khz的商用AEC包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM