Kopus
A Kotlin Multiplatform library providing OPUS audio codec functionality for Android and iOS platforms.

Features
- Cross-platform: Supports Android and iOS through Kotlin Multiplatform
- High-quality audio: Based on the libopus 1.5.2 codec
- Flexible encoding: Support for multiple sample rates, channels, and application modes
- Multiple data formats: Encode/decode both 16-bit PCM (Short) and floating-point (Float) audio
Installation
Add the dependency to your build.gradle.kts:
dependencies {
implementation("io.voxkit:kopus:$kopus_version")
}
Quick Start
Basic Encoding and Decoding
import io.voxkit.kopus.*
encoder = Opus.encoder(
sampleRate = SampleRate.RATE_48K,
channels = Channels.STEREO,
application = OpusApplication.AUDIO
)
decoder = Opus.decoder(
sampleRate = SampleRate.RATE_48K,
channels = Channels.STEREO
)
pcmInput: ShortArray =
frameSize =
encodedBuffer = ByteArray(OpusEncoder.DEFAULT_OUTPUT_BUFFER_SIZE)
encodedLength = encoder.encode(pcmInput, frameSize, encodedBuffer)
decodedBuffer = ShortArray(frameSize * )
encodedData = encodedBuffer.copyOf(encodedLength)
decodedSamples = decoder.decode(encodedData, frameSize, decodedBuffer)
encoder.close()
decoder.close()
Configuration Options
Sample Rates
SampleRate.RATE_8K (8 kHz)
SampleRate.RATE_12K (12 kHz)
SampleRate.RATE_16K (16 kHz)
SampleRate.RATE_24K (24 kHz)
SampleRate.RATE_48K (48 kHz)
Channels
Channels.MONO - Single channel
Channels.STEREO - Two channels
Application Modes
OpusApplication.VOIP - Optimize for voice calls
OpusApplication.AUDIO - Optimize for music/general audio
OpusApplication.LOW_DELAY - Optimize for low-latency applications
Advanced Features
Packet Loss Concealment (PLC)
val missingSamples = decoder.decode(
data = null,
frameSize = expectedFrameSize,
pcm = outputBuffer
)
Forward Error Correction (FEC)
val recoveredSamples = decoder.decode(
data = corruptedPacket,
frameSize = expectedFrameSize,
pcm = outputBuffer,
decodeFec = true
)
Platform Support
| Platform | Status | Implementation |
|---|
| Android | ✅ Supported | JNI/NDK with C++ bridge |
| iOS | ✅ Supported | Kotlin/Native cinterop |
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Links