web-dev-qa-db-ja.com

Linuxでノイズフィルターを使用してライブオーディオをストリーミングする

オーディオソースからノイズを取り除く必要がありますが、ライブで発生する必要があります。結果として得られる音声は、完璧に聞こえる必要はありません。ノイズが多すぎることはありません。

Soxについて読んだことがありますが、ある種のプロファイルが必要なようです。そのため、soxを2回通過する必要があります。

それで、誰かがオーディオソースをsoxやffmpegライブのようなものに通して、いくつかの基本的な風/ノイズフィルタリングを行う方法を知っていますか?

3
skerit

SoXのノイズプロファイルは、次の方法で生成できます。

sox sample-input.wav --null noiseprof ~/noise.profile

次に、プロファイルを使用して記録をフィルタリングできます。

sox recording.wav filtered.wav noisered ~/noise.profile

これが機能するのは、マイクが拾う静的ノイズは通常、セットアップ(配線)に依存し、同じ環境でも常にほぼ同じであるためです。 SoXは、ノイズの除去において Audacity よりもかなり悪いことに注意してください。 :(

さらに、 highpass / lowpass のようなffmpegのオーディオフィルターを使用して特定のしきい値を下回る/上回る周波数を減らすか、 compand filterを使用してダイナミックレンジを圧縮することができます録音のおよび/または ノイズゲート を作成します。

ノイズプロファイルを取得すると、完全なプロセスパイプラインは次のようになります。

ffmpeg -f alsa -i hw:0,0 -af 'highpass=300, lowpass=4000' -f wav - | sox -f wav -f wav - noisered ~/noise.profile | aplay

これらのフィルターを使用する場合は、ffmpegでフィルター処理された記録からプロファイルを抽出する必要があることに注意してください。

1
K3---rnc