#audio-samples #decoder #sound #file-format #encoding

bin+lib creak

轻量级音频解码器。将流行的格式转换为原始 32 位浮点样本。

3 个版本 (重大变更)

0.3.0 2020 年 12 月 4 日
0.2.0 2020 年 10 月 30 日
0.1.0 2020 年 10 月 30 日
0.0.0 2020 年 10 月 29 日

#627 in 音频

Download history 21/week @ 2024-03-11 20/week @ 2024-03-18 11/week @ 2024-03-25 48/week @ 2024-04-01 13/week @ 2024-04-08 25/week @ 2024-04-15 23/week @ 2024-04-22 16/week @ 2024-04-29 18/week @ 2024-05-06 17/week @ 2024-05-13 14/week @ 2024-05-20 9/week @ 2024-05-27 20/week @ 2024-06-03 10/week @ 2024-06-10 17/week @ 2024-06-17 17/week @ 2024-06-24

每月 65 次下载
2 crates 中使用

MIT/Apache

40KB
757

Creak

Crates.io

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 许可证的定义,将作为上述双许可发布,不附加任何额外条款或条件。

依赖关系

~0–540KB