Calibra Effects
Unified audio effects chain for real-time vocal processing.
What Are Audio Effects?
Audio effects transform audio in real-time to improve sound quality or add character:
Noise Gate: Mutes audio below a threshold (removes background noise)
Compressor: Reduces dynamic range (makes quiet parts louder, loud parts quieter)
Reverb: Adds room ambiance (makes vocals sound less "dry")
The effects chain processes audio in order: NoiseGate → Compressor → Reverb
When to Use
| Scenario | Preset | Why |
|---|---|---|
| Karaoke/singing app | VOCAL_CHAIN | Full processing for professional sound |
| Practice/learning | PRACTICE | Minimal processing, hear your raw voice |
| Voice recording | VOICE | Noise gate + light compression |
| Add reverb only | Builder with .addReverb() | Custom chain |
Quick Start
Kotlin
// Create with preset
val effects = CalibraEffects.create(EffectsPreset.VOCAL_CHAIN)
// Process audio in-place
effects.process(samples)
// Cleanup when done
effects.release()Swift
// Create with preset
let effects = CalibraEffects.create(preset: .vocalChain)
// Process audio in-place
effects.process(samples: &samples)
// Cleanup when done
effects.release()Usage Tiers
Tier 1: Presets (80% of users)
Kotlin
// Default vocal chain
val effects = CalibraEffects.create()
// Specific preset
val effects = CalibraEffects.create(EffectsPreset.PRACTICE)Swift
// Default vocal chain
let effects = CalibraEffects.create()
// Specific preset
let effects = CalibraEffects.create(preset: .practice)Tier 2: Config Builder (15% of users)
Kotlin
val config = CalibraEffectsConfig.Builder()
.addNoiseGate() // defaults
.addCompressor(CompressorPreset.VOCALS) // preset
.addReverb(mix = 0.3f, roomSize = 0.5f) // custom params
.build()
val effects = CalibraEffects.create(config)Swift
let config = CalibraEffectsConfig.Builder()
.addNoiseGate()
.addCompressor(preset: .vocals)
.addReverb(mix: 0.3, roomSize: 0.5)
.build()
let effects = CalibraEffects.create(config: config)Tier 3: Runtime Adjustment (5% of users)
Kotlin
// Update parameters at runtime
effects.setCompressorThreshold(-15f)
effects.setReverbMix(0.4f)
effects.setNoiseGateThreshold(-45f)Signal Flow
Input Audio → [Noise Gate] → [Compressor] → [Reverb] → Output Audio
↓ ↓ ↓
Removes noise Evens levels Adds spacePlatform Notes
iOS
Expects 16kHz mono audio (use SonixResampler if needed)
Effects use Accelerate framework for optimal performance
Process on audio thread for lowest latency
Android
Expects 16kHz mono audio (use SonixResampler if needed)
Effects use native C++ for performance
Works with AudioTrack and Oboe
Common Pitfalls
Forgetting to release: Call
effects.release()to free native resourcesWrong sample rate: Effects expect 16kHz; resample first if needed
Processing stereo as mono: Convert to mono first or process channels separately
Too much reverb: Start with low mix values (0.1-0.2) and increase gradually
Compressor pumping: Lower ratio (2:1) for natural sound, higher (8:1) for limiting
See also
Pre-configured effect combinations
Noise gate sensitivity options
Compressor behavior options
Room size and character options
Properties
Functions
Process audio samples in-place through the effects chain. Effects are applied in order: NoiseGate → Compressor → Reverb
Reset reverb state (useful when starting new audio)
Update compressor ratio at runtime
Update compressor threshold at runtime
Update noise gate threshold at runtime
Update reverb wet/dry mix at runtime
Update reverb room size at runtime