2个版本
0.5.1 | 2024年4月26日 |
---|---|
0.5.0 | 2024年4月16日 |
#329 在 多媒体
每月55次下载
120KB
2K SLoC
Ausnd
Rust库,用于读取和写入Sun/Next AU音频格式。特性
- 读取AU文件
- 写入AU文件
- 读取无限AU流
- 无堆内存分配
- 无不安全代码
- 无panic
- 支持未压缩的整数和浮点样本
- 支持压缩类型:μ-law和A-law
- 支持大于4GB的音频流
范围外
- 不同样本格式之间的转换(例如,i16到f32)。转换方式有 很多,因此这个crate不做此操作。
用法
读取AU音频文件
let mut bufrd = std::io::BufReader::new(std::fs::File::open("test.au").expect("File error"));
let mut reader = ausnd::AuReader::new(&mut bufrd).expect("Read error");
let info = reader.read_info().expect("Invalid header");
for sample in reader.samples().expect("Can't read samples") {
println!("Got sample {:?}", sample.expect("Sample error"));
}
写入AU音频文件(默认为2通道,16位有符号整数样本,采样率44100)
let mut bufwr = std::io::BufWriter::new(std::fs::File::create("test.au").expect("File error"));
let winfo = ausnd::AuWriteInfo::default();
let mut writer = ausnd::AuWriter::new(&mut bufwr, &winfo).expect("Write header error");
writer.write_samples_i16(&[ 1, 2, 3, 4 ]).expect("Write sample error");
writer.finalize().expect("Finalize error");
有关详细信息,请参阅 ausnd API文档。
示例
使用 ausnd::AuReader
和 tinyaudio
cd examples/ausnd-tinyaudio
cargo run filename.au
使用 AuStreamParser
和 AuWriter
的简单音频处理器,用于音量和噪声效果
cargo run --example ausnd-piper v0.8 n0.1 < input.au > out.au
该音频处理器可以通过ffmpeg进行管道传输,ffmpeg将mp3转换为AU,然后ausnd-piper将其写入AU,以便ffmpeg将其转换为mp3。
ffmpeg -i music.mp3 -f au - | cargo run --example ausnd-piper v1.5 n0.2 | ffmpeg -i - -y out.mp3
测试
Toisto AU测试套件 是一个子模块,在运行集成测试之前需要获取。
cd ausnd
git submodule update --init
./tools/test.sh
测试应以 --- 所有测试通过。
结束。
性能测试
cargo bench
有一个GitHub操作名为“跨平台测试”(cross-test.yml),它会自动运行 ./tools/test.sh
,针对小端64位x64_86和大端32位PowerPC。
参考
- 维基百科:Au文件格式
- Oracle AU音频文件格式手册页
- 音频文件格式FAQ:文件格式(存档)
- NeXT/Sun声音文件格式
- NeXT soundstruct.h
- SunOS audio_filehdr.h
许可
许可协议为Apache License, Version 2.0或MIT许可协议,您可任选其一。
除非您明确声明,否则根据Apache-2.0许可协议定义的您有意提交并包含在工作中的任何贡献,将按上述协议双重许可,不附加任何额外条款或条件。
依赖项
~55KB