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


66

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


それはおそらく可能ですが、それは集中的であり、誰かがそのためのフィルターを書く必要があります。
RolandiXor

2
@Vadi-まだUbuntuやその他のPulseAudioベースのDistroを使用している場合に役立つ答えを追加しました。それがあなたの相棒のために働くことを願っています。
ルイスアルバラード

この投稿は似たようなことをしているようです
16年

回答:


75

Pulseaudioモジュール module-echo-cancel

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

  1. sudo nano /etc/pulse/default.pa

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

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

    スクリーンショット

Echo Cancel Moduleページで詳細を確認できます

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

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

load-module module-echo-cancel source_name=logitechsource

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

set-default-source logitechsource

この場合、sourceという名前を付けましたlogitechsourceが、好きな名前を付けて単純にpulseaudioを再起動できます。

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

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

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

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

スクリーンショット


6
簡単で、物事を壊さないようです-ありがとう!
ヴァディムペレトキン16

2
優れたソリューション、ありがとうございました私のために箱から出して働いていた
ランチョ

1
これにより、ラップトップからのファンノイズのほとんどがカットされ、録音の音が非常に良くなりました!
PJブルーネット

1
神聖な-私はeBayから得た5ドルのくだらないマイクからでも驚くべき結果を得ました。スタジオ品質ではありませんが、今ではVOIP通話にはまったく問題ありません。
レイモンドモーガン

2
エコーモジュールがボリュームスライダーを自動的に調整するのを避けたい場合は、gitlab.freedesktop.orgload-module module-echo-cancel aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1" / pulseaudio
joelostblom

16

これは古い質問ですが、私は同じ問題を抱えており、いくつかのグーグル(それは不可能だと同意した人をほとんど見つけました)といくつかのマニュアルページを読んだ後、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、起動して「録音」タブに切り替え、録音に使用するオーディオデバイス(右の灰色のボタンとして表示)を「ループバックオーディオのモニター」に設定します端末"。これで、クリアでノイズのない録音ができました!


1
このスクリプトは、プロセスの簡素化しgist.github.com/tiagoengel/334573f7c3b98c27356297d6b1996336
トーマス・

2

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

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


残念、私はなぜそうではないのだろうか。調査していただきありがとうございます。
ヴァディムペレートキン

承知しました!モジュールのドキュメントページには、ノイズキャンセルに関する情報はありません。内部module-echo-cancelにはAEC(Acoustic Echo Cancellation)アルゴリズムのみがあり、webrtc | speex。
vskubriev

1

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


簡単に考えていたのは、ノイズプロファイルを作成し、soxを使用してリアルタイムのノイズ除去を行い、オーディオ出力を再生して、パルスの入力ストリームとして使用できるようにすることでした。pulseは、この方法で入出力ストリームを作成およびリダイレクトできると信じています。つまり、再生ストリームは入力ストリームとして別のアプリケーションにリダイレクトされ、再生ストリームはデバイスごとではなくアプリケーションごとにリダイレクトされるため、デバイスハードウェアにルーティングする必要はありません。
user2330377

これは、pacmdを使用してpulseaudioデバイスを一覧表示し、pacatを使用して記録と再生を行い、soxを使用してストリームにリアルタイムの効果を加えます。
user2330377

スクリプトを投稿することに興味がありますか?
ヴァディムペレトキン

0

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

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

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.