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 • Rust 包仓库 38/week @ 2024-03-15 • Rust 包仓库 36/week @ 2024-03-22 • Rust 包仓库 70/week @ 2024-03-29 • Rust 包仓库 41/week @ 2024-04-05 • Rust 包仓库 45/week @ 2024-04-12 • Rust 包仓库 53/week @ 2024-04-19 • Rust 包仓库 41/week @ 2024-04-26 • Rust 包仓库 40/week @ 2024-05-03 • Rust 包仓库 37/week @ 2024-05-10 • Rust 包仓库 42/week @ 2024-05-17 • Rust 包仓库 53/week @ 2024-05-24 • Rust 包仓库 50/week @ 2024-05-31 • Rust 包仓库 28/week @ 2024-06-07 • Rust 包仓库 33/week @ 2024-06-14 • Rust 包仓库 36/week @ 2024-06-21 • Rust 包仓库 14/week @ 2024-06-28 • Rust 包仓库

119 每月下载量
用于 mp3-metadata

MIT 许可证

2.5MB
23K SLoC

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

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

依赖项