21次发布

使用旧的Rust 2015

0.10.2 2021年1月20日
0.10.1 2020年3月16日
0.10.0 2020年1月30日
0.9.4 2019年3月8日
0.4.1 2016年11月17日

70音频 中排名

Download history 17537/week @ 2024-03-14 18824/week @ 2024-03-21 20544/week @ 2024-03-28 19908/week @ 2024-04-04 19713/week @ 2024-04-11 20703/week @ 2024-04-18 19724/week @ 2024-04-25 20014/week @ 2024-05-02 17746/week @ 2024-05-09 19873/week @ 2024-05-16 21007/week @ 2024-05-23 20986/week @ 2024-05-30 19015/week @ 2024-06-06 19767/week @ 2024-06-13 16701/week @ 2024-06-20 15581/week @ 2024-06-27

74,054 每月下载量
135 Crate中使用(直接使用34个)

MIT/Apache

215KB
4.5K SLoC

lewton

docs crates.io dependency status

纯Rust编写的Vorbis解码器。

要尝试解码器,你可以这样做

cargo run --example player /path/to/your/audio_file.ogg

然后它会播放音频。

如果你想知道如何使用这个crate,请查看示例文件夹。

此crate在audioheader模块中提供了低级API,用于每包解码,并在inside_ogg模块中提供了高级API,用于ogg/vorbis流。

部分内容是在公共领域stb_vorbis解码器实现的帮助下创建的。

所需的最小Rust版本为1.36。

使用unsafe

整个库没有使用一行unsafe代码。实际上,lib.rs包含#![forbid(unsafe_code)]指令。

关于此crate的历史

我从2015年12月开始工作在这个crate上。目标是学习更多关于Rust和音频处理的知识,同时为Rust生态系统提供一些有用的东西。

我没有查阅libvorbis实现,因为那样我首先必须遵守BSD许可证,其次是因为我不想让这个crate仅仅成为一个从C到Rust的翻译。相反,我想让这个crate基于规范,这样我就可以更多地了解Vorbis是如何工作的。

我唯一查阅libvorbis实现的时候,是为了查找ogg crate需要的函数实现(CRC函数),这就是为什么那个crate是BSD许可的,并且归功于作者。然而,此crate中不包含来自libvorbis实现的任何代码,无论是翻译还是其他。

过了一段时间,我意识到如果没有一个可工作的实现,进展会变得过于缓慢。

因此,我继续使用公共领域 stb_vorbis 实现并使用其中的一些代码(尤其是 IMDCT 算法)将其转换为 Rust。我还将其用于调试,通过比较其输出与我的输出进行比较。

然而,这个软件包的大部分内容是通过阅读规范创建的。

C 语言使用

lewton 提供了一组兼容 C 的库、头文件和 pkg-config 文件。

要构建和安装它,您可以使用 cargo-c

cargo install cargo-c
cargo cinstall --release --destdir /tmp/lewton
sudo cp -a /tmp/lewton/* /

许可证

根据您的选择,许可协议为 Apache 2 或 MIT。有关详细信息,请参阅 LICENSE 文件。

位于 examples/ 文件夹内的所有示例均采用 CC-0 许可证。

贡献的许可证

除非您明确声明,否则根据 Apache-2.0 许可证定义,您有意提交以包含在作品中的任何贡献,将根据上述方式双许可/CC-0 许可,而无需任何额外条款或条件。

依赖项

~355–530KB
~15K SLoC