1 个不稳定版本

0.5.3 2024年7月30日

#223 in 音频

Download history 116/week @ 2024-07-27 6/week @ 2024-08-03

每月 122 次下载

MIT/Apache

200KB
3.5K SLoC

AIFC

Cross-platform tests

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::AifcReadertinyaudio的简单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.0MIT许可证

除非您明确表示,否则任何有意提交以包含在您的工作中的贡献,根据Apache-2.0许可证定义,应按上述方式双重许可,不附加任何额外条款或条件。

依赖关系