1 个不稳定版本
0.5.3 | 2024年7月30日 |
---|
#223 in 音频
每月 122 次下载
200KB
3.5K SLoC
AIFC
Rust库,用于读取和写入AIFF和AIFF-C (AIFC) 音频格式。
功能
- 读取AIFF和AIFF-C
- 写入AIFF和AIFF-C
- 没有堆内存分配
- 没有不安全代码
- 没有panic
- 支持无压缩整数和浮点样本
- 支持压缩类型:μ-law,A-law和IMA ADPCM ("ima4")
- 支持高达4GB的音频文件
范围之外
- 不同样本格式之间的转换(例如,i16到f32)。有许多转换方法,因此最好这个crate不执行转换。
用法
读取AIFF/AIFF-C文件
let mut stream = std::io::BufReader::new(std::fs::File::open("test.aiff").expect("Open failed"));
let mut reader = aifc::AifcReader::new(&mut stream).expect("Can't create reader");
let info = reader.read_info().expect("Can't read header");
for sample in reader.samples().expect("Can't iterate samples") {
println!("Got sample {:?}", sample.expect("Sample read error"));
}
使用默认的2个通道、16位/样本和采样率44100写入AIFF-C文件
let mut stream = std::io::BufWriter::new(std::fs::File::create("test.aiff").expect("Open failed"));
let info = aifc::AifcWriteInfo::default();
let mut writer = aifc::AifcWriter::new(&mut stream, &info).expect("Can't create writer");
writer.write_samples_i16(&[ 1, 2, 3, 4 ]).expect("Can't write samples");
writer.finalize().expect("Can't finalize");
有关详细信息,请参阅AIFC API文档。
示例
使用aifc::AifcReader
和tinyaudio的简单AIFF播放器
cd examples/aifc-tinyaudio
cargo run filename.aiff
测试
Toisto AIFF测试套件是子模块,在运行测试之前需要获取。
cd aifc
git submodule update --init
./tools/test.sh
测试应以--- 所有测试OK。
结束。
性能测试
cargo bench
有一个名为“跨平台测试”的GitHub动作(cross-test.yml),它会自动为小端64位x64_86和大端32位PowerPC运行./tools/test.sh
。
参考
许可
根据您的选择,许可为Apache许可证版本2.0或MIT许可证。
除非您明确表示,否则任何有意提交以包含在您的工作中的贡献,根据Apache-2.0许可证定义,应按上述方式双重许可,不附加任何额外条款或条件。