#mpeg #mp3 #libmad

simplemad

libmad的MPEG音频解码库的接口

19个版本

使用旧的Rust 2015

0.9.0 2018年3月11日
0.8.1 2015年11月18日
0.7.1 2015年10月28日
0.2.2 2015年4月23日

#514 in 音频

Download history 38/week @ 2024-03-15 36/week @ 2024-03-22 70/week @ 2024-03-29 41/week @ 2024-04-05 45/week @ 2024-04-12 53/week @ 2024-04-19 41/week @ 2024-04-26 40/week @ 2024-05-03 37/week @ 2024-05-10 42/week @ 2024-05-17 53/week @ 2024-05-24 50/week @ 2024-05-31 28/week @ 2024-06-07 33/week @ 2024-06-14 36/week @ 2024-06-21 14/week @ 2024-06-28

119 每月下载量
用于 mp3-metadata

MIT 许可证

2.5MB
23K SLoC

Shell 7.5K SLoC // 0.2% comments M4 7K SLoC // 0.2% comments C 6.5K SLoC // 0.2% comments Rust 1K SLoC // 0.1% comments GNU Style Assembly 690 SLoC // 0.1% comments Automake 61 SLoC // 0.6% comments

Build Status

simplemad是libmad的MPEG音频解码库的简单接口。

使用和示例

首先,使用Decoder从字节数据源创建解码器,使用Decoder::decodeDecoder::decode_interval。使用get_frame或迭代器接口获取结果。

MP3文件通常以元数据开始或结束,这会导致libmad产生错误。在libmad达到音频数据的开始或文件的末尾之前,可以安全地忽略这些错误。

use simplemad::Decoder;
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 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]);
        },
    }
}

解码30秒到60秒的间隔

let partial_decoder = Decoder::decode_interval(file,
                                               Duration::from_secs(30),
                                               Duration::from_secs(60)).unwrap();

您还可以选择仅解码每个帧的头部。如果您想快速确定文件长度,这将非常有用。

let headers = Decoder::decode_headers(file).unwrap();
let duration = headers.filter_map(|r| {
                          match r {
                              Ok(f) => Some(f.duration),
                              Err(_) => None,
                          }
                      }).fold(Duration::new(0, 0), |acc, dtn| acc + dtn);

文档

http://bendykst.github.io/doc/simplemad/index.html

许可证

MIT

依赖项