22个版本
使用旧Rust 2015
0.2.11-alpha.0 | 2022年12月19日 |
---|---|
0.2.9-alpha.0 | 2022年12月19日 |
0.2.5-alpha.0 | 2022年6月21日 |
0.2.4-alpha.0 | 2022年3月14日 |
0.1.42-alpha.0 | 2021年10月27日 |
#49 in #wave
51 每月下载量
在 6 个crate中使用(通过 surge-wavetable)
120KB
2K SLoC
Hound
Rust中的一个wav编码和解码库。
Hound可以读取和写入WAVE音频格式,这是一种用于原始、未压缩音频的通用格式。编写它的主要动机是为了测试Claxon,这是一个用Rust编写的FLAC解码库。
示例
以下示例渲染一个440 Hz的正弦波,并以单声道wav文件的形式存储,采样率为44.1 kHz,每个样本16位。
use std::f32::consts::PI;
use std::i16;
use hound;
let spec = hound::WavSpec {
channels: 1,
sample_rate: 44100,
bits_per_sample: 16,
sample_format: hound::SampleFormat::Int,
};
let mut writer = hound::WavWriter::create("sine.wav", spec).unwrap();
for t in (0 .. 44100).map(|x| x as f32 / 44100.0) {
let sample = (t * 440.0 * 2.0 * PI).sin();
let amplitude = i16::MAX as f32;
writer.write_sample((sample * amplitude) as i16).unwrap();
}
当writer被丢弃时,文件会隐式完成,调用writer.finalize()
以观察错误。
以下示例计算最多16位每个样本的音频文件的均方根(RMS)。
use hound;
let mut reader = hound::WavReader::open("testsamples/pop.wav").unwrap();
let sqr_sum = reader.samples::<i16>()
.fold(0.0, |sqr_sum, s| {
let sample = s.unwrap() as f64;
sqr_sum + sample * sample
});
println!("RMS is {}", (sqr_sum / reader.len() as f64).sqrt());
特性
读取 | 写入 | |
---|---|---|
格式 | PCMWAVEFORMAT ,WAVEFORMATEX ,WAVEFORMATEXTENSIBLE |
PCMWAVEFORMAT ,WAVEFORMATEXTENSIBLE |
编码 | 整数PCM,IEEE浮点数 | 整数PCM,IEEE浮点数 |
每样本位 | 8,16,24,32(整数),32(浮点数) | 8,16,24,32(整数),32(浮点数) |
贡献
欢迎以错误报告、功能请求或pull请求的形式的贡献。请参阅contributing.md。
许可
Hound在Apache 2.0许可下发布。它可以在免费软件以及封闭源代码应用程序中使用,包括商业和非商业用途,条件符合许可证规定。如果您想在GPLv2许可的软件中使用Hound,您可以在版权声明中添加例外。请勿在您不同意许可证选择的情况下打开问题。