สตรีมเสียงสดพร้อมตัวกรองสัญญาณรบกวนใน Linux


3

ฉันต้องการตัดสัญญาณรบกวนจากแหล่งกำเนิดเสียง แต่ต้องเกิดขึ้นจริง เสียงที่เกิดขึ้นไม่จำเป็นต้องให้เสียงที่สมบูรณ์แบบ แต่มันก็ไม่สามารถมีเสียงรบกวนมากเกินไป

ฉันอ่านเกี่ยวกับ sox แล้ว แต่ดูเหมือนว่าจะต้องมีประวัติแปลก ๆ ซึ่งจะทำให้ฉันต้องผ่าน sox สองครั้ง

ไม่มีใครรู้วิธีส่งแหล่งกำเนิดเสียงผ่านบางสิ่งบางอย่างเช่น sox หรือ ffmpeg มีชีวิตอยู่และทำการกรองลม / เสียงรบกวนพื้นฐานหรือไม่


1
เมื่อใดก็ตามที่คุณพูดเกี่ยวกับการประมวลผลเสียง (สดหรืออื่น ๆ ) ฉันมักจะคิดถึง Gstreamer ดูตัวอย่างaudioiirfilter (ไม่แน่ใจว่ามันทำในสิ่งที่คุณต้องการหรือไม่
allquixotic

คำตอบ:


1

คุณสามารถสร้างโปรไฟล์เสียงสำหรับ SoX ด้วย:

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

จากนั้นคุณสามารถใช้โปรไฟล์เพื่อกรองการบันทึกของคุณ:

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

วิธีนี้ใช้งานได้เพราะเสียงคงที่ที่ไมโครโฟนของคุณมักจะขึ้นอยู่กับการตั้งค่าของคุณ (เดินสาย) และมักจะอยู่ในสภาพแวดล้อมเดียวกันเสมอ โปรดทราบว่า SoX นั้นเลวร้ายยิ่งกว่าความกล้าในการขจัดเสียงรบกวน :(

นอกจากนี้คุณสามารถใช้กรองเสียง ffmpeg เช่นhighpass / lowpassเพื่อลดความถี่ด้านล่าง / สูงกว่าเกณฑ์บางอย่างหรือใช้compandกรองในการบีบอัดช่วงไดนามิกของการบันทึกและ / หรือทำให้เสียงประตู

เมื่อคุณมีโปรไฟล์เสียงสัญญาณรบกวนกระบวนการที่สมบูรณ์อาจเป็น:

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

หมายเหตุคุณควรแยกโปรไฟล์ออกจากการบันทึกที่กรองด้วย ffmpeg หากคุณใช้ตัวกรองเหล่านั้น

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