Loại bỏ tiếng ồn thời gian thực với PulseAudio?


66

Có thể thực hiện loại bỏ tiếng ồn trong thời gian thực với PulseAudio, vì vậy âm thanh phát ra phát ra mượt mà hơn?


nó có thể là có thể, mặc dù nó sẽ rất chuyên sâu và sẽ yêu cầu ai đó viết một bộ lọc cho nó.
RolandiXor

2
@Vadi - Tôi đã thêm một câu trả lời có thể giúp bạn nếu bạn vẫn đang sử dụng Ubuntu hoặc bất kỳ Distro dựa trên PulseAudio nào khác. Hy vọng nó hoạt động cho bạn thân.
Luis Alvarado

Bài đăng này dường như đang làm một cái gì đó tương tự
akhmed

Câu trả lời:


75

Mô-đun Pulseaudio module-echo-cancel

Tôi bắt đầu đọc rất nhiều về PulseAudio và các tùy chọn "ẩn" mà nó có để tôi có thể tìm thấy một câu hỏi tương tự với câu hỏi này. Mô-đun tôi tìm thấy là mô-đun khử tiếng ồn, là mô-đun giúp giảm đáng kể bất kỳ tiếng ồn tĩnh nào trên micrô và thậm chí RẤT NHIỀU tiếng ồn nền, về cơ bản mang lại cho bạn lợi ích chỉ ghi âm giọng nói của chính bạn với chất lượng tuyệt vời (Để ghi âm ví dụ). Để làm điều này theo các bước sau:

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

  2. Thêm dòng sau vào bất cứ nơi nào trên tệp, nhưng tôi khuyên bạn gần như ở cuối nơi bạn sẽ tìm thấy một nhận xét về công cụ Hủy Echo (~ dòng 140):

    load-module module-echo-cancel
    
  3. Tải lại PulseAudio ( pulseaudio -k) hoặc đơn giản là khởi động lại máy tính. Bạn sẽ có thể chọn tùy chọn Khử tiếng ồn mới từ Phần Thiết bị đầu vào:

    ảnh chụp màn hình

Bạn có thể tìm thêm thông tin về nó trên Trang Mô-đun Hủy Echo

Đặt đầu vào làm mặc định

Nếu bạn muốn đặt làm mặc định , thiết bị hủy tiếng vang chỉ cần chuyển dòng trên thành:

load-module module-echo-cancel source_name=logitechsource

và sau đó ở dưới cùng của tập tin thêm

set-default-source logitechsource

Trong trường hợp này tôi đã đặt tên nguồn logitechsource, nhưng bạn có thể đặt tên cho bất cứ thứ gì bạn muốn và chỉ cần khởi động lại pulseaudio.

Đổi tên thiết bị

Cuối cùng, nếu bạn không muốn một tên siêu dài trên Cài đặt âm thanh (Khi bạn muốn chọn một thiết bị đầu vào / đầu ra). Đề nghị của tôi là đổi tên thiết bị đầu vào như thế này:

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

Và một lần nữa, khởi động lại pulseaudio. Kết quả cuối cùng trông như thế này:

ảnh chụp màn hình


6
Dễ làm và dường như không phá vỡ mọi thứ - cảm ơn!
Vadim Peretokin

2
Giải pháp tuyệt vời, đã giải quyết được vấn đề cho tôi, cảm ơn bạn
rancho

1
Điều này cắt giảm hầu hết tiếng ồn của quạt từ máy tính xách tay của tôi và âm thanh của tôi nghe tốt hơn nhiều!
PJ Brunet

1
Holy moly - Tôi nhận được kết quả tuyệt vời ngay cả từ một chiếc micro ve áo $ 5 mà tôi có được từ eBay. Nó không phải là chất lượng phòng thu nhưng nó hoàn toàn tốt cho các cuộc gọi VOIP bây giờ.
Raymond Morgan

2
Nếu bạn muốn tránh mô-đun echo tự động điều chỉnh thanh trượt âm lượng, bạn có thể đặt load-module module-echo-cancel aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1"theo gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/224
joelostblom 13/10/18

16

Đây là một câu hỏi cũ, nhưng tôi đã có cùng một vấn đề và sau khi một số Googling (nơi tôi chủ yếu tìm thấy những người đồng ý là không thể) và đọc một số trang nam, tôi đã phát triển một giải pháp dựa trên ý tưởng của người dùng2330377.

Đầu tiên bạn cần tạo một hồ sơ tiếng ồn cho SoX. Chỉ cần sử dụng bất kỳ chương trình ghi âm nào để ghi lại một vài giây tiếng ồn, sau đó cdvào thư mục bạn đã lưu và thực hiện sox noise.wav -n noiseprof noise.prof.

Sau đó, bạn cần tạo một thiết bị loopback ALSA:

sudo modprobe snd_aloop

Điều này là bắt buộc vì pulseaudio, không giống như Jack, không thể kết nối trực tiếp phần mềm âm thanh với nhau; do đó chúng tôi sẽ sử dụng thiết bị loopback làm proxy.

Bây giờ bạn cần bắt đầu pamanvà tìm tên của cả micrô của bạn (hoặc thiết bị ghi âm khác) và của thiết bị loopback mà chúng tôi vừa tạo. Khi chúng được tìm thấy, bạn có thể thực hiện lệnh sau để bắt đầu ghi âm từ micrô của mình, dẫn nó qua SoX và sau đó phát trên thiết bị 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

(Trường hợp bạn cần thay thế tên thiết bị chính xác cho các tham số -d - thiết bị đầu vào cho lệnh gọi pacat đầu tiên và đầu ra thiết bị loopback cho lần thứ hai.)

Có bạn đi, gần xong rồi! Bước cuối cùng, bắt đầu ghi âm với ứng dụng bạn chọn, sau đó khởi động pavucontrol, đổi sang tab "Ghi âm" và đặt thiết bị âm thanh được sử dụng để ghi (hiển thị dưới dạng nút màu xám ở bên phải) thành "Monitor of Loopback Audio Thiết bị ". Bây giờ bạn nên có một bản ghi rõ ràng và không có tiếng ồn!


1
Kịch bản này không đơn giản hóa quá trình gist.github.com/tiagoengel/334573f7c3b98c27356297d6b1996336
Thomas

2

Điều tra cho thấy rằng không có cách nào thực hiện lọc giảm nhiễu thời gian thực với bất kỳ hệ thống phụ Linux nào. Một số trang web chỉ đến phần cứng mà bạn có thể mua nên thực hiện thủ thuật tốt hơn nhiều so với thực hiện bộ lọc phần mềm.

Ngoài ra, nếu đây là để ghi âm, bạn có thể truyền âm thanh qua Audacity và sử dụng bộ lọc tiếng ồn ở đó.


Đáng tiếc, tôi tự hỏi tại sao không. Cảm ơn đã điều tra.
Vadim Peretokin

Chắc chắn rồi! Không có bất kỳ thông tin nào trên trang tài liệu mô-đun về loại bỏ tiếng ồn. Chỉ có thuật toán AEC (Acoustic Echo module-echo-cancelCancelling ) bên trong , có một số triển khai, như webrtc | speex.
vskubriev

1

Đây là cách dễ dàng, triển khai webrtc-aec trong

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

webrtc-aec Có Sử dụng thư viện AudioProcessing của webrtc.org để tăng cường các cuộc gọi VoIP trong các ứng dụng hỗ trợ nó bằng cách thực hiện khử tiếng vang âm thanh, kiểm soát khuếch đại analog, khử nhiễu và xử lý khác.

Đây là một bài báo ngày 2013 về chủ đề này (loại bỏ tiếng ồn bằng pulseaudio không phải là webrtc-aec cụ thể) http://lac.linuxaudio.org/2013/ con / 37.pdf

"Chúng tôi đã trình bày kết quả đầu tiên của giải pháp giảm tiếng ồn / tiếng vang đa kênh được xây dựng trên PulseAudio và thúc đẩy các quyết định thiết kế. Công việc đã dẫn đến một số cải tiến trong khung xử lý tín hiệu và khử tiếng vang PulseAudio, đã được đã đóng góp trong chu kỳ phát triển phiên bản 3.0 / 4.0 và sẽ tạo điều kiện cho các giải pháp âm thanh Linux nhúng trong tương lai. Công việc tiếp theo bao gồm tối ưu hóa mã để trộn luồng âm thanh, phương pháp lấy mẫu sinh thái hơn và triển khai AEC hiệu quả trong đường ống xử lý đa kênh. "


Những gì tôi đã nghĩ nhanh chóng là lấy một cấu hình nhiễu và loại bỏ nhiễu thời gian thực bằng cách sử dụng sox và sau đó phát lại đầu ra âm thanh mà sau đó tôi có thể sử dụng làm luồng đầu vào trong xung. Tôi tin rằng xung có thể tạo và chuyển hướng các luồng đầu vào và đầu ra theo cách này. Đó là luồng phát lại có thể được chuyển hướng dưới dạng luồng đầu vào sang ứng dụng khác và luồng phát lại trên mỗi ứng dụng không phải trên mỗi thiết bị, do đó, nó không cần phải được chuyển đến phần cứng thiết bị.
dùng2330377

Tôi đang thử sử dụng pacmd để liệt kê các thiết bị pulseaudio, pacat để ghi và phát lại từ chúng và sox để thực hiện các hiệu ứng thời gian thực trên luồng.
dùng2330377

Bạn sẽ quan tâm đến việc đăng các kịch bản cho nó?
Vadim Peretokin

0

Không có bất kỳ thông tin nào trên trang tài liệu mô-đun về loại bỏ tiếng ồn. Chỉ có thuật toán AEC (Acoustic Echo Cancelling) bên trong hủy bỏ tiếng vang mô-đun, có một số triển khai, như webrtc | speex.

Do đó, bạn nên mua tai nghe | micro có tính năng khử tiếng ồn tích hợp càng nhiều càng tốt.

Khi tôi thử nghiệm ghi âm giọng nói trong Ubuntu, tôi đã tìm thấy một số phẩm chất đặc biệt:

  • Skype, Telegram sử dụng đầu vào thô từ thiết bị mặc định (trong trường hợp của tôi là giắc cắm micrô phía trước). Nếu bạn cần hủy tiếng ồn trong ứng dụng này, bạn chỉ nên mua tai nghe | micrô có tính năng khử tiếng ồn tích hợp

  • Nếu bạn cần sử dụng các cuộc gọi thoại trong trình duyệt, thì bạn nên nhớ rằng các trình duyệt có triển khai thuật toán xử lý giọng nói của riêng nó, ví dụ WebRTC.

  • Ngoài ra, các ứng dụng web (các trang web như talky, hangouts, xuất hiện, v.v.) có thể có triển khai thuật toán xử lý giọng nói của riêng nó, mặc dù thực tế là chúng có thể dựa trên phân tích hangout webrtc

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.