dosier / dosier/kodio

OGG Vorbis and Opus decode

Open
#28 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.