Sonix Resampler
High-quality audio resampling using libsamplerate.
What is Resampling?
Audio is recorded at a specific sample rate (samples per second). Different systems use different rates:
CD quality: 44100 Hz
Video: 48000 Hz
Calibra APIs: 16000 Hz
Resampling converts audio between sample rates while preserving audio quality.
When to Use
| Scenario | Use This? | Why |
|---|---|---|
| Prepare audio for Calibra | Usually No | SonixDecoder.decode() resamples automatically |
| Custom audio processing | Yes | When you have raw samples at wrong rate |
| Mix audio at different rates | Yes | All tracks need same rate |
Quick Start
Kotlin
// Resample from 44100 Hz to 16000 Hz (for Calibra)
val resampled = SonixResampler.resample(
samples = audioSamples,
fromRate = 44100,
toRate = 16000
)
// Now use with Calibra
val contour = pitchExtractor.extract(resampled, 16000)Swift
// Resample from 44100 Hz to 16000 Hz (for Calibra)
let resampled = SonixResampler.resample(
samples: audioSamples,
fromRate: 44100,
toRate: 16000
)
// Now use with Calibra
let contour = pitchExtractor.extract(audio: resampled, sampleRate: 16000)Quality
Uses libsamplerate (Secret Rabbit Code) which provides:
High-quality sinc interpolation
Minimal aliasing artifacts
Fast performance on mobile devices
Platform Notes
iOS/Android
Uses native libsamplerate library (compiled for each platform)
Processing time scales with audio length and rate ratio
Common Pitfalls
Mono only: Input must be mono; convert stereo to mono first
Memory usage: Creates new array for output (doesn't modify input)
Usually unnecessary:
SonixDecoder.decode()already resamples to 16kHz
See also
For decoding with automatic resampling
For pitch detection (requires 16kHz)