Penghilang derau waktu nyata dengan PulseAudio?

66

Apakah mungkin untuk melakukan penghapusan noise secara realtime dengan PulseAudio, sehingga output suara yang keluar lebih lancar?

Vadim Peretokin
sumber
mungkin itu mungkin, meskipun akan intensif, dan akan membutuhkan seseorang untuk menulis filter untuk itu.
RolandiXor
2
@Vadi - Saya telah menambahkan jawaban yang mungkin membantu Anda jika Anda masih menggunakan Ubuntu atau Distro berbasis PulseAudio lainnya. Semoga berhasil untuk Anda sobat.
Luis Alvarado
Posting ini tampaknya melakukan sesuatu yang serupa
akhmed

Jawaban:

75

Modul pulseaudio module-echo-cancel

Saya mulai membaca banyak tentang PulseAudio dan opsi "tersembunyi" yang dimilikinya sehingga saya dapat menemukan yang mirip dengan pertanyaan ini. Yang saya temukan adalah modul peredam bising, yang merupakan salah satu yang secara dramatis menurunkan kebisingan statis pada mikrofon dan bahkan BANYAK kebisingan latar belakang, pada dasarnya memberi Anda manfaat hanya merekam suara Anda sendiri dengan kualitas yang sangat baik (Untuk rekaman audio sebagai contoh). Untuk melakukan ini ikuti langkah-langkah ini:

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

  2. Tambahkan baris berikut di mana saja pada file, tetapi saya sarankan hampir di akhir di mana Anda akan menemukan komentar tentang hal-hal Pembatalan Echo (~ baris 140):

    load-module module-echo-cancel
    
  3. Muat ulang PulseAudio ( pulseaudio -k) atau cukup nyalakan kembali komputer. Anda harus dapat memilih opsi Pembatalan Kebisingan baru dari Bagian Perangkat Input:

    tangkapan layar

Anda dapat menemukan informasi lebih lanjut tentang itu di Halaman Modul Membatalkan Echo

Tetapkan input sebagai default

Jika Anda ingin menetapkan sebagai default perangkat pembatalan gema cukup mengubah baris di atas menjadi:

load-module module-echo-cancel source_name=logitechsource

dan kemudian di bagian bawah file tambahkan

set-default-source logitechsource

Dalam hal ini saya menamai sumbernya logitechsource, tetapi Anda dapat menamainya apa pun yang Anda inginkan dan cukup me-restart pulseaudio.

Ganti nama perangkat

Terakhir, jika Anda tidak ingin nama yang sangat panjang pada Pengaturan Suara (Saat Anda ingin memilih perangkat input / output). Saran saya mengubah nama perangkat input seperti ini:

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

Dan lagi, restart pulseaudio. Hasil akhirnya terlihat seperti ini:

tangkapan layar

Luis Alvarado
sumber
6
Mudah dilakukan dan tampaknya tidak merusak banyak hal - terima kasih!
Vadim Peretokin
2
Solusi luar biasa, bekerja di luar kotak untuk saya, terima kasih
rancho
1
Ini memotong sebagian besar suara kipas dari laptop saya dan rekaman saya terdengar jauh lebih baik!
PJ Brunet
1
Holy moly - Saya mendapatkan hasil yang luar biasa bahkan dari mikrofon kerah seharga $ 5 yang saya dapat dari eBay. Ini bukan kualitas studio tetapi sangat baik untuk panggilan VOIP sekarang.
Raymond Morgan
2
Jika Anda ingin menghindari modul gema dari menyesuaikan slider volume secara otomatis, Anda dapat mengatur load-module module-echo-cancel aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1"sesuai gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/224
joelostblom
16

Ini adalah pertanyaan lama, tetapi saya memiliki masalah yang sama dan setelah beberapa Googling (di mana saya kebanyakan menemukan orang yang setuju itu tidak mungkin) dan membaca beberapa halaman manual, saya sekarang telah mengembangkan solusi berdasarkan ide user2330377.

Pertama, Anda perlu membuat profil kebisingan untuk SoX. Gunakan saja program rekaman audio untuk merekam beberapa detik kebisingan, kemudian cdmasuk ke direktori tempat Anda menyimpan dan melakukannya sox noise.wav -n noiseprof noise.prof.

Maka Anda perlu membuat perangkat loopback ALSA:

sudo modprobe snd_aloop

Ini diperlukan karena pulseaudio, tidak seperti Jack, tidak dapat langsung menghubungkan perangkat lunak audio bersama; karenanya kami akan menggunakan perangkat loopback sebagai proxy.

Sekarang Anda perlu memulai pamandan menemukan nama-nama mikrofon Anda (atau perangkat rekaman lainnya) dan perangkat loopback yang baru saja kami buat. Setelah itu ditemukan, Anda dapat menjalankan perintah berikut untuk mulai merekam suara dari mikrofon Anda, menyalurkannya melalui SoX dan kemudian memutarnya di perangkat loopback:

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

(Di mana Anda perlu mengganti nama perangkat yang benar untuk parameter -d - perangkat input untuk doa pacat pertama dan output perangkat loopback untuk yang kedua.)

Ini dia, hampir selesai! Sebagai langkah terakhir, mulailah merekam suara dengan aplikasi pilihan Anda, kemudian mulai pavucontrol, ubah ke tab "Rekaman" dan atur perangkat audio yang digunakan untuk merekam (ditampilkan sebagai tombol abu-abu ke kanan) ke "Monitor Audio Loopback Alat". Anda sekarang harus memiliki rekaman yang jelas dan bebas noise!

cemper93
sumber
1
Script ini memang menyederhanakan proses gist.github.com/tiagoengel/334573f7c3b98c27356297d6b1996336
Thomas
2

Investigasi menunjukkan bahwa tidak ada cara yang dikenal untuk melakukan penyaringan pengurangan kebisingan waktu nyata dengan setiap sub sistem Linux. Beberapa situs web menunjuk ke perangkat keras yang dapat Anda beli yang seharusnya melakukan trik jauh lebih baik daripada melakukan filter perangkat lunak.

Atau jika ini untuk rekaman, Anda bisa melewati suara melalui Audacity dan menggunakan filter noise di sana.

Martin Owens -doctormo-
sumber
Sayang sekali, saya heran kenapa tidak. Terima kasih telah menyelidikinya.
Vadim Peretokin
Tentu! Tidak ada informasi pada halaman dokumentasi modul tentang pembatalan kebisingan. Hanya ada algoritma AEC (Acoustic Echo Pembatalan) di dalamnya module-echo-cancel, yang memiliki beberapa implementasi, seperti webrtc | speex.
vskubriev
1

Berikut ini pada nada nada leas, menerapkan webrtc-aec di

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

webrtc-aec Ya Menggunakan pustaka Audio pengolahan webrtc.org untuk meningkatkan panggilan VoIP secara luar biasa dalam aplikasi yang mendukungnya dengan melakukan pembatalan gema akustik, kontrol penguatan analog, peredam bising, dan pemrosesan lainnya.

Berikut ini makalah yang bertanggal 2013 tentang masalah ini (penghapusan noise dengan pulseaudio bukan webrtc-aec secara khusus) http://lac.linuxaudio.org/2013/papers/37.pdf

"Kami telah mempresentasikan hasil pertama dari solusi pengurangan kebisingan / gema multi-channel yang dibangun di atas PulseAudio dan memotivasi keputusan desain. Pekerjaan ini telah menghasilkan sejumlah perbaikan dalam kerangka pembatalan gema PulseAudio dan pemrosesan sinyal, yang telah berkontribusi selama siklus pengembangan versi 3.0 / 4.0 dan harus memfasilitasi solusi audio Linux tertanam di masa depan. Pekerjaan lebih lanjut termasuk kode pengoptimalan untuk pencampuran aliran audio, metode resampling yang lebih efisien, dan penerapan MEA yang efisien dalam pipa pemrosesan multi-channel. "

pengguna2330377
sumber
Apa yang ada dalam pikiran saya untuk memiliki cepat adalah untuk mengambil profil kebisingan dan melakukan penghapusan kebisingan real time menggunakan sox dan kemudian memutar output audio yang kemudian dapat saya gunakan sebagai input stream dalam pulsa. Saya percaya bahwa pulsa dapat membuat dan mengarahkan input dan output stream dengan cara ini. Itu adalah aliran pemutaran dapat dialihkan sebagai aliran input ke aplikasi lain dan aliran pemutaran adalah per aplikasi tidak per perangkat, sehingga tidak perlu dialihkan ke perangkat keras perangkat.
user2330377
Saya mencoba ini menggunakan pacmd untuk mendaftar perangkat pulseaudio, pacat untuk merekam dan memutar darinya dan sox untuk melakukan efek real time pada stream.
user2330377
Apakah Anda tertarik memposting skrip untuk itu?
Vadim Peretokin
0

Tidak ada informasi pada halaman dokumentasi modul tentang pembatalan kebisingan. Hanya ada algoritma AEC (Acoustic Echo Cancelled) di dalam module-echo-cancel, yang memiliki beberapa implementasi, seperti webrtc | speex.

Karena itu Anda harus membeli mikrofon headset | dengan fitur peredam bising terintegrasi sebanyak mungkin.

Ketika saya menguji rekaman suara di ubuntu saya menemukan beberapa kualitas tertentu:

  • Skype, Telegram menggunakan input mentah dari perangkat default (dalam kasus saya jack depan-in-mic | backward-mic). Jika Anda perlu membatalkan suara dalam aplikasi ini, Anda harus membeli headset | mikrofon hanya dengan fitur pembatalan kebisingan terintegrasi

  • Jika Anda perlu menggunakan panggilan suara di browser, maka Anda harus ingat bahwa browser memiliki implementasi algoritma pemrosesan suara sendiri, misalnya WebRTC.

  • Juga aplikasi web (situs seperti talky, hangout, tampil.in, dll) dapat memiliki implementasi algoritma pemrosesan suara sendiri, meskipun faktanya mereka dapat didasarkan pada analisis hangout webrtc

vskubriev
sumber