3 个版本
0.1.3 | 2023 年 12 月 10 日 |
---|---|
0.1.2 | 2023 年 4 月 14 日 |
0.1.1 | 2022 年 10 月 21 日 |
0.1.0 |
|
616 在 音频 中
每月 730 次下载
在 4 个 Crates 中使用 (2 直接)
155KB
4K SLoC
包含 (神秘的 autoconf 代码,6KB) ogg_vendor/configure.ac
此存储库中的 vorbis_rs
包提供针对最新参考 Vorbis 编码器修改版本的更新、文档齐全且易用的绑定,该编码器可在 此处 获取,并应用了 aoTuV 和 Lancer 补丁集。社区认为这些补丁实现了显著的编码质量和性能改进。
支持 aotuv_lancer_vorbis_sys
和 ogg_next_sys
包提供自动生成的低级绑定,这些绑定用于 vorbis_rs
。
此存储库中每个包的最小支持的 Rust 版本 (MSRV) 为 1.64。出于语义版本控制的目的,提高此版本不被视为破坏性更改。我们只有在估计这种提高不会引起广泛的不便或破坏时才会尝试这样做。
❓ 动机
Rust 生态系统已经对这些库有绑定 (参见 vorbis-sys
和 vorbis
),但现有 crates 的质量和维护状态存在严重问题,似乎不可能通过 PR 或修补来解决
- 高级
vorbis
crate 已有 6 年未更新,据称代码质量低下 (有很多包含电子邮件地址等信息的panic!
),并依赖于旧的vorbis-sys
版本。反过来,vorbis-sys
依赖于已知的具有安全漏洞的旧版本libvorbis
C 库。它还缺少 C 库提供的某些操作所需的 API。 vorbis-sys
仅包含对libvorbis
的绑定,但进行有意义的Vorbis流操作需要更新对libvorbisenc
和vorbisfile
的绑定,这些更新目前尚未提供。- 在crates.io中存在几个依赖于这些不令人满意的绑定项目的随机crate,而且似乎不太可能其维护者会及时接受对它们的破坏性更改,从而产生生态系统碎片化。
- 像大多数软件库、框架甚至Linux发行版一样,现有的crate似乎对aoTuV和Lancer补丁集的存在视而不见,尽管它们旨在作为即插即用的替代品。因此,用户有理由期望任何补丁都会被提及,这也是进行不同集合的绑定crate的另一个好理由。
鉴于这些问题以及Rust中Ogg Vorbis音频处理应用程序对更好解决方案的需求,决定投入开发精力来制作新的绑定:估计修复生态系统技术债务的初始成本高于从头开始创建绑定并定期更新库绑定。在Rust中重写修补后的Vorbis编码器被认为是不可行的。
⚖️ 许可证
本仓库中的绑定许可证为BSD 3-Clause "New"或"Revised"许可证(LICENSE
或https://opensource.org/licenses/BSD-3-Clause),这与上游项目使用的相同宽松许可证。
贡献许可证
除非你明确说明,否则你提交给vorbis_rs的任何有意贡献都应按照上述方式许可,不附加任何额外条款或条件。
✨ 贡献
这个仓库最初是为了解决Rust应用程序的需求而作为一个临时解决方案,但它已经发展成为一个独立的项目——欢迎提交PR!
克隆 & 更新
C库源代码使用子模块管理,因此使用Unix-like系统(Linux、macOS、BSD)的generate-bindings.sh
脚本或使用rust-bindgen
构建项目应该很容易更新绑定crate。
- 更新子模块。
- 在Unix-like系统(Linux、macOS、BSD)上运行
generate-bindings.sh
脚本,或使用rust-bindgen
构建项目。这将根据最新的源代码重新生成低级FFI绑定。 - 运行
cargo test
。这将执行一些基本的合理性检查,包括编码和解码示例文件,以检查绑定是否仍然工作。 - 审查更改并/或修复失败的测试,直到有合理的信心认为升级已成功完成。
- 提交更改。
在克隆仓库时,请记住还要检出带有供应商代码的子模块。您可以通过运行git submodule update --init --recursive
来完成此操作。
每次供应商代码更新时,都需要发布aotuv_lancer_vorbis_sys
和/或ogg_next_sys
的新版本,以便vorbis_rs的用户可以下载带有更新供应商代码的绑定crate。
🤝 联系
我们欢迎就项目进行友好的讨论,包括提问、祝贺和建议。前往GitHub 讨论页面与同行用户、贡献者和开发者互动。
🧑🤝🧑 贡献者
以下是我们感谢的这些优秀人士(表情符号键)
Alejandro González 💻 📖 💡 🚧 📆 |
Vivian 💻 🤔 |
Martin Algesten 💻 |
Kyle Chen 🤔 |
Daniel Collin 🐛 |
本项目遵循all-contributors规范。欢迎所有类型的贡献!
依赖项
~0–305KB