Expand description
§mkaudiolibrary
A Rust library for real-time audio signal processing, featuring analog modeling through numeric functions and circuit simulation via Modified Nodal Analysis (MNA).
Every audio-sample-carrying API in this crate - dsp, processor,
audiofile, host, [realtime] - operates on plain f32 (matching
VST3/AU/MKAP plugin hosting’s native sample format, and [sim]’s own
f32 circuit models), passed as plain &[f32]/&mut [f32] slices or
the unlocked buffer::Buffer<f32> wrapper. None of this crate’s own
processors share buffers across threads internally, so nothing here
pays for locking that has no reader on the other end; if you do need to
hand a buffer to another thread (e.g. an audio thread feeding a UI
meter), wrap it yourself with whatever synchronization actually fits.
§Features
- Analog modeling - asymmetric log-curve saturation, and (via the
simfeature) physically-modeled vacuum tube saturation - Circuit simulation - real-time MNA solver for reactive circuits
(
dsp::Circuit), plus a full tube/diode/transistor + Wave Digital Filter circuit modeling toolkit (see [sim],simfeature) - DSP primitives - convolution, IIR (biquad/Butterworth) and FIR (windowed-sinc) filtering, compression/limiting/gating, delay, integer oversampling, and FFT-based sample-rate conversion - all with pre-allocated scratch buffers so steady-state processing never allocates
- SIMD - AVX2+FMA/SSE2 (
x86_64) or NEON (aarch64) hot loops (optionalsimdfeature) - Time-frequency analysis - DFT, FFT, DCT, STFT, CWT, CQT, mel spectrograms (see
tf) - Audio file I/O - WAV, BWF, and AIFF format support with Buffer integration
- Plugin hosting - load and run MKAP, VST3, and AUv2 (macOS) plugins through one trait (see
host) - MKAP plugin system - native format for building your own modular processing chains
- Real-time streaming - RTAudio-style API with real CoreAudio/WASAPI/ALSA backends (optional
realtimefeature)
§Quick Start
use mkaudiolibrary::audiofile::{AudioFile, FileFormat};
use mkaudiolibrary::dsp::Compression;
// Load an audio file
let mut audio = AudioFile::default();
audio.load("input.wav");
// Convert to buffers for processing
let mut buffers = audio.to_buffers();
// Apply compression
let mut comp = Compression::new(audio.sample_rate());
comp.threshold = -12.0;
comp.ratio = 4.0;
for buffer in &mut buffers {
let mut output = mkaudiolibrary::buffer::Buffer::new(buffer.len());
comp.run(buffer, &mut output);
// ... use processed output
}
// Save result
audio.save("output.wav", FileFormat::Wav);§Modules
buffer- plain (unlocked) audio sample containers (Buffer,PushBuffer,CircularBuffer)dsp- digital signal processing componentssimd- SIMD-accelerated primitives used bydspandtf’s hot loopstf- time-frequency analysis (DFT, FFT, DCT, STFT, CWT, CQT, mel spectrograms)- [
sim] - analog circuit simulation: tubes, diodes, transistors, WDF networks (simfeature) audiofile- WAV/BWF/AIFF file loading and savingprocessor- MKAP plugin format and dynamic loadinghost- unified plugin hosting for MKAP, VST3 (vst3feature), and AUv2 (aufeature)- [
realtime] - real-time audio streaming I/O (requiresrealtimefeature)
§DSP Processing Examples
§Saturation (Analog Modeling)
use mkaudiolibrary::dsp::Saturation;
use mkaudiolibrary::buffer::Buffer;
let sat = Saturation::new(10.0, 10.0, 1.0, 1.0, 0.0, false);
let input = Buffer::from_slice(&[0.0, 0.5, 1.0, -0.5, -1.0]);
let mut output = Buffer::new(5);
sat.run(&input, &mut output);§Circuit Simulation
use mkaudiolibrary::dsp::{Circuit, Resistor, Capacitor};
// RC lowpass filter: R=1kΩ, C=1µF, fc ≈ 159Hz
let mut circuit = Circuit::new(44100.0, 2);
circuit.add_component(Box::new(Resistor::new(1, 2, 1000.0)));
circuit.add_component(Box::new(Capacitor::new(2, 0, 1e-6)));
circuit.preprocess(10.0);
let output = circuit.process(1.0, 2); // Input 1V, probe node 2§Dynamics Processing
use mkaudiolibrary::dsp::{Compression, Limit, Gate};
let mut compressor = Compression::new(44100.0);
compressor.threshold = -20.0; // dB
compressor.ratio = 4.0; // 4:1
let mut limiter = Limit::new(44100.0);
limiter.ceiling = -0.1; // dB
let mut gate = Gate::new(44100.0);
gate.threshold = -40.0; // dB§IIR/FIR Filtering
use mkaudiolibrary::dsp::iir::{Biquad, BiquadType};
use mkaudiolibrary::dsp::fir::FirFilter;
let mut lowpass = Biquad::new(BiquadType::LowPass, 44100.0, 1000.0, 0.707, 0.0);
let y = lowpass.process(0.5);
let mut fir_lp = FirFilter::lowpass(101, 44100.0, 1000.0);
let y2 = fir_lp.process(0.5);§License
MIT License.
Modules§
- audiofile
- Audio file loading and saving for WAV and AIFF formats.
- buffer
- Plain (unlocked) audio sample containers for real-time processing.
- dsp
- Digital signal processing components for real-time audio.
- host
- Plugin hosting for MKAP, VST3, and AUv2 formats.
- processor
- MKAU plugin format for modular audio processing chains.
- simd
- SIMD-accelerated primitives for hot per-sample DSP/TF loops.
- tf
- Time-frequency analysis: DFT, FFT, DCT, STFT/multi-resolution STFT, CWT, CQT, and mel spectrograms. Time-frequency analysis: DFT, FFT, DCT, STFT (and multi-resolution STFT), CWT, CQT, and mel spectrograms.
Macros§
- declare_
plugin - Declare a plugin for dynamic loading.