OGG Vorbis and Opus decode
- Dominant language
- Kotlin
- Stars
- 37
- Forks
- 2
- PR merge metrics
- No merged PRs in 30d
Description
## Motivation
Podcasts and web audio often ship as `.ogg` / `.opus`. Kodio cannot open them yet.
## Proposed architecture
1. Pure-Kotlin OGG page/packet demuxer in commonMain (`io/files/ogg/`).
2. Codec backends:
- Vorbis: pure Kotlin or platform decoder (trade-off TBD; size vs accuracy).
- Opus: prefer existing KMP bindings such as [kopus](https://github.com/yankeppey/kopus) (cinterop/JNI; no JS/Wasm), or platform decoders on Apple/Android/Web where available.
Each backend implements `AudioFileCodec` (or an internal demux + decode split that still registers one codec per `AudioFileFormat`).
Metadata: Vorbis comments into `AudioTags`.
## Acceptance criteria
- [ ] OGG demuxer with tests
- [ ] At least one of Vorbis or Opus decode wired through `AudioFileReader`
- [ ] Clear platform matrix in docs (what works on JVM / Android / Apple / JS / Wasm)
- [ ] Magic / extension detection for `.ogg` / `.opus`
## Out of scope
- Encode
- Video in OGG/WebM
## Related
- Audio codec roadmap umbrella issue
- kopus as a possible Opus binding reference
Contributor guide
Research direction
Start by reviewing the proposed commonMain demuxer area in io/files/ogg/ and the AudioFileCodec, AudioFileReader, and AudioTags interfaces. Use the demuxer tests and platform documentation as checkpoints; done means a tested OGG demuxer, at least one Vorbis or Opus decoder wired in, format detection, metadata handling, and a clear JVM/Android/Apple/JS/Wasm matrix.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- kotlin
- Domain
- audio-video-rtc
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100