11 unstable releases (4 breaking)

0.5.1 Jan 2, 2021
0.5.0 Aug 27, 2020
0.4.0 Aug 26, 2020
0.3.5 Feb 20, 2020
0.1.0 Jan 31, 2018

#71 in Audio

Download history 2773/week @ 2024-01-06 3509/week @ 2024-01-13 2950/week @ 2024-01-20 2882/week @ 2024-01-27 2469/week @ 2024-02-03 3177/week @ 2024-02-10 4019/week @ 2024-02-17 2730/week @ 2024-02-24 3454/week @ 2024-03-02 3096/week @ 2024-03-09 2798/week @ 2024-03-16 3178/week @ 2024-03-23 3609/week @ 2024-03-30 2583/week @ 2024-04-06 3358/week @ 2024-04-13 2441/week @ 2024-04-20

12,311 downloads per month
Used in 32 crates (21 directly)

MIT license

69KB
1K SLoC

C 826 SLoC // 0.0% comments Shell 173 SLoC // 0.0% comments Rust 151 SLoC // 0.1% comments

minimp3 Rust bindings

Cargo package Cargo package Build Status

Usage example

# Cargo.toml

[dependencies]
minimp3 = "0.5"
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.6–2.6MB
~48K SLoC