Crate simplemad [−] [src]
This crate provides an interface to libmad, the MPEG audio decoding library.
To begin, create a new Decoder
from a byte-oriented source using
Decoder::decode
or Decoder::decode_interval
. Fetch results using
get_frame
or the Iterator
interface.
Frame
and MadError
correspond to libmad's struct types mad_pcm
and
mad_error
, respectively. Samples are signed 32 bit integers and are organized
into channels. For stereo, the left channel is channel 0.
MP3 files often begin with metadata, which will cause libmad to produce errors. It is safe to ignore these errors until libmad reaches audio data and starts producing frames.
Examples
#![allow(unused_variables)] use simplemad::{Decoder, Frame}; use std::fs::File; use std::path::Path; let path = Path::new("sample_mp3s/constant_stereo_128.mp3"); let file = File::open(&path).unwrap(); let file_b = File::open(&path).unwrap(); let decoder = Decoder::decode(file).unwrap(); for decoding_result in decoder { match decoding_result { Err(e) => println!("Error: {:?}", e), Ok(frame) => { println!("Frame sample rate: {}", frame.sample_rate); println!("First audio sample (left channel): {}", frame.samples[0][0]); println!("First audio sample (right channel): {}", frame.samples[1][0]); } } } // Decode the interval from 1s to 2s (to the nearest frame) let partial_decoder = Decoder::decode_interval(file_b, 1_000_f64, 2_000_f64); let frames: Vec<Frame> = partial_decoder.unwrap() .filter_map(|r| match r { Ok(f) => Some(f), Err(_) => None}) .collect();
Structs
Decoder |
An interface for the decoding operation |
Frame |
A decoded frame |
Enums
SimplemadError |
An error encountered during the decoding process |