RustyOpus

Hex.pmHexDocsCIPrecompiled NIFsLicense: Apache-2.0

Pure-Rust in-process audio conversion for Elixir. WAV, MP3, and Ogg Opus blobs are handled without C codecs, ffmpeg, Ports, or external processes; raw Opus packets remain available through the compatible packet API.

Headline: convert supported file blobs or metadata-carrying PCM with one small API:

{:ok, opus} = RustyOpus.convert(mp3_blob, to: :ogg_opus, bitrate: 20_000)
{:ok, wav} = RustyOpus.convert(opus, to: :wav, sample_format: :s16)
{:ok, pcm} = RustyOpus.convert(wav, to: :pcm)

That is the whole call. Useful bitrate ladder values: 8_000, 12_000, 16_000, 20_000, 24_000, 32_000.

Quick start

# Dedicated Ogg Opus re-encode retains its compatibility surface
{:ok, smaller} = RustyOpus.reencode(ogg_blob, bitrate: 20_000)
# WAV/MP3/Ogg Opus conversion uses content detection
{:ok, mp3} = RustyOpus.convert(wav_blob, to: :mp3, bitrate: 64_000, bitrate_mode: :vbr)
{:ok, pcm} = RustyOpus.convert(mp3, to: :pcm)
# 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

Metadata is not preserved, file paths and streaming are not supported, and only mono/stereo is accepted. WebM, MP4, AAC, FLAC, compressed WAV, and other Ogg mapping families remain out of scope. 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, rusty_mp3 0.7.0

Development

bin/qa_check.sh

Committed fixtures include an Ogg Opus speech blob for reencode/2 tests. Tests need neither a live database 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.4.0; 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 codecs: opus-rs (BSD-3-Clause) and rusty_mp3 (Apache-2.0) — see NOTICE and provenance.