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 音频
119 每月下载量
用于 mp3-metadata
2.5MB
23K SLoC
simplemad是libmad的MPEG音频解码库的简单接口。
使用和示例
首先,使用Decoder
从字节数据源创建解码器,使用Decoder::decode
或Decoder::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