Crates.io | creak |
lib.rs | creak |
version | 0.3.0 |
source | src |
created_at | 2020-10-29 23:01:51.181174 |
updated_at | 2020-12-04 01:39:18.396577 |
description | Lightweight audio decoder. Converts popular formats to raw 32-bit float samples. |
homepage | https://github.com/TheBerkin/creak |
repository | https://github.com/TheBerkin/creak |
max_upload_size | |
id | 306820 |
size | 56,447 |
A barebones, opinionated Rust crate for decoding audio files into raw 32-bit float samples.
Format | Feature flag | Backend | Status |
---|---|---|---|
WAV | wav |
hound | ✅ |
Vorbis | vorbis |
lewton | ✅ |
MP3 | mp3 |
minimp3 | ✅ |
FLAC | flac |
claxon | ✅ |
Raw | N/A | built-in | ✅ |
(✅ = Implemented; 🛠 = WIP)
Creak compiles with support for all formats by default, but this may not be desirable to everyone. To enable support for only specific formats, you'll need to manually specify the desired feature flags in your Cargo.toml
like this:
[dependencies]
# Only include support for WAV and Vorbis
creak = { version = "*", default-features = false, features = ["wav", "vorbis"] }
// Simple program that reads an audio file and dumps its samples in 32-bit float to stdout
use std::{env, io, io::Write};
use creak;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Get a file name from the cmdline args
let file_name = match env::args().nth(1) {
Some(arg) => arg,
None => {
eprintln!("No audio file specified!");
return Ok(())
}
};
// Open an audio file of any supported format with one function call
let decoder = creak::Decoder::open(&file_name)?;
// Print basic audio info to stderr
let info = decoder.info();
eprintln!("Format: {}; Channels: {}; Sample Rate: {}Hz",
info.format(),
info.channels(),
info.sample_rate()
);
let mut stdout = io::stdout();
let mut num_samples: usize = 0;
// Dump all samples to stdout
for sample in decoder.into_samples()? {
stdout.write(&sample?.to_le_bytes())?;
num_samples += 1;
}
eprintln!("{} samples(s) read.", num_samples);
Ok(())
}
Creak only outputs f32
samples (because they're good). If you don't want f32
samples, I'm afraid this isn't the crate for you!
Creak cannot handle certain types of audio data, namely:
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.