2012-11-13 19 views
6

私はPulseAudioエコーキャンセラーを作ろうとしています。PulseAudioでエコーキャンセレーションモジュールを使用するには?

私は2つのアプリケーションを持っています - レコーダーとプレーヤーは両方とも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); 
     } 
} 

すべては、エコーキャンセルを除いて、取り組んでいます。私はそれを有効にしました

しかし、そのモジュールとの違いはありません - エコーがあります。私はPulseAudioで新しく、エコーキャンセラの使い方についての良いマニュアルを見つけることができませんでした。デバイスの設定を変更して機能させるにはどうすればよいですか?

OS - Linuxでは、私はあなたがPulseAudioは1.0以上を使用していると仮定している今、それはUbuntuのですが、最終的には、OpenWrtの

答えて

6

になります。プレーヤーとレコーダーの両方のストリームでは、 "filter.want"プロパティを "echo-cancel"に設定する必要があります。

setenv("PULSE_PROP", "filter.want=echo-cancel", 1); 
:あなたは、ストリームを作成する前にトリックを行うだろう。このようPULSE_PROP環境変数を設定するので少し醜いルートを取る必要がありますように、我々は、シンプルなAPIを使用してこれを行う方法を公開していません

ps:本当に高品質のエコーキャンセリングのためには、PulseAudio 2.0以上が必要です.Webbrcオーディオ処理サポートが組み込まれています。これは、あなたのディストリビューションにすでにパッケージ化されているかどうかによって異なります。

+0

はい、動作します。どうもありがとう) – Raiv

関連する問題