Плагин подавления шума в реальном времени для голоса на основе RNNoise от Xiph. Подробнее о базовой библиотеке.
Плагин предназначен для подавления широкого спектра источников шума (из оригинальной статьи): компьютерные вентиляторы, офис, толпа, самолет, автомобиль, поезд, стройка.
Согласно моим тестам, легкий фоновый шум всегда подавляется, громкие звуки, такие как щелчки механической клавиатуры, подавляются при отсутствии голоса, однако их громкость уменьшается только при наличии голоса.
Обратите внимание, что этот плагин не может улучшить качество голоса при плохом микрофоне, он даже может усугубить ситуацию, ошибочно классифицируя голос как шум, что ухудшит и без того не очень хорошее качество голоса.
Плагин работает с одним или несколькими каналами, 16-битным аудиовходом, частотой 48000 Гц.
❗ ❗ ❗ НЕ используйте никакие другие частоты дискретизации, используйте ТОЛЬКО 48000 Гц, убедитесь, что ваш источник звука имеет частоту 48000 Гц, и установите его на 48000 Гц, если это не так.
Имеется минималистичный графический интерфейс со всеми параметрами и диагностической статистикой:
Последние релизы
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 по цепочкам фильтров.
Поиск неисправностей:
Альтернативные решения для конфигурации PipeWire/PulseAudio, которые также используют RNNoise:
TLDR: используйте PipeWire... или следуйте инструкциям ниже.
Идея заключается в следующем:
sink_master
) и имеет входной приемник (параметр sink_name
, приемник будет создан).source
) до входного приемника плагина ( 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
Вам все равно может потребоваться установить правильный вход для приложения. Это можно сделать на панели аудиомикшера (если она у вас есть) на вкладке «Запись», где вы должны установить «Монитор нулевого вывода» в качестве источника.
Дальнейшее чтение:
TODO, вклады приветствуются!
Плагин протестирован с:
Я не связан с оригинальной работой RNNoise и НЕ имею никакого представления о рекуррентных нейронных сетях, на которых она основана.
Внешние зависимости предоставляются через git-subrepo. Так что нет необходимости использовать подмодули, а патчить подрепозитории легко (на данный момент у нас есть несколько патчей для 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 — подробности см. в файле ЛИЦЕНЗИИ.
Используемые библиотеки: