2012-11-13 16 views
6

Ich versuche PulseAudio Echo Canceller arbeiten zu lassen.Wie wird das Echokompensationsmodul in PulseAudio verwendet?

Ich habe zwei Anwendungen - Recorder und Player, beide verwenden PulseAudio. Ich erstelle Player und Rekorder wie folgt:

// 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); 
     } 
} 

Alles funktioniert, außer Echokompensation. Ich habe es mit

pactl load-module module-echo-cancel 

aktiviert, aber es gibt keinen Unterschied mit und ohne dieses Modul - Echo existiert. Ich bin neu bei PulseAudio und konnte kein gutes Handbuch über die Verwendung von Echokompensatoren finden. Was muss ich in meinen Geräteeinstellungen hinzufügen oder anpassen, damit es funktioniert?

OS - Linux, jetzt ist es ubuntu, aber schließlich wird es OpenWRT

Antwort

6

Ich nehme an, Sie verwenden Pulseaudio 1.0 oder höher. Für die Player- und Recorder-Streams müssen Sie die Eigenschaft "filter.want" auf "echo-cancel" setzen. Wir setzen keine Möglichkeit, dies zu tun, um die einfache API, so dass Sie die PULSE_PROP Umgebungsvariable ein, die etwas hässliche Route nehmen müssen, wie dies die Einstellung, bevor Du den Strom erzeugen würde den Trick:

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

ps: Für wirklich hochwertige Echokompensation, wollen Sie PulseAudio 2.0 oder höher, mit der Unterstützung von webrtc-audio-processing - wie einfach es ist, das zu bekommen, hängt davon ab, ob Ihre Distribution dieses Paket schon hat oder nicht.

+0

Ja, es funktioniert! Danke vielmals) – Raiv