noise-reduction-tool (ProNoiseDAW) is a real-time AI-powered noise reduction tool built with RNNoise, featuring a modern GUI.
- Real-time AI Noise Reduction using RNNoise deep learning model
- Live Audio Visualization with dual waveform graphs (input/output)
- Interactive Level Meters showing real-time audio levels
- Modern UI with smooth animations and rounded corners
- Low Latency audio processing (10ms buffer at 48kHz)
- Adjustable Reduction Strength (0-100%)
- PipeWire/PulseAudio Support for modern Linux audio stacks
- Clean, centered layout
- Animated status indicator (pulsing green dot when active)
- Real-time audio waveforms showing before/after processing
- Live level meters for instant feedback
- Red waveform: Raw input audio
- Green waveform: Processed (noise-reduced) output
Debian 13 / Ubuntu:
sudo apt update
sudo apt install build-essential cmake git \
libportaudio2 portaudio19-dev \
libsdl2-dev libgl1-mesa-dev \
pipewire pipewire-pulse wireplumberArch Linux:
sudo pacman -S base-devel cmake git \
portaudio sdl2 mesa \
pipewire pipewire-pulse wireplumber- Clone the repository:
git clone https://github.com/zygim4ntas/noise-reduction-tool.git
cd noise-reduction-tool- Build and install RNNoise:
git clone https://github.com/xiph/rnnoise.git
cd rnnoise
./autogen.sh
./configure
make
sudo make install
sudo ldconfig
cd ..- Download ImGui (v1.90.0 or later):
wget https://github.com/ocornut/imgui/archive/refs/tags/v1.90.0.tar.gz
tar -xzf v1.90.0.tar.gz
cp imgui-1.90.0/*.cpp .
cp imgui-1.90.0/*.h .
cp imgui-1.90.0/backends/imgui_impl_sdl2.* .
cp imgui-1.90.0/backends/imgui_impl_opengl3.* .- Build ProNoiseDAW:
chmod +x build.sh
./build.sh- Run:
./ProNoiseDAW- Start PipeWire (if not already running):
systemctl --user start pipewire pipewire-pulse- Launch ProNoiseDAW:
./ProNoiseDAW-
Adjust noise reduction:
- Use the slider to control reduction strength (0-100%)
- Watch the waveforms to see real-time changes
- Monitor input/output levels with the progress bars
-
Audio flows automatically:
- Microphone input → ProNoiseDAW → System output
- Use with OBS, Discord, or any audio application
The included build.sh makes compilation easy:
#!/bin/bash
g++ -o ProNoiseDAW noise-reduction-tool.cpp \
imgui.cpp imgui_draw.cpp imgui_tables.cpp imgui_widgets.cpp \
imgui_impl_sdl2.cpp imgui_impl_opengl3.cpp \
-lportaudio -lrnnoise -lSDL2 -lGL -ldl -lpthread \
-I. -I/usr/include/SDL2Run with: ./build.sh && ./ProNoiseDAW
Problem: Application crashes immediately after "Audio stream started successfully!"
Solutions:
-
Use PipeWire/PulseAudio devices (not raw ALSA):
- The app automatically prefers
pipewire,pulse, ordefaultdevices - Avoid hardware devices like
hw:0,1which may not support the required format
- The app automatically prefers
-
Ensure PipeWire is running:
systemctl --user status pipewire pipewire-pulse
# If not running:
systemctl --user start pipewire pipewire-pulse- Check available devices:
# The app prints available devices on startup
./ProNoiseDAW
# Look for "Device X: pipewire" or "Device X: default"Problem: Lots of "cannot connect" errors before the app starts
Solution: These are normal. PortAudio tries multiple audio backends (ALSA, JACK, OSS) before finding PipeWire. You can safely ignore these messages. The app will work if you see "Audio stream started successfully!"
Problem: "No valid input/output devices found!"
Solutions:
- Install PipeWire utilities:
sudo apt install pipewire-pulse pipewire-alsa- Add user to audio group:
sudo usermod -a -G audio $USER
# Log out and back in- Check audio devices:
# List audio devices
pactl list short sinks
pactl list short sources
# Or with PipeWire
pw-cli list-objects | grep -A5 "node.name"Problem: Application runs but no window appears
Solutions:
- Check OpenGL support:
glxinfo | grep "OpenGL version"
# Should show version 3.3 or higher- Install Mesa drivers:
sudo apt install libgl1-mesa-glx libgl1-mesa-devProblem: Audio has glitches or interruptions
Solutions:
- Increase buffer size (edit
FRAMES_PER_BUFFERin code):
#define FRAMES_PER_BUFFER 960 // Try 960 or 1920-
Check CPU usage - RNNoise is computationally intensive
-
Use a better audio device - Some hardware doesn't handle low latency well
Problem: Compilation fails with "cannot find -lrnnoise" or similar
Solutions:
- RNNoise not installed:
cd rnnoise
sudo make install
sudo ldconfig- PortAudio not found:
sudo apt install libportaudio2 portaudio19-dev- SDL2 not found:
sudo apt install libsdl2-dev- Audio Backend: PortAudio (cross-platform audio I/O)
- Noise Reduction: RNNoise (recurrent neural network)
- GUI Framework: Dear ImGui with SDL2 + OpenGL3
- Sample Rate: 48kHz (RNNoise requirement)
- Buffer Size: 480 samples (10ms latency)
- Channels: Mono (1 channel)
Microphone → PortAudio → RNNoise → Mixing (strength) → Output
↓ ↓
Input Meter Output Meter
Input Graph Output Graph
- RNNoise: State-of-the-art noise suppression using deep learning
- PortAudio: Reliable, cross-platform audio with low latency
- ImGui: Immediate mode GUI - perfect for real-time visualizations
- PipeWire: Modern Linux audio server with low latency and compatibility
Contributions are welcome! Here are some ideas:
- Spectral visualization (frequency domain)
- Save/load reduction presets
- VST3 plugin version
- Windows/macOS support
- Record processed audio to file
- Multiple noise profile support
- Keyboard shortcuts
This project is licensed under the MIT License - see the LICENSE file for details.
- RNNoise by Xiph.Org Foundation
- Dear ImGui by Omar Cornut
- PortAudio by PortAudio community
- SDL2 by Simple DirectMedia Layer
If you encounter issues:
- Check troubleshooting.md
- Search existing GitHub issues
- Open a new issue with:
- Your Linux distribution and version
- Console output (all error messages)
- Steps to reproduce
