Audio algorithms
for the future

Open-source Rust libraries for real-time audio processing. Zero-cost abstractions, zero allocations on the audio thread.

$ cargo add fft-convolver audio-blocks audio-file

Projects

audio-blocks

★ 11

Real-time safe abstractions over audio data with support for all common layouts.

real-time safeno-stdf32/f64
main.rs
use audio_blocks::*;

// Create a stereo block with 512 samples per channel
let mut block = Planar::<f32>::new(2, 512);

// Process each channel independently
for channel in block.channels_mut() {
    for sample in channel.iter_mut() {
        *sample *= 0.5; // apply gain
    }
}

audio-file

★ 7

Read any audio format and write WAV files with a simple, ergonomic API.

16+ formatssymphoniaresampling
main.rs
use audio_file::read;

// Read any audio format — MP3, FLAC, WAV, OGG, AAC...
let audio = audio_file::read::<f32>(
    "recording.mp3",
    Default::default(),
)?;

println!("Sample rate: {}", audio.sample_rate);
println!("Channels: {}", audio.num_channels);
println!("Samples: {}", audio.samples_interleaved.len());

audio-device

★ 1

Backend-agnostic library for audio I/O devices — one API for JUCE, CPAL, and RtAudio.

multi-backendreal-timecallback API
main.rs
use audio_device::prelude::*;

let device = AudioDevice::new()?;

device.start(
    Config {
        num_input_channels: 2,
        num_output_channels: 2,
        sample_rate: 48000,
        num_frames: 512,
    },
    // Real-time audio callback
    move |input, mut output| {
        output.copy_from_block(&input);
    },
)?;

fft-convolver

★ 33

Fast, real-time safe FFT convolution — zero allocations during audio processing.

real-time safezero-allocf32/f64partitioned FFT
main.rs
use fft_convolver::FFTConvolver;

// Load an impulse response (e.g. a room reverb)
let impulse_response: Vec<f32> = load_ir("hall.wav");

let mut convolver = FFTConvolver::default();
convolver.init(512, &impulse_response)?;

// Process audio — real-time safe, no allocations
let mut output = vec![0.0f32; input.len()];
convolver.process(&input, &mut output)?;

About

neodsp is created by Stephan Eckes, an audio researcher and Rust enthusiast based in Berlin. With a mission to modernize the audio industry, neodsp is building complete, production-ready audio frameworks entirely in Rust — replacing fragmented C++ toolchains with safe, fast, and ergonomic alternatives.