Need help with hound?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

ruuda
256 Stars 30 Forks Apache License 2.0 328 Commits 13 Opened issues

Description

A wav encoding and decoding library in Rust

Services available

!
?

Need anything else?

Contributors list

# 166,954
Haskell
Rust
Shell
Apache ...
286 commits
# 48,436
Rust
C
filesys...
unix
10 commits
# 54,451
Rust
Tensorf...
linear-...
gzip
10 commits
# 22,003
curl
netcat
socat
google-...
5 commits
# 620,046
Shell
C++
CSS
5 commits
# 10,659
Rust
vulkan
parity
node
2 commits
# 350,463
Rust
Shell
vst-plu...
audio-p...
1 commit
# 394,367
C
C++
Shell
1 commit
# 607,355
Shell
hft
Erlang
erlang-...
1 commit
# 4,794
Rust
webasse...
asmjs
webwork...
1 commit
# 196,868
discord...
CSS
Discord
Twitch
1 commit

Hound

A wav encoding and decoding library in Rust.

Build Status Crates.io version Changelog Documentation

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::() .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.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.