{"id":30351632,"url":"https://github.com/comunidadaylas/vorbis-rs","last_synced_at":"2025-08-18T23:11:00.644Z","repository":{"id":50601708,"uuid":"519594372","full_name":"ComunidadAylas/vorbis-rs","owner":"ComunidadAylas","description":"🔊 Rust bindings for the best-in-breed C libraries of the Vorbis audio codec and Ogg container encapsulation.","archived":false,"fork":false,"pushed_at":"2025-08-11T18:55:17.000Z","size":337,"stargazers_count":17,"open_issues_count":2,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-15T04:37:50.929Z","etag":null,"topics":["aotuv","audio-encoding","hacktoberfest","lancer","rust-ffi-bindings","rust-ffi-wrappers","vorbis"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/vorbis_rs","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ComunidadAylas.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-07-30T18:39:40.000Z","updated_at":"2025-08-11T18:55:11.000Z","dependencies_parsed_at":"2024-01-02T08:42:21.467Z","dependency_job_id":"0d5ec893-a6de-4583-8b8c-5a3b18775c59","html_url":"https://github.com/ComunidadAylas/vorbis-rs","commit_stats":{"total_commits":111,"total_committers":6,"mean_commits":18.5,"dds":"0.45945945945945943","last_synced_commit":"1524340327e1abbc7bfcb926e68f8865415cfe0e"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/ComunidadAylas/vorbis-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ComunidadAylas%2Fvorbis-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ComunidadAylas%2Fvorbis-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ComunidadAylas%2Fvorbis-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ComunidadAylas%2Fvorbis-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ComunidadAylas","download_url":"https://codeload.github.com/ComunidadAylas/vorbis-rs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ComunidadAylas%2Fvorbis-rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271073387,"owners_count":24694538,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-18T02:00:08.743Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aotuv","audio-encoding","hacktoberfest","lancer","rust-ffi-bindings","rust-ffi-wrappers","vorbis"],"created_at":"2025-08-18T23:10:57.666Z","updated_at":"2025-08-18T23:11:00.634Z","avatar_url":"https://github.com/ComunidadAylas.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"https://github.com/ComunidadAylas/vorbis-rs/assets/7822554/c12d850c-8924-41fa-b2f3-9d00e18bd7bc\" alt=\"vorbis-rs logo\" width=\"300\" height=\"300\"\u003e\n\u003ch1\u003evorbis-rs\u003c/h1\u003e\n\n\u003ci\u003eRust bindings for the best-in-breed C libraries of the Vorbis audio codec and\nOgg container encapsulation.\u003c/i\u003e\n\n\u003ca href=\"https://github.com/ComunidadAylas/vorbis-rs/actions?query=workflow%3ACI\"\u003e\u003cimg alt=\"CI workflow status\"\nsrc=\"https://github.com/ComunidadAylas/vorbis-rs/actions/workflows/ci.yml/badge.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://crates.io/crates/vorbis_rs\"\u003e\u003cimg alt=\"crates.io latest version\" src=\"https://img.shields.io/crates/v/vorbis_rs\"\u003e\u003c/a\u003e\n\u003ca href=\"https://docs.rs/vorbis_rs\"\u003e\u003cimg alt=\"docs.rs status\" src=\"https://img.shields.io/docsrs/vorbis_rs?label=docs.rs\"\u003e\u003c/a\u003e\n\n\u003cimg alt=\"crates.io downloads\" src=\"https://img.shields.io/crates/d/vorbis_rs?label=crates.io%20downloads\"\u003e\n\u003c/div\u003e\n\nThe `vorbis_rs` package in this repository provides updated, well-documented and\nergonomic bindings for a modified version of the latest reference Vorbis\nencoder, available [here](https://github.com/enzo1982/vorbis-aotuv-lancer), with\nthe [aoTuV](https://github.com/AO-Yumi/vorbis_aotuv) and\n[Lancer](https://web.archive.org/web/20160408055651/http://homepage3.nifty.com/blacksword/index.htm)\npatchsets applied to it. These patches are considered to implement significant\nencoding quality and performance improvements by the community.\n\nThe supporting `aotuv_lancer_vorbis_sys` and `ogg_next_sys` packages provide\nautomatically-generated low-level bindings used by `vorbis_rs`.\n\nThe minimum supported Rust version (MSRV) for every package in this repository\nis 1.85. Bumping this version is not considered a breaking change for semantic\nversioning purposes. We will try to do it only when we estimate that such a bump\nwould not cause widespread inconvenience or breakage.\n\n# ❓ Motivation\n\nThe Rust ecosystem already has bindings for these libraries (see\n[`vorbis-sys`](https://crates.io/crates/vorbis-sys) and\n[`vorbis`](https://crates.io/crates/vorbis)), but the quality and maintenance\nstatus of the available crates is problematic in an entangled way that does not\nseem reasonable to fix via PRs or patching:\n\n- The high-level `vorbis` crate was not updated in 6 years, has arguably low\n  code quality (lots of `panic!` with messages containing e-mail addresses,\n  etc.), and depends on an old version of `vorbis-sys`. In turn `vorbis-sys`\n  depends on an old version of the `libvorbis` C library with known security\n  vulnerabilities. It also lacks APIs to do some operations needed by sensible\n  audio processing applications that are offered by the C libraries.\n- `vorbis-sys` only contains bindings for `libvorbis`, but updated bindings for\n  `libvorbisenc` and `vorbisfile` are necessary to do meaningful Vorbis stream\n  operations in a sane way. These are not available either.\n- There are several random crates in crates.io depending on several of these\n  unsatisfactory binding projects, and it seems unlikely that their maintainers\n  will promptly accept breaking changes on them, generating ecosystem\n  fragmentation.\n- Like most software libraries, frameworks and even Linux distributions, the\n  existing crates seem to be oblivious to the existence of the aoTuV and Lancer\n  patchsets, even though they are meant to be drop-in replacements. Thus, users\n  may reasonably expect any patches to be mentioned, which is a good reason to\n  do a different set of binding crates anyway.\n\nGiven these issues and the need for a better solution for Ogg Vorbis audio\nprocessing applications in Rust, it was decided to spend development effort on\nmaking new bindings: it was estimated that the upfront cost of fixing the\ntechnical debt of the ecosystem was higher than starting bindings from scratch\nand periodically updating the library bindings from upstream. Rewriting the\npatched Vorbis encoder in Rust was deemed unfeasible.\n\n# ⚖️ License\n\nThe bindings in this repository are licensed under the BSD 3-Clause \"New\" or\n\"Revised\" License (`LICENSE` or https://opensource.org/licenses/BSD-3-Clause),\nwhich is the same permissive license used by the upstream projects.\n\n## Contribution license\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in vorbis_rs by you shall be licensed as above, without any\nadditional terms or conditions.\n\n# ✨ Contributing\n\nThis repository started as an ad-hoc solution to address the needs of a Rust\napplication, but it has grown into a project of its own - PRs are welcome!\n\n## Cloning \u0026 updating\n\nThe C libraries sources are managed with\n[submodules](https://git-scm.com/book/en/v2/Git-Tools-Submodules), so updating\nthe binding crates with the latest upstream changes should be easy:\n\n1. Update the submodules.\n2. Run the `generate-bindings.sh` script on a Unix-like system (Linux, macOS,\n   BSD) with\n   [`rust-bindgen`](https://rust-lang.github.io/rust-bindgen/command-line-usage.html),\n   or build the project with `cargo build --features build-time-bindgen`. This\n   will regenerate the low-level FFI bindings according to the latest source\n   code.\n3. Run `cargo test`. This will execute some basic sanity checks, including\n   encoding and decoding example files, to check that the bindings still work.\n4. Review the changes and/or fix failing tests until there is reasonable\n   confidence that the upgrade was completed successfully.\n5. Commit the changes.\n\nWhen cloning the repository, remember to also check out the submodules with the\nvendor code. You can do this by running `git submodule update --init --recursive`.\n\nEach time vendor code is updated, it will be necessary to release a new version\nof `aotuv_lancer_vorbis_sys` and/or `ogg_next_sys`, so that users of `vorbis_rs`\ncan download binding crates with the updated vendor code.\n\n# 🤝 Contact\n\nWe welcome friendly talk about the project, including questions,\ncongratulations, and suggestions. Head to the [GitHub Discussions\npage](https://github.com/ComunidadAylas/vorbis-rs/discussions) to interact with\nfellow users, contributors and developers.\n\n# 🧑‍🤝‍🧑 Contributors\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/AlexTMjugador\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/7822554?v=4?s=100\" width=\"100px;\" alt=\"Alejandro González\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAlejandro González\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/ComunidadAylas/vorbis-rs/commits?author=AlexTMjugador\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/ComunidadAylas/vorbis-rs/commits?author=AlexTMjugador\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#example-AlexTMjugador\" title=\"Examples\"\u003e💡\u003c/a\u003e \u003ca href=\"#maintenance-AlexTMjugador\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"#projectManagement-AlexTMjugador\" title=\"Project Management\"\u003e📆\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/vivyir\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/67435287?v=4?s=100\" width=\"100px;\" alt=\"Vivian\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eVivian\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/ComunidadAylas/vorbis-rs/commits?author=vivyir\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-vivyir\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://dulc.es/@martin\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/227204?v=4?s=100\" width=\"100px;\" alt=\"Martin Algesten\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMartin Algesten\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/ComunidadAylas/vorbis-rs/commits?author=algesten\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/astral4\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/88992929?v=4?s=100\" width=\"100px;\" alt=\"Kyle Chen\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKyle Chen\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-astral4\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://mastodon.gamedev.place/@daniel_collin\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/350822?v=4?s=100\" width=\"100px;\" alt=\"Daniel Collin\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDaniel Collin\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/ComunidadAylas/vorbis-rs/issues?q=author%3Aemoon\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://www.comp.nus.edu.sg/~yuz1996/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/6760768?v=4?s=100\" width=\"100px;\" alt=\"Jason Yu\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJason Yu\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#security-jasonyu1996\" title=\"Security\"\u003e🛡️\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://logisparte.com/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/6752776?v=4?s=100\" width=\"100px;\" alt=\"Philippe Desjardins\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePhilippe Desjardins\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/ComunidadAylas/vorbis-rs/commits?author=pdesjardins90\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the\n[all-contributors](https://github.com/all-contributors/all-contributors)\nspecification. Contributions of any kind welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcomunidadaylas%2Fvorbis-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcomunidadaylas%2Fvorbis-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcomunidadaylas%2Fvorbis-rs/lists"}