#wav #codec #wave #read-write #encoding

surge-hound

一个wav编码和解码库 -- 修改后用于与surge-synthesizer配合使用

22个版本

使用旧Rust 2015

0.2.11-alpha.02022年12月19日
0.2.9-alpha.02022年12月19日
0.2.5-alpha.02022年6月21日
0.2.4-alpha.02022年3月14日
0.1.42-alpha.02021年10月27日

#49 in #wave

Download history 27/week @ 2024-04-01 16/week @ 2024-04-08 9/week @ 2024-04-15 15/week @ 2024-04-22 8/week @ 2024-04-29 6/week @ 2024-05-06 13/week @ 2024-05-13 14/week @ 2024-05-20 16/week @ 2024-05-27 496/week @ 2024-06-10 3/week @ 2024-06-17 14/week @ 2024-06-24 12/week @ 2024-07-01 25/week @ 2024-07-15

51 每月下载量
6 个crate中使用(通过 surge-wavetable

Apache-2.0

120KB
2K SLoC

Hound

Rust中的一个wav编码和解码库。

Build Status Crates.io version Changelog Documentation

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());

特性

读取 写入
格式 PCMWAVEFORMATWAVEFORMATEXWAVEFORMATEXTENSIBLE PCMWAVEFORMATWAVEFORMATEXTENSIBLE
编码 整数PCM,IEEE浮点数 整数PCM,IEEE浮点数
每样本位 8,16,24,32(整数),32(浮点数) 8,16,24,32(整数),32(浮点数)

贡献

欢迎以错误报告、功能请求或pull请求的形式的贡献。请参阅contributing.md

许可

Hound在Apache 2.0许可下发布。它可以在免费软件以及封闭源代码应用程序中使用,包括商业和非商业用途,条件符合许可证规定。如果您想在GPLv2许可的软件中使用Hound,您可以在版权声明中添加例外。请勿在您不同意许可证选择的情况下打开问题。

无运行时依赖