Crates.io | vorbis_rs |
lib.rs | vorbis_rs |
version | 0.5.4 |
source | src |
created_at | 2022-10-21 21:27:09.800175 |
updated_at | 2023-12-10 15:21:12.580881 |
description | Ogg Vorbis stream encoding and decoding powered by high-level bindings for best-in-breed C libraries |
homepage | |
repository | https://github.com/ComunidadAylas/vorbis-rs |
max_upload_size | |
id | 693923 |
size | 76,053 |
Rust bindings for the best-in-breed C libraries of the Vorbis audio codec and Ogg container encapsulation.
The vorbis_rs
package in this repository provides updated, well-documented and
ergonomic bindings for a modified version of the latest reference Vorbis
encoder, available here, with
the aoTuV and
Lancer
patchsets applied to it. These patches are considered to implement significant
encoding quality and performance improvements by the community.
The supporting aotuv_lancer_vorbis_sys
and ogg_next_sys
packages provide
automatically-generated low-level bindings used by vorbis_rs
.
The minimum supported Rust version (MSRV) for every package in this repository is 1.64. Bumping this version is not considered a breaking change for semantic versioning purposes. We will try to do it only when we estimate that such a bump would not cause widespread inconvenience or breakage.
The Rust ecosystem already has bindings for these libraries (see
vorbis-sys
and
vorbis
), but the quality and maintenance
status of the available crates is problematic in an entangled way that does not
seem reasonable to fix via PRs or patching:
vorbis
crate was not updated in 6 years, has arguably low
code quality (lots of panic!
with messages containing e-mail addresses,
etc.), and depends on an old version of vorbis-sys
. In turn vorbis-sys
depends on an old version of the libvorbis
C library with known security
vulnerabilities. It also lacks APIs to do some operations needed by sensible
audio processing applications that are offered by the C libraries.vorbis-sys
only contains bindings for libvorbis
, but updated bindings for
libvorbisenc
and vorbisfile
are necessary to do meaningful Vorbis stream
operations in a sane way. These are not available either.Given these issues and the need for a better solution for Ogg Vorbis audio processing applications in Rust, it was decided to spend development effort on making new bindings: it was estimated that the upfront cost of fixing the technical debt of the ecosystem was higher than starting bindings from scratch and periodically updating the library bindings from upstream. Rewriting the patched Vorbis encoder in Rust was deemed unfeasible.
The bindings in this repository are licensed under the BSD 3-Clause "New" or
"Revised" License (LICENSE
or https://opensource.org/licenses/BSD-3-Clause),
which is the same permissive license used by the upstream projects.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in vorbis_rs by you shall be licensed as above, without any additional terms or conditions.
This repository started as an ad-hoc solution to address the needs of a Rust application, but it has grown into a project of its own - PRs are welcome!
The C libraries sources are managed with submodules, so updating the binding crates with the latest upstream changes should be easy:
generate-bindings.sh
script on a Unix-like system (Linux, macOS,
BSD) with
rust-bindgen
,
or build the project with cargo build --features build-time-bindgen
. This
will regenerate the low-level FFI bindings according to the latest source
code.cargo test
. This will execute some basic sanity checks, including
encoding and decoding example files, to check that the bindings still work.When cloning the repository, remember to also check out the submodules with the
vendor code. You can do this by running git submodule update --init --recursive
.
Each time vendor code is updated, it will be necessary to release a new version
of aotuv_lancer_vorbis_sys
and/or ogg_next_sys
, so that users of vorbis_rs
can download binding crates with the updated vendor code.
We welcome friendly talk about the project, including questions, congratulations, and suggestions. Head to the GitHub Discussions page to interact with fellow users, contributors and developers.
Thanks goes to these wonderful people (emoji key):
Alejandro González 💻 📖 💡 🚧 📆 |
Vivian 💻 🤔 |
Martin Algesten 💻 |
Kyle Chen 🤔 |
Daniel Collin 🐛 |
This project follows the all-contributors specification. Contributions of any kind welcome!