rnnoise
Библиотека для подавления шума в аудиосигналах в реальном времени. Она использует гибридный подход, сочетающий рекуррентные нейронные сети (RNN) с традиционными методами цифровой обработки сигналов (DSP). Благодаря высокой эффективности и малой вычислительной сложности, RNNoise способна работать даже на встраиваемых устройствах, и широко применяется в системах голосовой связи, включая WebRTC.
Особенности
- гибридная архитектура, объединяющая рекуррентные нейросети (GRU) для оценки шума и традиционные DSP-алгоритмы для фильтрации;
- работа в реальном времени с задержкой всего 10 миллисекунд на кадр;
- обработка полночастотного (full-band) аудио с частотой дискретизации 48 кГц;
- поддержка моно-сигнала с разрядностью 16 бит;
- возможность использования предобученных моделей, а также обучения собственных моделей на пользовательских данных.
Основные компоненты
RNNoise предоставляет API на языке C для интеграции в приложения, а также включает примеры использования и утилиты командной строки. Все основные операции сосредоточены вокруг состояния обработчика, которое инкапсулирует нейросетевые веса, DSP-параметры и буферы для покадровой обработки (подробнее с документацией можно ознакомиться здесь).
Инициализация и управление состоянием
Центральным объектом является непрозрачный указатель RNNoiseState, который создаётся один раз для каждого потока аудио и хранит всю необходимую внутреннюю информацию. Инициализация подготавливает нейросетевые веса, таблицы для оконного преобразования и буферы для перекрытия кадров.
Основные функции:
rnnoise_create()— создаёт новое состояние и загружает встроенную модель шумоподавления. При необходимости можно передать путь к внешнему файлу с моделью (если библиотека скомпилирована с поддержкой этой возможности). Возвращает указатель на состояние илиNULLв случае ошибки.rnnoise_destroy()— освобождает всю память, связанную с состоянием, включая внутренние буферы и веса нейросети.rnnoise_get_frame_size()— возвращает фиксированный размер кадра в сэмплах (480 сэмплов, что соответствует 10 мс при частоте 48 кГц). Это значение необходимо для выделения входных и выходных буферов правильного размера.
Обработка аудиокадров
Основная функциональность библиотеки реализована в функциях обработки одного кадра аудиоданных. Входной и выходной сигналы представляют собой массивы 16-битных целых чисел со знаком.
Ключевая функция:
rnnoise_process_frame()— обработка одного кадра аудиоданных. Принимает указатель на состояние, указатель на входной буфер (зашумлённая речь) и указатель на выходной буфер (очищенная речь). Входные данные заменяются обработанными Функция автоматически вычисляет вероятность наличия голоса (Voice Activity Detection, VAD), которая может быть использована для дополнительной логики в приложении.
Работа с моделями
По умолчанию библиотека поставляется со встроенной моделью, обученной на 6.4 ГБ зашумлённых речевых данных. Однако архитектура позволяет подменять модель без перекомпиляции:
- Встроенная модель — оптимальна для большинства случаев общего назначения, хорошо справляется со стационарными шумами (вентиляторы, кондиционеры) и нестационарными помехами (клавиатура, музыка на заднем плане).
- Пользовательские модели — могут быть обучены с помощью предоставленных скриптов на Python (в отдельном репозитории rnnoise-training). Это позволяет адаптировать шумоподавление под конкретные условия, например, для подавления шума в автомобиле или производственном цехе. Модель экспортируется в бинарный файл, который загружается при создании состояния.
- Формат модели — веса хранятся в компактном виде с пониженной точностью (16‑битные числа с фиксированной точкой), что обеспечивает малый размер и быстрые вычисления на процессорах без FPU.