3 个版本 (重大变更)
0.3.0 | 2020 年 12 月 4 日 |
---|---|
0.2.0 | 2020 年 10 月 30 日 |
0.1.0 | 2020 年 10 月 30 日 |
0.0.0 |
|
#627 in 音频
每月 65 次下载
在 2 crates 中使用
40KB
757 行
Creak
Creak 是一个裸骨、有偏见的 Rust crate,用于将音频文件解码为原始 32 位浮点样本。
支持的格式
格式 | 功能标志 | 后端 | 状态 |
---|---|---|---|
WAV | wav |
hound | ✅ |
Vorbis | vorbis |
lewton | ✅ |
MP3 | mp3 |
minimp3 | ✅ |
FLAC | flac |
claxon | ✅ |
原始 | N/A | 内置 | ✅ |
(✅ = 已实现;🛠 = 在开发中)
使用部分格式支持构建 Creak
Creak 默认支持所有格式进行编译,但这可能不是每个人想要的。要仅启用对特定格式的支持,您需要手动在您的 Cargo.toml
中指定所需的特征标志,如下所示
[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 只输出 f32
样本(因为它们很好)。如果您不想使用 f32
样本,恐怕这个 crate 不会适合您!
Creak 无法处理某些类型的音频数据,特别是
- 具有可变采样率或通道数的 MP3 文件在解码时将导致错误。
- 具有“奇特”样本格式的 WAV 文件不受支持。我不知道谁在使用 64 位浮点样本,但它们对可怜的 Creak 来说太强大了。发发慈悲吧。
变更日志
许可
根据您的选择,许可协议为
- Apache 许可证 2.0 版 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则您提交给作品以供包含在内的任何贡献,根据 Apache-2.0 许可证的定义,将作为上述双许可发布,不附加任何额外条款或条件。
依赖关系
~0–540KB