16个版本 (稳定)
使用旧的Rust 2015
3.5.1 | 2023年9月25日 |
---|---|
3.5.0 | 2022年9月9日 |
3.4.0 | 2018年4月7日 |
3.3.1 | 2018年2月18日 |
0.1.0 | 2015年3月31日 |
#2 in 音频
171,112 每月下载量
在 299 个crate中使用了 (188 直接)
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,您可以在您的版权声明中添加一个例外。请勿就许可证的选择提出问题。