Skip to content

Commit 914c888

Browse files
committed
Add rnnoise module for background noise reduction
1 parent e4f2c2a commit 914c888

11 files changed

Lines changed: 1050 additions & 8 deletions

File tree

.github/workflows/build-distros.yml

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,42 +35,43 @@ jobs:
3535
sed -i 's/^Types: deb/Types: deb deb-src/' /etc/apt/sources.list.d/ubuntu.sources
3636
DEBIAN_FRONTEND=noninteractive apt-get -qq update
3737
DEBIAN_FRONTEND=noninteractive apt-get -yqq build-dep mlt
38-
DEBIAN_FRONTEND=noninteractive apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev
38+
DEBIAN_FRONTEND=noninteractive apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev librnnoise-dev
3939
- name: ubuntu-24.04
4040
image: ubuntu:24.04
4141
setup_script: |
4242
sed -i 's/^Types: deb/Types: deb deb-src/' /etc/apt/sources.list.d/ubuntu.sources
4343
DEBIAN_FRONTEND=noninteractive apt-get -qq update
4444
DEBIAN_FRONTEND=noninteractive apt-get -yqq build-dep mlt
45-
DEBIAN_FRONTEND=noninteractive apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev
45+
DEBIAN_FRONTEND=noninteractive apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev librnnoise-dev
4646
- name: ubuntu-22.04
4747
image: ubuntu:22.04
4848
setup_script: |
4949
sed -i '/^#\sdeb-src /s/^#//' "/etc/apt/sources.list"
5050
DEBIAN_FRONTEND=noninteractive apt-get -qq update
5151
DEBIAN_FRONTEND=noninteractive apt-get -yqq build-dep mlt
52-
DEBIAN_FRONTEND=noninteractive apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev libqt6core5compat6-dev
52+
DEBIAN_FRONTEND=noninteractive apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev libqt6core5compat6-dev librnnoise-dev
5353
- name: debian-unstable
5454
image: debian:unstable
5555
setup_script: |
5656
echo 'deb-src http://deb.debian.org/debian unstable main' >> /etc/apt/sources.list
5757
apt-get -qq update
5858
apt-get -yqq build-dep mlt
59+
apt-get -yqq install librnnoise-dev
5960
- name: debian-testing
6061
image: debian:testing
6162
setup_script: |
6263
echo 'deb-src http://deb.debian.org/debian testing main' >> /etc/apt/sources.list
6364
apt-get -qq update
6465
apt-get -yqq build-dep mlt
65-
apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev
66+
apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev librnnoise-dev
6667
- name: debian-stable
6768
image: debian:stable
6869
setup_script: |
6970
echo 'deb-src http://deb.debian.org/debian stable main\ndeb-src http://deb.debian.org/debian stable-updates main' >> /etc/apt/sources.list
7071
echo 'deb http://deb.debian.org/debian bookworm-backports main' >> /etc/apt/sources.list
7172
apt-get -qq update
7273
apt-get -yqq build-dep mlt
73-
apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev
74+
apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev librnnoise-dev
7475
- name: fedora-44
7576
image: fedora:44
7677
setup_script: |
@@ -83,7 +84,7 @@ jobs:
8384
libtheora-devel libvorbis-devel libvdpau-devel \
8485
libsoup-devel liboil-devel python-devel alsa-lib \
8586
pulseaudio-libs-devel gcc-c++ cmake ffmpeg-free-devel \
86-
movit-devel rubberband-devel vid.stab-devel
87+
movit-devel rubberband-devel vid.stab-devel rnnoise-devel
8788
- name: fedora-38
8889
image: fedora:38
8990
setup_script: |
@@ -96,7 +97,7 @@ jobs:
9697
libtheora-devel libvorbis-devel libvdpau-devel \
9798
libsoup-devel liboil-devel python-devel alsa-lib \
9899
pulseaudio-libs-devel gcc-c++ cmake ffmpeg-free-devel \
99-
movit-devel rubberband-devel vid.stab-devel
100+
movit-devel rubberband-devel vid.stab-devel rnnoise-devel
100101
101102
container:
102103
image: ${{ matrix.image }}

.github/workflows/build-linux.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
sudo sed -i '/^#\sdeb-src /s/^#//' "/etc/apt/sources.list"
3939
sudo apt-get -qq update
4040
sudo apt-get -yqq build-dep mlt
41-
sudo apt-get -yqq install qt6-base-dev libqt6svg6-dev libqt6core5compat6-dev
41+
sudo apt-get -yqq install qt6-base-dev libqt6svg6-dev libqt6core5compat6-dev librnnoise-dev
4242
sudo apt-get -yqq install cmake ninja-build kwalify
4343
cmake -D CMAKE_BUILD_TYPE=Debug -D BUILD_TESTING=ON -D SWIG_PYTHON=ON -S . -B build -G Ninja
4444
cmake --build build

CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ option(MOD_QT6 "Enable Qt6 module (GPL)" ON)
4040
option(MOD_RESAMPLE "Enable Resample module (GPL)" ON)
4141
option(MOD_RTAUDIO "Enable RtAudio module" ON)
4242
option(MOD_RUBBERBAND "Enable Rubberband module (GPL)" ON)
43+
option(MOD_RNNOISE "Enable RNNoise noise-reduction module" ON)
4344
option(MOD_SDL1 "Enable SDL1 module" OFF)
4445
option(MOD_SDL2 "Enable SDL2 module" ON)
4546
option(MOD_SOX "Enable SoX module" ON)
@@ -368,6 +369,11 @@ if(MOD_RUBBERBAND)
368369
list(APPEND MLT_SUPPORTED_COMPONENTS rubberband)
369370
endif()
370371

372+
if(MOD_RNNOISE)
373+
pkg_check_modules(rnnoise REQUIRED IMPORTED_TARGET rnnoise)
374+
list(APPEND MLT_SUPPORTED_COMPONENTS rnnoise)
375+
endif()
376+
371377
if(MOD_SDL1)
372378
pkg_check_modules(sdl REQUIRED IMPORTED_TARGET sdl)
373379
list(APPEND MLT_SUPPORTED_COMPONENTS sdl)
@@ -589,6 +595,7 @@ add_feature_info("Module: Qt6" MOD_QT6 "")
589595
add_feature_info("Module: Resample" MOD_RESAMPLE "")
590596
add_feature_info("Module: RtAudio" MOD_RTAUDIO "")
591597
add_feature_info("Module: Rubberband" MOD_RUBBERBAND "")
598+
add_feature_info("Module: RNNoise" MOD_RNNOISE "")
592599
add_feature_info("Module: SDL1" MOD_SDL1 "")
593600
add_feature_info("Module: SDL2" MOD_SDL2 "")
594601
add_feature_info("Module: SoX" MOD_SOX "")

src/modules/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ if(MOD_RUBBERBAND)
7272
add_subdirectory(rubberband)
7373
endif()
7474

75+
if(MOD_RNNOISE)
76+
add_subdirectory(rnnoise)
77+
endif()
78+
7579
if(MOD_SDL1)
7680
add_subdirectory(sdl)
7781
endif()

src/modules/rnnoise/CMakeLists.txt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
add_library(mltrnnoise MODULE factory.c filter_rnnoise.c link_rnnoise.c)
2+
3+
file(GLOB YML "*.yml")
4+
add_custom_target(Other_rnnoise_Files SOURCES ${YML})
5+
6+
include(GenerateExportHeader)
7+
generate_export_header(mltrnnoise)
8+
9+
target_compile_options(mltrnnoise PRIVATE ${MLT_COMPILE_OPTIONS})
10+
target_include_directories(mltrnnoise PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
11+
target_link_libraries(mltrnnoise PRIVATE mlt PkgConfig::rnnoise)
12+
13+
set_target_properties(mltrnnoise PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${MLT_MODULE_OUTPUT_DIRECTORY}")
14+
15+
install(TARGETS mltrnnoise LIBRARY DESTINATION ${MLT_INSTALL_MODULE_DIR})
16+
install(FILES filter_rnnoise.yml link_rnnoise.yml DESTINATION ${MLT_INSTALL_DATA_DIR}/rnnoise)

src/modules/rnnoise/factory.c

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* factory.c -- the factory method interfaces for the rnnoise module
3+
* Copyright (C) 2026 Meltytech, LLC
4+
*
5+
* This library is free software; you can redistribute it and/or
6+
* modify it under the terms of the GNU Lesser General Public
7+
* License as published by the Free Software Foundation; either
8+
* version 2.1 of the License, or (at your option) any later version.
9+
*
10+
* This library is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13+
* Lesser General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU Lesser General Public
16+
* License along with this library; if not, write to the Free Software
17+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18+
* 02110-1301 USA
19+
*/
20+
21+
#include "mltrnnoise_export.h"
22+
#include <framework/mlt.h>
23+
#include <limits.h>
24+
#include <string.h>
25+
26+
extern mlt_filter filter_rnnoise_init(mlt_profile profile,
27+
mlt_service_type type,
28+
const char *id,
29+
char *arg);
30+
extern mlt_link link_rnnoise_init(mlt_profile profile,
31+
mlt_service_type type,
32+
const char *id,
33+
char *arg);
34+
35+
static mlt_properties metadata(mlt_service_type type, const char *id, void *data)
36+
{
37+
char file[PATH_MAX];
38+
snprintf(file, PATH_MAX, "%s/rnnoise/%s", mlt_environment("MLT_DATA"), (char *) data);
39+
return mlt_properties_parse_yaml(file);
40+
}
41+
42+
MLTRNNOISE_EXPORT MLT_REPOSITORY
43+
{
44+
MLT_REGISTER(mlt_service_filter_type, "rnnoise", filter_rnnoise_init);
45+
MLT_REGISTER(mlt_service_link_type, "rnnoise", link_rnnoise_init);
46+
MLT_REGISTER_METADATA(mlt_service_filter_type, "rnnoise", metadata, "filter_rnnoise.yml");
47+
MLT_REGISTER_METADATA(mlt_service_link_type, "rnnoise", metadata, "link_rnnoise.yml");
48+
}

0 commit comments

Comments
 (0)