ปลั๊กอินลดเสียงรบกวนแบบเรียลไทม์สำหรับเสียงตาม RNNoise ของ Xiph ข้อมูลเพิ่มเติมเกี่ยวกับไลบรารีฐาน
ปลั๊กอินนี้มีไว้เพื่อลดแหล่งกำเนิดเสียงรบกวนที่หลากหลาย (จากกระดาษต้นฉบับ): พัดลมคอมพิวเตอร์ สำนักงาน ฝูงชน เครื่องบิน รถยนต์ รถไฟ การก่อสร้าง
จากการทดสอบของฉัน เสียงพื้นหลังเล็กน้อยจะถูกระงับอยู่เสมอ เสียงดัง เช่น การคลิกของแป้นพิมพ์เชิงกล จะถูกระงับในขณะที่ไม่มีเสียง แต่จะลดระดับเสียงเมื่อมีเสียงเท่านั้น
โปรดทราบว่าปลั๊กอินนี้ไม่สามารถปรับปรุงคุณภาพเสียงเมื่อมีไมโครโฟนที่ไม่ดีได้ มันยังอาจทำให้สิ่งต่างๆ แย่ลงด้วยการจัดประเภทเสียงผิดเป็นเสียงรบกวน ซึ่งจะลดคุณภาพเสียงที่ไม่ดีอยู่แล้ว
ปลั๊กอินใช้งานได้กับหนึ่งช่องขึ้นไป อินพุตเสียง 16 บิต 48000 Hz
❗ ❗ ❗ อย่าใช้อัตราตัวอย่างอื่นใด ใช้เพียง 48000 Hz ตรวจสอบให้แน่ใจว่าแหล่งกำเนิดเสียงของคุณคือ 48000 Hz และบังคับให้เป็น 48000 Hz หากไม่ใช่
มี GUI แบบเรียบง่ายพร้อมพารามิเตอร์และสถิติการวินิจฉัยทั้งหมด:
รุ่นล่าสุด
VAD Threshold (%)
- หากความน่าจะเป็นของเสียงที่เป็นเสียงต่ำกว่าเกณฑ์นี้ - เสียงนั้นจะถูกปิดเสียง ในกรณีส่วนใหญ่ เกณฑ์ระหว่าง 85% - 95% ก็ถือว่าใช้ได้ หากไม่มี VAD อาจมีเสียงดังบ้างเมื่อไม่มีเสียงVAD Grace Period (ms)
- ระยะเวลาผ่อนผันหลังจากการตรวจจับเสียงครั้งสุดท้าย เอาต์พุตจะไม่ถูกปิดเสียง ซึ่งจะช่วยได้เมื่อส่วนท้ายของคำ/ประโยคถูกตัดออกRetroactive VAD Grace Period (ms)
- คล้ายกับ VAD Grace Period (ms)
แต่สำหรับการเริ่มคำ/ประโยคหากต้องการตรวจสอบหรือเปลี่ยนการตั้งค่าไมโครโฟน ให้ไปที่ "อุปกรณ์บันทึก" -> "การบันทึก" -> "คุณสมบัติ" ของไมโครโฟนเป้าหมาย -> "ขั้นสูง"
หากต้องการเปิดใช้งานปลั๊กอินใน Equalizer APO ให้เลือก "ปลั๊กอิน" -> "ปลั๊กอิน VST" และระบุ dll ของปลั๊กอิน
ดูคำแนะนำโดยละเอียดจาก @bssankaran
เนื่องจากเวอร์ชัน 0.3.45
PipeWire ใช้การกำหนดค่าแบบแยกไฟล์ ทำให้การตั้งค่าปลั๊กอินและการปรับแต่งการกำหนดค่าเป็นเรื่องง่ายมาก
สำหรับ PipeWire เวอร์ชันเก่า คุณจะต้องคัดลอก /usr/share/pipewire/pipewire.conf
ลงใน ~/.config/pipewire/pipewire.conf
จากนั้นผนวกการกำหนดค่าด้านล่างเข้ากับ context.modules
ที่มีอยู่แล้ว
สำหรับ PipeWire >= 0.3.45
คุณควร:
~/.config/pipewire/pipewire.conf.d/
~/.config/pipewire/pipewire.conf.d/99-input-denoising.conf
context.modules = [
{ name = libpipewire-module-filter-chain
args = {
node.description = "Noise Canceling source"
media.name = "Noise Canceling source"
filter.graph = {
nodes = [
{
type = ladspa
name = rnnoise
plugin = /path/to/librnnoise_ladspa.so
label = noise_suppressor_mono
control = {
"VAD Threshold (%)" = 50.0
"VAD Grace Period (ms)" = 200
"Retroactive VAD Grace (ms)" = 0
}
}
]
}
capture.props = {
node.name = "capture.rnnoise_source"
node.passive = true
audio.rate = 48000
}
playback.props = {
node.name = "rnnoise_source"
media.class = Audio/Source
audio.rate = 48000
}
}
}
]
/path/to/librnnoise_ladspa.so
เป็นพาธไลบรารีจริงnoise_suppressor_mono
-> noise_suppressor_stereo
แม้ว่าไมโครโฟนของคุณจะบอกว่าเป็นสเตอริโอ แต่คุณอาจไม่จำเป็นต้องใช้เอาต์พุตสเตอริโอ นอกจากนี้ยังต้องใช้ทรัพยากร 2 เท่าVAD Threshold (%)
, ...systemctl restart --user pipewire.service
Noise Canceling source
เป็นอุปกรณ์อินพุตได้แล้วสำหรับข้อมูลเพิ่มเติม โปรดดูเอกสารประกอบของ PipeWire เกี่ยวกับ Filter-Chains
การแก้ไขปัญหา:
โซลูชันทางเลือกสำหรับการกำหนดค่า PipeWire/PulseAudio ซึ่งใช้ RNNoise เช่นกัน:
TLDR: ใช้ PipeWire... หรือทำตามคำแนะนำด้านล่าง
แนวคิดคือ:
sink_master
) และมี sink อินพุต (พารามิเตอร์ sink_name
sink จะถูกสร้างขึ้น)source
) ไปยัง sink อินพุตของปลั๊กอิน ( sink
) ด้วย 1 ช่องสัญญาณตัวอย่างเช่น หากต้องการสร้างอุปกรณ์โมโนใหม่ที่มีเสียงลดเสียงรบกวนจากไมโครโฟนของคุณ อันดับแรก ให้ค้นหาชื่อไมโครโฟนของคุณโดยใช้ เช่น:
pactl list sources short
จากนั้นสร้างอุปกรณ์ใหม่โดยใช้:
pacmd load-module module-null-sink sink_name=mic_denoised_out rate=48000
pacmd load-module module-ladspa-sink sink_name=mic_raw_in sink_master=mic_denoised_out label=noise_suppressor_mono plugin=/path/to/librnnoise_ladspa.so control=50,20,0,0,0
pacmd load-module module-loopback source= < your_mic_name > sink=mic_raw_in channels=1 source_dont_move=true sink_dont_move=true
จะต้องดำเนินการนี้ทุกครั้งที่เปิดใช้งาน PulseAudio คุณสามารถทำให้สิ่งนี้เป็นอัตโนมัติได้โดยการสร้างไฟล์ใน ~/.config/pulse/default.pa
ด้วยเนื้อหา:
.include /etc/pulse/default.pa
load-module module-null-sink sink_name=mic_denoised_out rate=48000
load-module module-ladspa-sink sink_name=mic_raw_in sink_master=mic_denoised_out label=noise_suppressor_mono plugin=/path/to/librnnoise_ladspa.so control=50,200,0,0,0
load-module module-loopback source=your_mic_name sink=mic_raw_in channels=1 source_dont_move=true sink_dont_move=true
set-default-source mic_denoised_out.monitor
ลำดับของการตั้งค่าใน control=50,200,0,0,0
คือ: VAD Threshold (%)
, VAD Grace Period (ms)
, Retroactive VAD Grace Period (ms)
, Placeholder1
, Placeholder2
หากคุณแน่ใจจริงๆ ว่าต้องการอินพุตสเตอริโอ ให้ใช้ตัวเลือกเหล่านี้แทน:
label=noise_suppressor_stereo
channels=2
หากคุณมีปัญหากับเสียงแตกหรือเวลาแฝงสูง / เพิ่มขึ้นเป็นระยะ การเพิ่ม latency_msec=1
ให้กับลูปแบ็คอาจช่วยได้:
load-module module-loopback source=your_mic_name sink=mic_raw_in channels=1 source_dont_move=true sink_dont_move=true latency_msec=1
pacmd load-module module-remap-source source_name=denoised master=mic_denoised_out.monitor channels=1
คุณอาจยังต้องตั้งค่าอินพุตที่ถูกต้องสำหรับแอปพลิเคชัน ซึ่งสามารถทำได้ในแผงตัวผสมเสียง (ถ้าคุณมี) ในแท็บ 'การบันทึก' ซึ่งคุณควรตั้งค่า 'Monitor of Null Output' เป็นแหล่งที่มา
อ่านเพิ่มเติม:
TODO ยินดีมีส่วนร่วม!
ปลั๊กอินได้รับการทดสอบด้วย:
ฉันไม่เกี่ยวข้องกับงาน RNNoise ดั้งเดิมและไม่มีความเข้าใจใด ๆ เกี่ยวกับโครงข่ายประสาทเทียมที่เกิดซ้ำ
การพึ่งพาภายนอกมีจำหน่ายผ่าน git-subrepo เพื่อให้ไม่จำเป็นต้องใช้ submodules และการแพตช์ subrepos ก็เป็นเรื่องง่าย (ในขณะนี้ เรามีแพตช์สำหรับ JUCE หลายแพตช์)
ยินดีต้อนรับการปรับปรุง! แม้ว่าคุณต้องการบริจาคอะไรก็ตามที่มีขนาดใหญ่ ให้เปิดประเด็นก่อน
รวบรวมสำหรับ x64:
cmake -Bbuild-x64 -H. -GNinja -DCMAKE_BUILD_TYPE=Release
ninja -C build-x64
รวบรวมสำหรับ x32:
cmake -D CMAKE_CXX_FLAGS=-m32 -D CMAKE_C_FLAGS=-m32 -Bbuild-x32 -H. -GNinja -DCMAKE_BUILD_TYPE=Release
ninja -C build-x32
การคอมไพล์ข้ามสำหรับ Windows x64 (การสร้าง MinGW ล้มเหลวในขณะนี้เนื่องจากความไม่เข้ากันบางอย่างใน JUCE):
cmake -Bbuild-mingw64 -H. -GNinja -DCMAKE_TOOLCHAIN_FILE=toolchains/toolchain-mingw64.cmake -DCMAKE_BUILD_TYPE=Release
ninja -C build-mingw64
ตามค่าเริ่มต้น ปลั๊กอินทั้งหมดที่รองรับแพลตฟอร์มกำลังถูกสร้างขึ้น คุณสามารถจงใจปิดปลั๊กอินด้วยแฟล็ก CMake ต่อไปนี้:
BUILD_LADSPA_PLUGIN
BUILD_VST_PLUGIN
BUILD_VST3_PLUGIN
BUILD_LV2_PLUGIN
BUILD_AU_PLUGIN
(macOS เท่านั้น)BUILD_AUV3_PLUGIN
(macOS เท่านั้น)ตัวอย่างเช่น:
cmake -DBUILD_VST_PLUGIN=OFF -DBUILD_LV2_PLUGIN=OFF
โครงการนี้ได้รับอนุญาตภายใต้ GNU General Public License v3.0 - ดูรายละเอียดในไฟล์ LICENSE
ห้องสมุดที่ใช้: