RustyOpus

Hex.pmHexDocsCIPrecompiled NIFsLicense: Apache-2.0

Pure-Rust Opus for Elixir. No C libopus, no ffmpeg, no external process — shrink real Ogg Opus blobs (or work with raw packets/PCM) in one BEAM process.

Headline: take an Ogg Opus file/blob and make it smaller with a numeric bitrate:

{:ok, smaller} = RustyOpus.reencode(ogg_blob, bitrate: 20_000)

That is the whole call. Useful ladder values match MemoMoo-style profiles: 8_000, 12_000, 16_000, 20_000, 24_000, 32_000.

Quick start

# Ogg Opus blob → smaller Ogg Opus blob (default path for files)
{:ok, smaller} = RustyOpus.reencode(ogg_blob, bitrate: 20_000)
# Raw packets / PCM (no container)
{:ok, packets} = RustyOpus.encode(pcm, 16_000, 1, bitrate: 24_000)
{:ok, pcm} = RustyOpus.decode(packets, 16_000, 1)

Data contract

No WebM/MP4. Never launches an external process. See the codec guide.

Features

Supported OS

Precompiled NIFs are published for:

Other targets can build from source with RUSTY_OPUS_BUILD=1 and Rust 1.89.0.

Technology

Elixir moduleNative crateRust packages
RustyOpusnative/rusty_opus_nativeopus-rs 0.1.29

Development

bin/qa_check.sh

Committed fixtures include real MemoMoo audio_versions Ogg Opus speech blobs for reencode/2 tests. Tests need neither the live DB nor ffmpeg.

Release

  1. Bump the version in mix.exs and native/rusty_opus_native/Cargo.toml.
  2. Run bin/qa_check.sh and push the green version commit.
  3. Tag v0.3.2; the release workflow builds and smoke-tests every precompiled NIF.
  4. Publish the Hex package and GitHub release (maintainer step).

License

RustyOpus is licensed under the Apache License 2.0. Bundled codec: opus-rs (BSD-3-Clause) — see NOTICE and provenance.