web-dev-qa-db-ja.com

PulseAudioによるリアルタイムのノイズ除去?

PulseAudioでリアルタイムのノイズ除去を行うことは可能ですか?そのため、出力されるサウンド出力はよりスムーズになりますか?

64
Vadim Peretokin

Pulseaudioモジュールmodule-echo-cancel

PulseAudioとそれが持っている「隠された」オプションについてたくさん読み始めたので、この質問に似たものを見つけることができました。私が見つけたのはノイズキャンセルモジュールでした。これは、マイクの静的ノイズとバックグラウンドノイズを大幅に低減し、基本的に優れた品質で自分の声を録音するだけの利点をもたらします(オーディオ録音用例えば)。これを行うには、次の手順を実行します。

  1. Sudo nano /etc/Pulse/default.pa

  2. ファイルの任意の場所に次の行を追加しますが、ほぼ最後にエコーキャンセルに関するコメントを見つけることをお勧めします(〜行140)。

    load-module module-echo-cancel
    
  3. PulseAudioをリロードする( pulseaudio -k )か、単にコンピューターを再起動します。入力デバイスセクションから新しいノイズキャンセルオプションを選択できるはずです:

    screenshot

Echo Cancel Module Page で詳細を確認できます

入力をデフォルトとして設定

デフォルトとして設定 を希望する場合、エコーキャンセルデバイスは上記の行を次のように変更します。

load-module module-echo-cancel source_name=logitechsource

そして、ファイルの下部に追加します

set-default-source logitechsource

この場合、ソースにlogitechsourceという名前を付けましたが、任意の名前を付けて単純にpulseaudioを再起動することができます。

デバイスの名前を変更する

最後に、サウンド設定で超ロングネームが必要ない場合(入力/出力デバイスを選択する場合)。私の提案は、入力デバイスの名前を次のように変更することです。

load-module module-echo-cancel source_name=logitechsource source_properties=device.description=LogitechHD

そして再び、pulseaudioを再起動します。最終結果は次のようになります。

screenshot

73
Luis Alvarado

これは古い質問ですが、私は同じ問題を抱えており、いくつかのグーグル(それは不可能だと同意した人をほとんど見つけました)といくつかのマニュアルページを読んだ後、user2330377のアイデアに基づいたソリューションを開発しました。

最初に、SoXのノイズプロファイルを作成する必要があります。任意のオーディオ録音プログラムを使用して、数秒間のノイズを録音し、cdを保存したディレクトリに保存して、sox noise.wav -n noiseprof noise.profを実行します。

次に、ALSAループバックデバイスを作成する必要があります。

Sudo modprobe snd_aloop

Pulseaudioはジャックとは異なり、オーディオソフトウェアを直接接続できないため、これが必要です。したがって、ループバックデバイスをプロキシとして使用します。

ここで、pamanを起動し、マイク(または他の録音デバイス)と作成したばかりのループバックデバイスの両方の名前を見つける必要があります。それらが見つかったら、次のコマンドを実行して、マイクからサウンドの録音を開始し、SoXを介してパイプし、ループバックデバイスで再生します。

pacat -r -d alsa_input.pci-0000_00_14.2.analog-stereo --latency=1msec|sox -b 16 -e signed -c 2 -r 44100 -t raw - -b 16 -e signed -c 2 -r 44100 -t raw - noisered noise.prof 0.2|pacat -p -d alsa_output.2.analog-stereo --latency=1msec

(-dパラメーターを正しいデバイス名に置き換える必要がある場合-最初のpacat呼び出しの入力デバイスと、2番目のループバックデバイス出力)。

ほぼ完了です!最後のステップとして、選択したアプリケーションで音声の録音を開始し、pavucontrolを起動して[録音]タブに切り替え、録音に使用するオーディオデバイス(右側の灰色のボタンとして表示)を「ループバックオーディオデバイスのモニター」。これで、クリアでノイズのない録音ができました!

16
cemper93

調査の結果、Linuxサブシステムでリアルタイムノイズリダクションフィルタリングを実行する方法は知られていないことがわかりました。一部のWebサイトでは、ソフトウェアフィルターを使用するよりもはるかに優れたトリックを実行できる、購入可能なハードウェアを示しています。

あるいは、これが録音用である場合、サウンドをAudacityに渡し、そこでノイズフィルターを使用できます。

ここでは、楽な方法で、webrtc-aecを実装します

http://wiki.gentoo.org/wiki/PulseAudio

webrtc-aecありwebrtc.org AudioProcessingライブラリを使用して、音響エコーキャンセレーション、アナログゲインコントロール、ノイズ抑制、その他の処理を実行することにより、VoIPコールをサポートするアプリケーションでVoIPコールを大幅に強化します。

これは2013年のテーマに関する論文です(特にwebrtc-aecではなくpulseaudioでのノイズ除去) http://lac.linuxaudio.org/2013/papers/37.pdf

「PulseAudioの上に構築されたマルチチャネルノイズ/エコー低減ソリューションの最初の結果を提示し、設計上の決定を動機付けました。バージョン3.0/4.0の開発サイクルで貢献し、将来の組み込みLinuxオーディオソリューションを促進するはずです。さらなる作業には、オーディオストリームミキシングのコードの最適化、より効率的なリサンプリング方法、マルチチャネル処理パイプラインでの効率的なAECの実装が含まれます。

1
user2330377

モジュールのドキュメントページには、ノイズキャンセルに関する情報はありません。 module-echo-cancel内にはAEC(Acoustic Echo Cancellation)アルゴリズムのみがあり、webrtcなどのいくつかの実装があります。 speex。

したがって、可能な限りノイズキャンセル機能を内蔵したヘッドセット|マイクを購入する必要があります。

Ubuntuで音声録音をテストしたところ、いくつかの特定の品質が見つかりました。

  • Skype、Telegramはデフォルトデバイス(私の場合はfront-in-mic | backward-micジャック)からの生の入力を使用します。このアプリでノイズをキャンセルする必要がある場合は、統合されたノイズキャンセル機能付きのヘッドセット|マイクのみを購入する必要があります

  • ブラウザで音声通話を使用する必要がある場合、ブラウザには独自の音声処理アルゴリズムの実装があることに留意してください。 WebRTC。

  • また、webrtc hangout-analysis に基づくことができるという事実にもかかわらず、Webアプリケーション(トーキー、ハングアウト、appear.inなどのサイト)は、独自の音声処理アルゴリズムの実装を持つことができます。

0
vskubriev