#mp3 #high-level #lame #mp3lame #codec #libmp3lame

no-std mp3lame-encoder

High level bindings to mp3lame encoder

5 releases

0.1.5 Mar 17, 2024
0.1.4 Aug 28, 2023
0.1.2 May 12, 2023
0.1.1 Mar 25, 2023
0.1.0 Dec 10, 2022

#161 in Audio

Download history 49/week @ 2023-12-23 118/week @ 2023-12-30 295/week @ 2024-01-06 262/week @ 2024-01-13 299/week @ 2024-01-20 334/week @ 2024-01-27 568/week @ 2024-02-03 352/week @ 2024-02-10 88/week @ 2024-02-17 94/week @ 2024-02-24 95/week @ 2024-03-02 107/week @ 2024-03-09 244/week @ 2024-03-16 161/week @ 2024-03-23 69/week @ 2024-03-30 57/week @ 2024-04-06

553 downloads per month
Used in tmaze

LGPL-3.0

32KB
548 lines

mp3lame-encoder

Rust Crates.io Documentation

High level wrapper over mp3lame-sys

Example

use mp3lame_encoder::{Builder, Id3Tag, DualPcm, FlushNoGap};

let mut mp3_encoder = Builder::new().expect("Create LAME builder");
mp3_encoder.set_num_channels(2).expect("set channels");
mp3_encoder.set_sample_rate(44_100).expect("set sample rate");
mp3_encoder.set_brate(mp3lame_encoder::Bitrate::Kbps192).expect("set brate");
mp3_encoder.set_quality(mp3lame_encoder::Quality::Best).expect("set quality");
mp3_encoder.set_id3_tag(Id3Tag {
    title: b"My title",
    artist: &[],
    album: b"My album",
    year: b"Current year",
    comment: b"Just my comment",
});
let mut mp3_encoder = mp3_encoder.build().expect("To initialize LAME encoder");

//use actual PCM data
let input = DualPcm {
    left: &[0u16, 0],
    right: &[0u16, 0],
};

let mut mp3_out_buffer = Vec::new();
mp3_out_buffer.reserve(mp3lame_encoder::max_required_buffer_size(input.left.len()));
let encoded_size = mp3_encoder.encode(input, mp3_out_buffer.spare_capacity_mut()).expect("To encode");
unsafe {
    mp3_out_buffer.set_len(mp3_out_buffer.len().wrapping_add(encoded_size));
}

let encoded_size = mp3_encoder.flush::<FlushNoGap>(mp3_out_buffer.spare_capacity_mut()).expect("to flush");
unsafe {
    mp3_out_buffer.set_len(mp3_out_buffer.len().wrapping_add(encoded_size));
}
//At this point your mp3_out_buffer should have full MP3 data, ready to be written on file system or whatever

License

LAME library is under LGPL License. Hence this crate is licensed under the same shitty license

Dependencies

~3MB
~66K SLoC