#mp3 #decoding #no-alloc #fixed-point #bindings #interface #target

无std threepm

Rust绑定和ThreePM的高级接口抽象——这是一个用C编写的定点MP3解码库

5个版本

0.2.0 2023年9月24日
0.1.3 2023年9月24日
0.1.2 2023年9月23日
0.1.1 2023年9月23日
0.1.0 2023年9月23日

#1020 in 音频

每月22次下载

MIT AND RPSL-1.0

305KB
5.5K SLoC

C 3K SLoC // 0.4% comments Rust 2.5K SLoC // 0.0% comments Shell 3 SLoC

ThreePM-rs

Rust对ThreePM的绑定——这是一个用C编写的定点MP3解码库。

它支持解码所有MP3 CBR文件。VBR目前不支持。

使用

threepm添加到您的Cargo.toml

cargo add threepm

如果您正在运行访问闪存速度较慢的目标(例如RP2040),您可以尝试启用code-in-ram功能以提高性能。

cargo add threepm --features threepm/code-in-ram

这使用链接器技巧将一些性能关键代码放入RAM中——请注意,这不是所有目标都适用,GCC在链接过程中会发出一些关于它认为不应驻留在RAM中的符号的警告。

构建

此crate将在构建过程中编译ThreePM——这意味着您需要告诉Rust您的C编译器!对于cortex-m目标,您的路径上需要有arm-none-eabi-工具链,因为这将是目标默认设置。对于riscv目标,您还需要有一个环境变量来公开C编译器的名称。对于https://github.com/riscv-collab/riscv-gnu-toolchain/releaseshttps://www.embecosm.com/resources/tool-chain-downloads/

CC=riscv32-unknown-elf-gcc cargo run --release

或对于xPack riscv gcc工具链 https://xpack.github.io/dev-tools/riscv-none-elf-gcc/releases/

CC=riscv-none-elf-gcc cargo run --release

开发

如果您更新或添加了ThreePM的接口,您将需要更新Rust绑定。要这样做,安装bindgen-cli并从该项目的根目录运行./ffi/bindgen.sh

测试

为了测试这个库,我推荐在以下地址可用的测试样本
https://espressif-docs.readthedocs-hosted.com/projects/esp-adf/en/latest/design-guide/audio-samples.html
项目中 examples 路径下的示例已经配置为运行 Espressif 音频样本页面上的简短 2 通道示例。如果您已安装 wget,可以从本项目的根目录运行以下命令来获取此样本

wget https://dl.espressif.com/dl/audio/gs-16b-2c-44100hz.mp3

许可证

ThreePM 使用 RPSL-1.0 许可证
ThreePM-rs 使用 MIT 许可证

依赖项

~225KB