08_02 - DSP Integration Layer¶
Complete DSP integration system for AudioLab plugins.
๐ฏ Overview¶
This module provides the infrastructure for integrating DSP engines into plugins:
- Engine Management - Factory, pooling, lifecycle
- Signal Routing - Flexible audio routing with zero-copy optimization
- Modulation - Sample-accurate parameter modulation (LFO, envelopes)
- Optimization - SIMD, cache optimization, vectorization
- Performance Tracking - CPU monitoring, RT-safety validation
๐ Module Structure¶
08_02_dsp_integration_layer/
โโโ 08_02_00_engine_instantiation/ # Engine factory & lifecycle
โโโ 08_02_01_signal_routing/ # Audio routing matrix
โโโ 08_02_02_modulation_system/ # LFO, envelopes, modulation
โโโ 08_02_03_optimization/ # SIMD & cache optimization
โโโ 08_02_04_performance_tracking/ # CPU monitoring & profiling
๐ Quick Start¶
Engine Instantiation¶
#include "08_02_00_engine_instantiation/include/EngineFactory.hpp"
#include "08_02_00_engine_instantiation/include/EnginePool.hpp"
using namespace audiolab::plugins::dsp;
// Register engine type
REGISTER_ENGINE("Compressor", CompressorEngine);
// Create engine
auto factory = EngineFactory::getInstance();
auto engine = factory.createEngine("Compressor");
// Or use pool for efficiency
EnginePool pool("Compressor", 4); // Pre-allocate 4 engines
auto pooled = pool.acquire();
// Use engine...
pool.release(std::move(pooled));
Signal Routing¶
#include "08_02_01_signal_routing/include/RoutingMatrix.hpp"
RoutingMatrix router(8, 8); // 8 in, 8 out
router.prepareToPlay(44100.0);
// Route input 0 to outputs 0 and 1 (stereo split)
router.connect(0, 0, 0.707f); // Left
router.connect(0, 1, 0.707f); // Right
// Process
router.process(inputs, outputs, numSamples);
Modulation System¶
#include "08_02_02_modulation_system/include/LFO.hpp"
#include "08_02_02_modulation_system/include/Envelope.hpp"
#include "08_02_02_modulation_system/include/ModulationMatrix.hpp"
// Create LFO
LFO lfo;
lfo.prepareToPlay(44100.0);
lfo.setWaveform(LFO::Waveform::Sine);
lfo.setFrequency(5.0f);
// Create ADSR
Envelope env;
env.prepareToPlay(44100.0);
env.setAttackTime(0.01f);
env.setDecayTime(0.1f);
env.setSustainLevel(0.7f);
env.setReleaseTime(0.3f);
// Setup modulation routing
ModulationMatrix matrix;
matrix.registerSource("lfo1", &lfo);
matrix.registerSource("env1", &env);
ModulationMatrix::Routing route;
route.sourceId = "lfo1";
route.targetParamId = "cutoff";
route.depth = 0.5f;
matrix.addRouting(route);
// In audio callback
env.noteOn();
matrix.process(numSamples);
lfo.advance(numSamples);
env.advance(numSamples);
SIMD Optimization¶
#include "08_02_03_optimization/include/SIMDHelpers.hpp"
using namespace audiolab::plugins::dsp::simd;
// Check SIMD support
auto support = detectSIMDSupport();
if (support.avx2) {
// Use AVX2 optimized path
}
// SIMD operations
float* result = alignedAlloc<float>(512);
vectorAdd(result, input1, input2, 512);
vectorMultiply(result, input, gain, 512);
Performance Tracking¶
#include "08_02_04_performance_tracking/include/CPUMonitor.hpp"
#include "08_02_04_performance_tracking/include/ProfileScope.hpp"
CPUMonitor monitor;
void processBlock(AudioBuffer& buffer) {
ProfileScope scope("processBlock", &monitor);
monitor.startBlock(buffer.getNumSamples(), getSampleRate());
// Process audio...
monitor.endBlock();
if (monitor.isOverloaded()) {
// Warning: CPU > 90%
}
}
๐ Performance Characteristics¶
| Component | Overhead | Notes |
|---|---|---|
| Engine Factory | < 1 ยตs | Per creation |
| Engine Pool | < 0.01 ยตs | Per acquire |
| Signal Routing | < 1% CPU | Per 512 samples |
| Modulation | < 0.1% CPU | Per source |
| SIMD Helpers | 2-4x speedup | vs scalar |
| CPU Monitor | < 0.01% CPU | Measurement overhead |
๐๏ธ Dependencies¶
- Internal:
08_00_plugin_infrastructure- IAudioEngine, IModulationTarget-
04_CORE/04_05_buffer_management- AudioBuffer -
External:
- C++20 compiler
- Platform SIMD support (SSE2/AVX/NEON)
๐งช Testing¶
# Build all tests
cd tests
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .
# Run tests
./test_engine_instantiation
./test_signal_routing
./test_modulation
./test_optimization
./test_performance_tracking
๐ Implementation Status¶
- โ Phase 1: Engine Instantiation (100%)
- โ Phase 2: Signal Routing (100%)
- โ Phase 3: Modulation System (100%)
- โ Phase 4: Optimization (100%)
- โ Phase 5: Performance Tracking (100%)
Overall: 100% Complete ๐
๐ Documentation¶
Each subdirectory contains detailed README with: - Architecture overview - API reference - Usage examples - Performance notes
๐ง Build Configuration¶
CMake options:
-DBUILD_TESTING=ON # Enable tests
-DENABLE_SIMD=ON # Enable SIMD optimizations (default)
-DENABLE_BENCHMARKS=ON # Build benchmarks
๐ Best Practices¶
- Engine Management
- Use EnginePool for frequently created/destroyed engines
- Always call prepareToPlay() before processing
-
Respect lifecycle state machine
-
Signal Routing
- Pre-allocate buffers before real-time thread
- Use zero-copy optimization where possible
-
Monitor connection count (avoid excessive routing)
-
Modulation
- Keep modulation sources lightweight
- Use sample-accurate interpolation
-
Avoid modulation in inner loops
-
Optimization
- Profile before optimizing
- Use SIMD for bulk operations (> 64 samples)
- Align data to cache lines
-
Avoid branches in hot paths
-
Performance
- Monitor CPU usage continuously
- Validate RT-safety in debug builds
- Set realistic performance budgets
- Use ProfileScope for bottleneck identification
๐ License¶
Part of AudioLab framework. See root LICENSE file.
Version: 1.0.0
Last Updated: 2025-10-09
Maintainer: AudioLab Team