Skip to content

Decode Opus files with libopus - #4

Merged
beneaze merged 1 commit into
mainfrom
fix/opus-decoding
Oct 21, 2026
Merged

beneaze merged 1 commit into
mainfrom
fix/opus-decoding

Conversation

@beneaze

@beneaze beneaze commented Oct 20, 2026

Copy link
Copy Markdown
Owner

Problem

Dropping .opus files into the library imported them (tags are read with lofty), but Symphonia has no Opus decoder, so analysis and playback failed for every one of them. No BPM, key, waveform or audio.

Fix

  • crates/audio/src/decode.rs: a codec registry with Symphonia's enabled decoders plus symphonia_adapter_libopus::OpusDecoder, used by decode_native. Every caller (analysis, playback, stems, Live mode) goes through this function.
  • libopus is built from source by opusic-sys, so no system library is needed. Added to ATTRIBUTION.md (BSD-3-Clause).

Testing

  • New unit test opus_has_a_decoder.
  • analyze example on a real 262 s Ogg Opus track: decodes in 1.9 s; 124 BPM, C#m, sections found.
  • cargo clippy --workspace --all-targets -- -D warnings passes.

🤖 Generated with Claude Code

Symphonia has no Opus decoder, so .opus files (what yt-dlp and many web
sources hand out) imported into the library but could never be analysed
or played. Register symphonia-adapter-libopus alongside Symphonia's own
decoders in the one shared decode path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@beneaze
beneaze merged commit 014cf59 into main Oct 21, 2026
2 checks passed
@beneaze
beneaze deleted the fix/opus-decoding branch October 23, 2026 22:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant