{"id":13561918,"url":"https://github.com/dulltools/ex_jack","last_synced_at":"2025-12-11T23:39:37.850Z","repository":{"id":39832063,"uuid":"456650027","full_name":"dulltools/ex_jack","owner":"dulltools","description":"JACK interface for Elixir using NIFs.","archived":false,"fork":false,"pushed_at":"2024-03-22T04:52:41.000Z","size":112,"stargazers_count":5,"open_issues_count":11,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-17T02:05:17.078Z","etag":null,"topics":["audio","beam","elixir","erlang","jack","jackaudio","rustler"],"latest_commit_sha":null,"homepage":"https://hex.pm/packages/ex_jack","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dulltools.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}},"created_at":"2022-02-07T19:37:07.000Z","updated_at":"2024-01-18T10:51:27.000Z","dependencies_parsed_at":"2023-02-17T01:15:28.739Z","dependency_job_id":"95df9386-6959-41c6-8227-5a23f78792cc","html_url":"https://github.com/dulltools/ex_jack","commit_stats":null,"previous_names":["fraihaav/ex_jack"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/dulltools/ex_jack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dulltools%2Fex_jack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dulltools%2Fex_jack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dulltools%2Fex_jack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dulltools%2Fex_jack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dulltools","download_url":"https://codeload.github.com/dulltools/ex_jack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dulltools%2Fex_jack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27672217,"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-12-11T02:00:11.302Z","response_time":56,"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":["audio","beam","elixir","erlang","jack","jackaudio","rustler"],"created_at":"2024-08-01T13:01:02.538Z","updated_at":"2025-12-11T23:39:37.815Z","avatar_url":"https://github.com/dulltools.png","language":"Elixir","funding_links":[],"categories":["Audio and Sounds"],"sub_categories":[],"readme":"# ExJack\n\n[![Elixir CI](https://github.com/dulltools/ex_jack/actions/workflows/release.yaml/badge.svg)](https://github.com/dulltools/ex_jack/actions/workflows/release.yaml)\n[![Module Version](https://img.shields.io/hexpm/v/ex_jack.svg)](https://hex.pm/packages/ex_jack)\n[![Hex Docs](https://img.shields.io/badge/hex-docs-lightgreen.svg)](https://hexdocs.pm/ex_jack/)\n[![Total Download](https://img.shields.io/hexpm/dt/ex_jack.svg)](https://hex.pm/packages/ex_jack)\n[![License](https://img.shields.io/hexpm/l/ex_jack.svg)](https://github.com/dulltools/ex_jack/blob/main/LICENSE.md)\n[![Last Updated](https://img.shields.io/github/last-commit/dulltools/ex_jack.svg)](https://github.com/dulltools/ex_jack/commits/main)\n\nJACK audio interface for Elixir using Rustler-based NIF.\n\nThe purpose of this library is to provide an audio outlet for Elixir through all platforms. However, if you're on Linux, and don't need JACK outright, it's probably preferable to use [ExAlsa](https://github.com/FraihaAV/ex_alsa) and interface with ALSA directly.\n\n## Requirements\n```\nTested with:\nJACK 2 (see https://github.com/RustAudio/rust-jack)\nElixir 1.12\nRust 1.56.1\n```\n\n## Set-up\n### OSX\n```\nbrew install jack\nbrew services start jack\n\nmix test\n```\n\nIt may help to view what's going with JACK using a GUI like https://qjackctl.sourceforge.io/. If you want to capture sound this is simplest way to connect until an API is added to assist with this.\n\nSee GOTCHAS section for working through issues.\n\n\n## Usage\nThis is an example of piping your capture to output, be wary of feedback. You have to explicity connect your capture with \"ExJackDemo:in\", if you're unsure how to do this, install QJackCTL.\n\n```elixir\n$ iex -s mix\n\u003e ExJack.Server.start_link(%{name: \"ExJackDemo\"})\n\u003e ExJack.Server.set_input_func(fn frames -\u003e ExJack.Server.send_frames(frames) end)\n```\n\n## TODO\n### Road to stable version 1\nThe first three are necessary to make this library useable beyond hobby projects.\n- [ ] Better support for expected frames per cycle from JACK\n- [ ] Handle variable channels with definable sources\n- [ ] Handle JACK notifications\n- [ ] Handling for cases that drop the JACK client such as underruns.\n- [ ] Additional tests in Elixir\n- [ ] Additional tests in Rust\n- [ ] MCU demo\n- [ ] Improve documentation with additional examples\n- [ ] Autocorrection for xruns\n\n## GOTCHAS\n###  Could not open requested library\nYou may get something like the following:\n```\nthread '\u003cunnamed\u003e' panicked at 'called `Result::unwrap()` on an `Err` value: LoadLibraryError(\"Could not open the requested library: dlopen(libjack.0.dylib, 0x0005): tried: 'libjack.0.dylib' (no such file), '/usr/local/lib/libjack.0.dylib' (no such file), '/usr/lib/libjack.0.dylib' (no such file), '/Users/adrian/Dev/ex_jack/libjack.0.dylib' (no such file)\")', src/lib.rs:45:79\nnote: run with `RUST_BACKTRACE=1` environment variable to display a RUST_BACKTRACE\n```\n\nTo fix, try the following:\n```\n$ brew --prefix jack\n\u003e /opt/homebrew/opt/jack # this may differ for you, make sure to update the below path if it does...\n$ sudo ln -s /opt/homebrew/opt/jack/lib/libjack.0.dylib /usr/local/lib/libjack.0.dylib\n```\n\n## Dev\n### Releases\nTaken from https://hexdocs.pm/rustler_precompiled/precompilation_guide.html#the-release-flow\n```\n    release a new tag\n    push the code to your repository with the new tag: git push origin main --tags\n    wait for all NIFs to be built\n    run the mix rustler_precompiled.download task (with the flag --all)\n    release the package to Hex.pm.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdulltools%2Fex_jack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdulltools%2Fex_jack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdulltools%2Fex_jack/lists"}