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).
§Features
- Thread-safe buffers - Concurrent access with
RwLock-based locking - Analog modeling - Asymmetric saturation for tube/tape-style harmonics
- Circuit simulation - Real-time MNA solver for reactive circuits
- DSP primitives - Convolution, compression, limiting, and delay
- Audio file I/O - WAV and AIFF format support with Buffer integration
- Plugin system - MKAU format for modular processing chains
- Real-time streaming - RTAudio-style API for audio I/O (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 thread-safe buffers for processing
let buffers = audio.to_buffers();
// Apply compression
let mut comp = Compression::new(audio.sample_rate() as f64);
comp.threshold = -12.0;
comp.ratio = 4.0;
for buffer in &buffers {
let output = mkaudiolibrary::buffer::Buffer::new(buffer.len());
comp.run(buffer, &output);
// ... use processed output
}
// Save result
audio.save("output.wav", FileFormat::Wav);§Modules
buffer- Thread-safe audio buffers (Buffer,PushBuffer,CircularBuffer)dsp- Digital signal processing componentsaudiofile- WAV/AIFF file loading and savingprocessor- MKAU plugin format and dynamic loading- [
realtime] - Real-time audio streaming I/O (requiresrealtimefeature)
§Thread Safety
All buffer types use Arc<RwLock<...>> internally, enabling:
- Multiple concurrent readers
- Exclusive writer access
- Safe sharing across threads via
Clone
ⓘ
use mkaudiolibrary::buffer::Buffer;
use std::thread;
let buffer = Buffer::<f64>::new(1024);
let buffer_clone = buffer.clone(); // Shares underlying data
thread::spawn(move || {
let mut guard = buffer_clone.write();
guard[0] = 1.0;
});§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 output = Buffer::new(5);
sat.run(&input, &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};
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§License
This library is dual-licensed:
- GPL-3.0 for open source projects
- Commercial license available for closed source usage
For commercial licensing inquiries, contact: minjaekim@mkaudio.company
Modules§
- audiofile
- Audio file loading and saving for WAV and AIFF formats.
- buffer
- Thread-safe audio buffers for real-time concurrent processing.
- dsp
- Digital signal processing components for real-time audio.
- processor
- MKAU plugin format for modular audio processing chains.
Macros§
- declare_
plugin - Declare a plugin for dynamic loading.