#libvorbis #patch #encoding #lancer #libvorbisenc #vorbisfile #aotuv

sys aotuv_lancer_vorbis_sys

为 libvorbis、vorbisfile 和 libvorbisenc C 库提供的低级 FFI 绑定,包括 aoTuV 和 Lancer 补丁

5 个版本

0.1.4 2023 年 12 月 10 日
0.1.3 2023 年 11 月 25 日
0.1.2 2023 年 11 月 25 日
0.1.1 2023 年 4 月 14 日
0.1.0 2022 年 10 月 21 日

#286 in 音频

Download history 197/week @ 2024-04-15 133/week @ 2024-04-22 126/week @ 2024-04-29 69/week @ 2024-05-06 96/week @ 2024-05-13 159/week @ 2024-05-20 119/week @ 2024-05-27 114/week @ 2024-06-03 143/week @ 2024-06-10 217/week @ 2024-06-17 186/week @ 2024-06-24 258/week @ 2024-07-01 151/week @ 2024-07-08 84/week @ 2024-07-15 245/week @ 2024-07-22 497/week @ 2024-07-29

1,050 下载/月
3 个 crate 中使用 (通过 vorbis_rs)

BSD-3-Clause

2MB
44K SLoC

C 32K SLoC // 0.1% comments Visual Studio Project 7.5K SLoC Rust 3K SLoC // 0.0% comments Perl 786 SLoC // 0.1% comments M4 497 SLoC // 0.2% comments Visual Studio Solution 483 SLoC Automake 232 SLoC // 0.1% comments C++ 44 SLoC Shell 36 SLoC // 0.1% comments

包含 (难以理解的 autoconf 代码,10KB) vorbis_vendor/configure.ac,(难以理解的 autoconf 代码,6KB) ogg_vendor/configure.ac

vorbis-rs logo

vorbis-rs

Rust 对 Vorbis 音频编解码器和 Ogg 容器封装的最佳 C 库的绑定

CI workflow status crates.io latest version docs.rs status

crates.io downloads

本存储库中的 vorbis_rs 包提供对最新参考 Vorbis 编码器的修改版(见此处)的更新、文档完善且易于使用的绑定,其中已应用 aoTuVLancer 补丁集。社区认为这些补丁实现了显著的编码质量和性能改进。

支持 aotuv_lancer_vorbis_sysogg_next_sys 包提供由 vorbis_rs 使用的自动生成的低级绑定。

本存储库中每个包的最小支持 Rust 版本 (MSRV) 为 1.64。出于语义版本控制的目的,提高此版本不被视为重大更改。我们将在估计提高版本不会造成普遍不便或损坏的情况下才进行此类提高。

❓ 动机

Rust 生态系统已经有了这些库的绑定(见 vorbis-sysvorbis),但可用的 crate 的质量和维护状态存在复杂的问题,似乎不合理通过 PR 或修补来解决。

  • 高层次的 vorbis 程序包已有6年未更新,其代码质量可能较低(存在大量包含电子邮件地址等信息的 panic!),并且依赖于旧版本的 vorbis-sys。反过来,vorbis-sys 依赖于存在已知安全漏洞的旧版本 libvorbis C 库。此外,它还缺少一些有意义的音频处理应用所需的API。
  • vorbis-sys 只包含 libvorbis 的绑定,但需要更新的 libvorbisencvorbisfile 绑定来以合理的方式执行有意义的 Vorbis 流操作。这些绑定也不可用。
  • crates.io 上存在多个依赖这些不满意的绑定项目的随机程序包,而且看起来它们的维护者不太可能迅速接受对它们的破坏性更改,从而导致生态系统碎片化。
  • 像大多数软件库、框架甚至 Linux 发行版一样,现有的程序包似乎对 aoTuV 和 Lancer 补丁集的存在视而不见,尽管它们旨在作为直接替换。因此,用户有理由期望提及任何补丁,这本身就是做一套不同的绑定程序包的好理由。

鉴于这些问题以及 Rust 中 Ogg Vorbis 音频处理应用需要更好的解决方案,决定将开发精力投入到制作新的绑定中:估计解决生态系统技术债务的初始成本高于从头开始制作绑定并定期从上游更新库绑定。在 Rust 中重写修补过的 Vorbis 编码器被认为是不可行的。

⚖️ 许可证

本存储库中的绑定采用 BSD 3-Clause "New" 或 "Revised" 许可证(《LICENSE》或https://opensource.org/licenses/BSD-3-Clause),这是上游项目使用的相同宽松许可证。

贡献许可证

除非您明确声明,否则您提交给 vorbis_rs 的任何有意贡献都将按照上述许可证进行许可,不附加任何额外条款或条件。

✨ 贡献

这个存储库最初是为了解决一个 Rust 应用程序的需求而临时提出的解决方案,但它已经成长为一个独立的项目——欢迎提交 PR!

克隆 & 更新

C 库源代码使用 子模块 管理,因此使用最新上游更改更新绑定程序包应该很简单

  1. 更新子模块。
  2. 在类 Unix 系统(Linux、macOS、BSD)上运行 generate-bindings.sh 脚本(使用 rust-bindgen),或者使用 cargo build --features build-time-bindgen 构建项目。这将根据最新的源代码重新生成低级 FFI 绑定。
  3. 运行 cargo test。这将执行一些基本合理性检查,包括编码和解码示例文件,以检查绑定是否仍然有效。
  4. 审查更改并/或修复失败的测试,直到对升级成功完成有合理的信心。
  5. 提交更改。

在克隆存储库时,请记住还要检出包含供应商代码的子模块。您可以通过运行 git submodule update --init --recursive 来完成此操作。

每次更新供应商代码时,都需要发布新版本的 aotuv_lancer_vorbis_sys 和/或 ogg_next_sys,以便 vorbis_rs 的用户可以下载与更新供应商代码绑定的crate。

🤝 联系

我们欢迎就项目进行友好讨论,包括提问、祝贺和建议。前往 GitHub 讨论页面 与其他用户、贡献者和开发者互动。

🧑‍🤝‍🧑 贡献者

感谢以下这些优秀的人们(emoji key

Alejandro González
Alejandro González

💻 📖 💡 🚧 📆
Vivian
Vivian

💻 🤔
Martin Algesten
Martin Algesten

💻
Kyle Chen
Kyle Chen

🤔
Daniel Collin
Daniel Collin

🐛

本项目遵循 all-contributors 规范。欢迎任何形式的贡献!

依赖