#mpeg #decoder #audio-decoder #mp3 #media

minimp3_fixed

Rust bindings for the minimp3 library. With Security patch applied

3 releases

0.5.4 Jul 25, 2023
0.5.3 Jul 25, 2023
0.5.2 Jul 25, 2023

#1139 in Audio

Download history 1289/week @ 2024-12-26 1463/week @ 2025-01-02 1529/week @ 2025-01-09 1617/week @ 2025-01-16 1369/week @ 2025-01-23 1091/week @ 2025-01-30 1629/week @ 2025-02-06 1406/week @ 2025-02-13 1551/week @ 2025-02-20 1595/week @ 2025-02-27 2157/week @ 2025-03-06 1808/week @ 2025-03-13 1826/week @ 2025-03-20 1400/week @ 2025-03-27 1187/week @ 2025-04-03 1138/week @ 2025-04-10

5,906 downloads per month
Used in 10 crates (4 directly)

MIT license

12KB
141 lines

minimp3 Rust bindings

A fixed non depercated version of minimp3 that applies a vital security patch

Usage example

# Cargo.toml

[dependencies]
minimp3_fixed = "0.5.3"
use minimp3::{Decoder, Frame, Error};

use std::fs::File;

fn main() {
    let mut decoder = Decoder::new(File::open("audio_file.mp3").unwrap());

    loop {
        match decoder.next_frame() {
            Ok(Frame { data, sample_rate, channels, .. }) => {
                println!("Decoded {} samples", data.len() / channels)
            },
            Err(Error::Eof) => break,
            Err(e) => panic!("{:?}", e),
        }
    }
}

Async I/O

The decoder can be used with Tokio via the async_tokio feature flag.

# Cargo.toml

[dependencies]
minimp3 = { version = "0.4", features = ["async_tokio"] }

# tokio runtime
tokio = {version = "0.2", features = ["full"] }
use minimp3::{Decoder, Frame, Error};

use tokio::fs::File;

#[tokio::main]
async fn main() {
    let file = File::open("minimp3-sys/minimp3/vectors/M2L3_bitrate_24_all.bit").await.unwrap();
    let mut decoder = Decoder::new(file);

    loop {
        match decoder.next_frame_future().await {
            Ok(Frame {
                   data,
                   sample_rate,
                   channels,
                   ..
               }) => println!("Decoded {} samples", data.len() / channels),
            Err(Error::Eof) => break,
            Err(e) => panic!("{:?}", e),
        }
    }
}

Dependencies

~0.5–7MB
~48K SLoC