Sonix Player
Unified audio player for playback with pitch shifting and tempo control.
What is SonixPlayer?
SonixPlayer plays audio files with real-time control over:
Pitch: Shift up/down by semitones without affecting speed
Tempo: Speed up/slow down without affecting pitch
Volume: Control playback volume
Looping: Repeat audio any number of times
Use it for:
Karaoke apps: Play backing tracks with pitch/tempo adjustment
Music practice: Slow down songs to learn parts
Audio players: Standard playback with seek and loop
Quick Start
Kotlin
val player = SonixPlayer.create("song.mp3")
player.play()
// Later...
player.pause()
player.release()Swift
let player = try await SonixPlayer.create(source: "song.mp3")
player.play()
// Later...
player.pause()
player.release()Usage Tiers
Tier 1: Zero-Config (80% of users)
Kotlin
val player = SonixPlayer.create("song.mp3")
player.play()Swift
let player = try await SonixPlayer.create(source: "song.mp3")
player.play()Tier 2: With Config (15% of users)
Kotlin
val config = SonixPlayerConfig.Builder()
.volume(0.8f)
.pitch(-2f) // Lower by 2 semitones
.tempo(0.75f) // 75% speed
.loopCount(3) // Repeat 3 times
.onComplete { println("Done!") }
.build()
val player = SonixPlayer.create("song.mp3", config)Swift
let config = SonixPlayerConfig.Builder()
.volume(0.8)
.pitch(-2)
.tempo(0.75)
.loopCount(3)
.onComplete { print("Done!") }
.build()
let player = try await SonixPlayer.create(source: "song.mp3", config: config)Tier 3: Runtime Control (5% of users)
Kotlin
player.pitch = -3f // Change key at runtime
player.tempo = 0.5f // Slow down to half speed
player.volume = 0.5f // Reduce volumePlatform Notes
iOS
Uses AVFoundation under the hood
Supports M4A, MP3, WAV, and other system-supported formats
Audio session automatically configured for playback
Android
Uses ExoPlayer under the hood
Supports M4A, MP3, WAV, OGG, and other ExoPlayer-supported formats
Audio focus handled automatically
Common Pitfalls
Forgetting to release: Call
player.release()to free resourcesFile not found: Ensure path is accessible (bundle/assets on iOS/Android)
Extreme tempo values: Keep between 0.25 and 4.0 for quality audio
Using after release: Create a new player if you need to play again
See also
Configuration options for playback
For recording audio
For coordinated playback with live evaluation
Types
Listener interface for playback events. Alternative to StateFlow observation and Builder callbacks.
Properties
Functions
Set a listener for playback events.
Installs a processing tap to receive and modify audio buffers during playback.
Smoothly transition volume with easing curve.