Sonix Metronome
class SonixMetronome
Metronome for practice mode with click track playback.
What is SonixMetronome?
A metronome provides a steady click track to help musicians keep time. SonixMetronome supports:
Configurable BPM (beats per minute)
Distinct sama (downbeat) and regular beat sounds
Talam support with configurable beats per cycle
Runtime tempo and volume adjustments
When to Use
| Scenario | Use This? | Why |
|---|---|---|
| Practice mode timing | Yes | Core use case |
| Sync UI to beat | Yes | Use onBeat callback |
| Play backing track | No | Use SonixPlayer or SonixMixer |
| Record with metronome | Yes | Combine with SonixRecorder |
Quick Start
Kotlin
// Create metronome with default settings
val metronome = SonixMetronome.create(
samaSamplePath = "/path/to/sama.wav",
beatSamplePath = "/path/to/beat.wav"
)
// Wait for samples to load
metronome.isInitialized.collect { ready ->
if (ready) metronome.start()
}
// Control playback
metronome.stop()
metronome.setBpm(140f)
metronome.volume = 0.5f
// Release when done
metronome.release()Content copied to clipboard
Swift
// Create metronome with default settings
let metronome = SonixMetronome.create(
samaSamplePath: "/path/to/sama.wav",
beatSamplePath: "/path/to/beat.wav",
bpm: 120,
beatsPerCycle: 4
)
// Observe initialization
for await ready in metronome.isInitialized {
if ready { metronome.start() }
}
// Control playback
metronome.stop()
metronome.setBpm(bpm: 140)
metronome.volume = 0.5
// Release when done
metronome.release()Content copied to clipboard
Builder Pattern (Advanced)
Kotlin
val metronome = SonixMetronome.Builder()
.samaSamplePath("/path/to/sama.wav")
.beatSamplePath("/path/to/beat.wav")
.bpm(120f)
.beatsPerCycle(4)
.volume(0.8f)
.onBeat { beatIndex -> updateUI(beatIndex) }
.onError { error -> showError(error) }
.build()Content copied to clipboard
Swift
let metronome = SonixMetronome.Builder()
.samaSamplePath(path: "/path/to/sama.wav")
.beatSamplePath(path: "/path/to/beat.wav")
.bpm(bpm: 120)
.beatsPerCycle(count: 4)
.volume(volume: 0.8)
.build()Content copied to clipboard
StateFlows
| StateFlow | Type | Description |
|---|---|---|
isInitialized | Boolean | True when samples are loaded |
isPlaying | Boolean | True while metronome is running |
currentBeat | Int | Current beat index (0-based) |
bpm | Float | Current tempo |
error | SonixError? | Error state, null if no error |
Platform Notes
iOS
Uses AVAudioEngine for low-latency playback
Audio samples must be WAV format
Android
Uses OpenSL ES or AAudio for low-latency playback
Audio samples must be WAV format
Common Pitfalls
Starting before initialized: Wait for
isInitializedto be trueForgetting to release: Call
release()when done to free resourcesInvalid sample paths: Ensure audio files exist at specified paths
BPM range: Valid range is 30-300 BPM
See also
For audio file playback
For multi-track mixing