กำจัดเสียงรบกวนแบบเรียลไทม์ด้วย PulseAudio?


66

เป็นไปได้ไหมที่จะกำจัดสัญญาณรบกวนแบบเรียลไทม์ด้วย PulseAudio ดังนั้นเอาต์พุตเสียงที่ออกมานั้นเรียบเนียนกว่าเดิม?


มันอาจเป็นไปได้แม้ว่ามันจะเข้มข้นและจะต้องมีคนเขียนตัวกรองสำหรับมัน
RolandiXor

2
@Vadi - ฉันได้เพิ่มคำตอบที่อาจช่วยคุณหากคุณยังคงใช้ Ubuntu หรือ Distro-based based PulseAudio อื่น ๆ หวังว่ามันจะทำงานให้เพื่อนคุณ
Luis Alvarado

โพสต์นี้ดูเหมือนว่าจะทำสิ่งที่คล้ายกัน
akhmed

คำตอบ:


75

โมดูล Pulseaudio module-echo-cancel

ฉันเริ่มอ่านมากเกี่ยวกับ PulseAudio และตัวเลือก "ซ่อน" ที่มีอยู่ฉันจึงสามารถหาสิ่งที่คล้ายกับคำถามนี้ได้ สิ่งที่ฉันพบคือโมดูลตัดเสียงรบกวนซึ่งเป็นสิ่งที่ช่วยลดเสียงคงที่ในไมโครโฟนและแม้แต่เสียงพื้นหลังจำนวนมากโดยทั่วไปให้ประโยชน์จากการบันทึกเสียงของคุณเองด้วยคุณภาพที่ยอดเยี่ยม (สำหรับการบันทึกเสียง ตัวอย่างเช่น). ให้ทำตามขั้นตอนนี้:

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

  2. เพิ่มบรรทัดต่อไปนี้ที่ใดก็ได้ในไฟล์ แต่ฉันแนะนำเกือบท้ายที่คุณจะพบความคิดเห็นเกี่ยวกับสิ่งที่ Echo ยกเลิก (~ บรรทัดที่ 140):

    load-module module-echo-cancel
    
  3. โหลด PulseAudio ( pulseaudio -k) หรือรีสตาร์ทคอมพิวเตอร์ คุณควรเลือกตัวเลือกตัดเสียงรบกวนใหม่จากส่วนอุปกรณ์อินพุต:

    ภาพหน้าจอ

คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ที่Echo Cancel Module

ตั้งค่าอินพุตเป็นค่าเริ่มต้น

หากคุณต้องการตั้งค่าเริ่มต้นอุปกรณ์ echo ยกเลิกเพียงแค่เปลี่ยนบรรทัดข้างต้นเป็น:

load-module module-echo-cancel source_name=logitechsource

จากนั้นที่ด้านล่างของไฟล์เพิ่ม

set-default-source logitechsource

ในกรณีนี้ฉันตั้งชื่อที่มาlogitechsourceแต่คุณสามารถตั้งชื่อได้ตามที่คุณต้องการ

เปลี่ยนชื่ออุปกรณ์

สุดท้ายถ้าคุณไม่ต้องการชื่อยาวสุดในการตั้งค่าเสียง (เมื่อคุณต้องการเลือกอุปกรณ์อินพุต / เอาต์พุต) ข้อเสนอแนะของฉันคือการเปลี่ยนชื่ออุปกรณ์อินพุตเช่นนี้:

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

และเริ่มใหม่อีกครั้ง pulseaudio ผลลัพธ์ที่ได้จะเป็นดังนี้:

ภาพหน้าจอ


6
ง่ายที่จะทำและดูเหมือนจะไม่ทำลายสิ่งต่าง ๆ - ขอบคุณ!
Vadim Peretokin

2
ทางออกที่ยอดเยี่ยมทำงานออกมาจากกล่องสำหรับฉันขอบคุณ
rancho

1
นี่เป็นการตัดเสียงส่วนใหญ่ของแฟน ๆ จากแล็ปท็อปของฉันและการบันทึกเสียงของฉันดีขึ้นมาก!
PJ Brunet

1
Holy moly - ฉันได้รับผลลัพธ์ที่น่าอัศจรรย์แม้จากไมโครโฟนปก $ 5 เส็งเคร็งที่ฉันได้รับจาก eBay มันไม่ได้คุณภาพของสตูดิโอ แต่มันก็ดีสำหรับการโทร VOIP ทันที
Raymond Morgan

2
หากคุณต้องการหลีกเลี่ยงโมดูล echo จากการปรับตัวเลื่อนระดับเสียงโดยอัตโนมัติคุณสามารถตั้งค่าload-module module-echo-cancel aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1"ตามgitlab.freedesktop.org/pulseaudio/pulseaudio/pulseaudio/issues/224
joelostblom

16

นี่เป็นคำถามเก่า แต่ฉันมีปัญหาเดียวกันและหลังจาก Googling (ซึ่งฉันพบคนส่วนใหญ่ที่เห็นด้วยไม่สามารถทำได้) และอ่านหน้าเว็บบางหน้าตอนนี้ฉันได้พัฒนาวิธีแก้ปัญหาตามความคิดของผู้ใช้ 2330377

ก่อนอื่นคุณต้องสร้างโปรไฟล์เสียงสำหรับ SoX เพียงแค่ใช้โปรแกรมบันทึกเสียงใด ๆ ที่จะบันทึกไม่กี่วินาทีของเสียงแล้วลงในไดเรกทอรีที่คุณบันทึกไว้และทำcdsox 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 แรกและเอาต์พุตอุปกรณ์ลูปแบ็คเป็นครั้งที่สอง)

คุณไปเกือบเสร็จแล้ว! ในขั้นตอนสุดท้ายให้เริ่มบันทึกเสียงด้วยแอพพลิเคชั่นที่คุณต้องการจากนั้นเริ่มpavucontrolเปลี่ยนเป็นแท็บ "การบันทึก" และตั้งค่าอุปกรณ์เสียงที่ใช้สำหรับการบันทึก (แสดงเป็นปุ่มสีเทาทางด้านขวา) เป็น "Monitor of Loopback Audio อุปกรณ์" ตอนนี้คุณควรมีการบันทึกที่ชัดเจนและปราศจากเสียงรบกวน!


1
สคริปต์นี้ลดความซับซ้อนของกระบวนการgist.github.com/tiagoengel/334573f7c3b98c27356297d6b1996336
Thomas

2

การสอบสวนแสดงให้เห็นว่าไม่มีวิธีใดที่จะทราบได้ว่าใช้ตัวกรองลดเสียงรบกวนแบบเรียลไทม์กับระบบย่อย Linux ใด ๆ บางเว็บไซต์ชี้ไปที่ฮาร์ดแวร์ที่คุณสามารถซื้อได้ซึ่งควรทำเคล็ดลับได้ดีกว่าทำตัวกรองซอฟต์แวร์

อีกทางเลือกหนึ่งสำหรับการบันทึกคุณสามารถส่งผ่านเสียงผ่านความกล้าและใช้ตัวกรองสัญญาณรบกวนได้


สงสารฉันสงสัยว่าทำไมไม่ ขอบคุณสำหรับการตรวจสอบ
Vadim Peretokin

แน่นอน! ไม่มีข้อมูลใด ๆ ในหน้าเอกสารของโมดูลเกี่ยวกับการตัดเสียงรบกวน มีเพียงอัลกอริทึม AEC (Acoustic Echo Cancellation) module-echo-cancelเท่านั้นซึ่งมีการใช้งานหลายอย่างเช่น webrtc | Speex
vskubriev

1

นี่คือวิธี leas tone ใช้ webrtc-aec ใน

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

webrtc-aec ใช่ใช้ webrtc.org ไลบรารี AudioProcessing เพื่อเพิ่มการโทร VoIP อย่างมากในแอปพลิเคชันที่สนับสนุนโดยทำการยกเลิกการสะท้อนเสียงการควบคุมการรับสัญญาณอนาล็อกการลดสัญญาณรบกวนและการประมวลผลอื่น ๆ

นี่คือบทความลงวันที่ 2013 เรื่อง (การกำจัดเสียงรบกวนด้วย pulseaudio ไม่ใช่ webrtc-aec โดยเฉพาะ) http://lac.linuxaudio.org/2013/papers/37.pdf

"เราได้นำเสนอผลลัพธ์ครั้งแรกของโซลูชันการลดสัญญาณรบกวน / เสียงก้องหลายช่องทางที่สร้างขึ้นบน PulseAudio และกระตุ้นการตัดสินใจในการออกแบบงานนี้ส่งผลให้มีการปรับปรุงจำนวนมากในการยกเลิก PulseAudio echo และกรอบการประมวลผลสัญญาณที่ได้รับ มีส่วนร่วมในวงจรการพัฒนาเวอร์ชัน 3.0 / 4.0 และควรช่วยสนับสนุนโซลูชันระบบเสียง Linux แบบฝังตัวในอนาคตงานต่อไปจะรวมถึงรหัสการปรับให้เหมาะสมสำหรับการผสมการสตรีมเสียงวิธีการสุ่มตัวอย่างทางวิทยาศาสตร์มากขึ้นและการใช้งาน AEC ที่มีประสิทธิภาพ


สิ่งที่ฉันมีในใจสำหรับการอย่างรวดเร็วก็คือการจัดการโปรไฟล์เสียงและทำการกำจัดเสียงรบกวนแบบเรียลไทม์โดยใช้ sox แล้วเล่นเอาท์พุทเสียงซึ่งฉันสามารถใช้เป็นอินพุตสตรีมในพัลส์ได้ ฉันเชื่อว่าชีพจรสามารถสร้างและเปลี่ยนเส้นทางอินพุตและเอาต์พุตสตรีมได้ในลักษณะนี้ นั่นคือสตรีมการเล่นสามารถเปลี่ยนเส้นทางเป็นสตรีมอินพุตไปยังแอปพลิเคชั่นอื่นและสตรีมการเล่นจะเป็นแบบต่อแอปพลิเคชั่นไม่ใช่ต่ออุปกรณ์ดังนั้นจึงไม่จำเป็นต้องส่งไปยังฮาร์ดแวร์ของอุปกรณ์
2330377

ฉันให้สิ่งนี้โดยใช้ pacmd เพื่อแสดงรายการอุปกรณ์ pulseaudio, pacat เพื่อบันทึกและเล่นจากพวกเขาและทีมเพื่อทำเอฟเฟกต์เรียลไทม์บนสตรีม
user2330377

คุณสนใจโพสต์สคริปต์หรือไม่
Vadim Peretokin

0

ไม่มีข้อมูลใด ๆ ในหน้าเอกสารของโมดูลเกี่ยวกับการตัดเสียงรบกวน มีอัลกอริทึม AEC (Acoustic Echo Cancellation) เพียงอย่างเดียวใน module-echo-cancel ซึ่งมีการใช้งานหลายอย่างเช่น webrtc | Speex

ดังนั้นคุณควรซื้อชุดหูฟัง | ไมโครโฟนพร้อมคุณสมบัติตัดเสียงรบกวนในตัวให้มากที่สุด

ขณะที่ฉันทดสอบการบันทึกเสียงในอูบุนตูฉันพบคุณสมบัติพิเศษบางอย่าง:

  • Skype, Telegram ใช้อินพุตดิบจากอุปกรณ์เริ่มต้น (ในกรณีแจ็ค front-in-mic-backward-mic) หากคุณต้องการยกเลิกเสียงในแอพนี้คุณควรซื้อหูฟัง | ไมโครโฟนเท่านั้นที่มีคุณสมบัติการตัดเสียงรบกวนในตัว

  • หากคุณต้องการใช้การโทรด้วยเสียงในเบราว์เซอร์คุณควรทราบว่าเบราว์เซอร์มีการใช้งานอัลกอริทึมการประมวลผลเสียงของตัวเองเช่น WebRTC

  • แอปพลิเคชันบนเว็บ (ไซต์เช่น talky, hangouts, appear.in และอื่น ๆ ) สามารถใช้อัลกอริทึมการประมวลผลเสียงของตัวเองได้แม้ว่าจะเป็นไปตามการวิเคราะห์ webrtc

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.