Hound
A wav encoding and decoding library in Rust
Install / Use
/learn @ruuda/HoundREADME
Hound
A wav encoding and decoding library in Rust.
Hound can read and write the WAVE audio format, an ubiquitous format for raw, uncompressed audio. The main motivation to write it was to test Claxon, a FLAC decoding library written in Rust.
Examples
The following example renders a 440 Hz sine wave, and stores it as a mono wav file with a sample rate of 44.1 kHz and 16 bits per sample.
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();
}
The file is finalized implicitly when the writer is dropped, call
writer.finalize() to observe errors.
The following example computes the root mean square (RMS) of an audio file with at most 16 bits per sample.
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());
Features
| | Read | Write |
|-----------------|---------------------------------------------------------|-----------------------------------------|
| Format | PCMWAVEFORMAT, WAVEFORMATEX, WAVEFORMATEXTENSIBLE | PCMWAVEFORMAT, WAVEFORMATEXTENSIBLE |
| Encoding | Integer PCM, IEEE Float | Integer PCM, IEEE Float |
| Bits per sample | 8, 16, 24, 32 (integer), 32 (float) | 8, 16, 24, 32 (integer), 32 (float) |
Contributing
Contributions in the form of bug reports, feature requests, or pull requests are welcome. See contributing.md.
License
Hound is licensed under the Apache 2.0 license. It may be used in free software as well as closed-source applications, both for commercial and non-commercial use under the conditions given in the license. If you want to use Hound in your GPLv2-licensed software, you can add an exception to your copyright notice. Please do not open an issue if you disagree with the choice of license.
Related Skills
node-connect
349.7kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
349.7kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
349.7kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
