2012-11-13 46 views
6

我試圖讓PulseAudio回聲消除器工作。如何在PulseAudio中使用迴音消除模塊?

我有兩個應用程序 - 錄音機和播放器,都使用PulseAudio。我創建播放器和記錄器是這樣的:

// pulseAudio 
pa_simple *paS=0; 
pa_sample_spec ss; 

void initPulseAudio() 
{ 
    ss.format = PA_SAMPLE_S16LE; 
    ss.channels = 1; 
    ss.rate = 8000; 


    paS = pa_simple_new(NULL,    // Use the default server. 
         "bottomPlayer",   // Our application's name. 
         PA_STREAM_PLAYBACK, 
         NULL,    // Use the default device. 
         "playStream",   // Description of our stream. 
         &ss,    // Our sample format. 
         NULL,    // Use default channel map 
         NULL,    // Use default buffering attributes. 
         NULL    // Ignore error code. 
         ); 

    if(!paS) 
    { 
     fprintf(stderr, 
       "unable to create recorder\n"); 
     myExit(1); 
     } 
} 

所有工作,除了回聲消除。我已啓用它與

pactl load-module module-echo-cancel 

但沒有差異有和沒有該模塊 - 回聲存在。我是PulseAudio的新手,無法找到有關回聲消除器使用情況的良好手冊。我應該在我的設備設置中添加或調整以使其工作?

OS - linux的,現在是Ubuntu的,但最後它會OpenWrt的

回答

6

我假設你正在使用的PulseAudio 1.0以上。對於播放器和錄音機流,您需要將「filter.want」屬性設置爲「回聲取消」。我們不公開的方式來做到這一點通過簡單的API,所以你需要在創建流之前採取設置PULSE_PROP環境變量這樣的略顯醜陋的路線會做的伎倆:

setenv("PULSE_PROP", "filter.want=echo-cancel", 1); 

ps:對於真正高質量的回聲消除,您需要PulseAudio 2.0或更高版本,以及內置的webrtc音頻處理支持 - 獲取該版本有多容易取決於您的發行版是否已經打包了該版本。

+0

是的,它的工作原理!非常感謝) – Raiv