9

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

エコーキャンセルを除いて、すべてが機能しています。私はそれを有効にしました

pactl load-module module-echo-cancel

しかし、そのモジュールの有無に違いはありません-エコーが存在します。私は PulseAudio を初めて使用し、エコー キャンセラの使用法に関する適切なマニュアルを見つけることができませんでした。動作させるには、デバイスのセットアップで何を追加または調整する必要がありますか?

OSはlinux、今はubuntuですが、最終的にはopenWrtになります

4

1 に答える 1

8

PulseAudio 1.0 以降を使用していると仮定しています。プレーヤー ストリームとレコーダー ストリームの両方で、「filter.want」プロパティを「echo-cancel」に設定する必要があります。単純な API を使用してこれを行う方法は公開していないため、ストリームを作成する前に、次のように PULSE_PROP 環境変数を設定するという、少し厄介な方法を使用する必要があります。

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

ps: 本当に高品質のエコー キャンセリングを行うには、webrtc-audio-processing サポートが組み込まれた PulseAudio 2.0 以降が必要です。これを簡単に取得できるかどうかは、ディストリビューションに既にパッケージ化されているかどうかによって異なります。

于 2012-11-14T03:47:18.193 に答える