{"id":16221606,"url":"https://github.com/rahix/pavu-mixer","last_synced_at":"2025-03-16T11:31:09.074Z","repository":{"id":91956675,"uuid":"396741616","full_name":"Rahix/pavu-mixer","owner":"Rahix","description":"\"Hardware Mixer\" for PulseAudio","archived":false,"fork":false,"pushed_at":"2025-01-05T02:35:25.000Z","size":29523,"stargazers_count":15,"open_issues_count":8,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-14T18:59:55.683Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Rahix.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-HARDWARE","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":"2021-08-16T10:28:12.000Z","updated_at":"2025-01-23T10:58:16.000Z","dependencies_parsed_at":"2024-07-12T00:09:49.376Z","dependency_job_id":null,"html_url":"https://github.com/Rahix/pavu-mixer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rahix%2Fpavu-mixer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rahix%2Fpavu-mixer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rahix%2Fpavu-mixer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rahix%2Fpavu-mixer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Rahix","download_url":"https://codeload.github.com/Rahix/pavu-mixer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243814864,"owners_count":20352037,"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","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":[],"created_at":"2024-10-10T12:09:07.796Z","updated_at":"2025-03-16T11:31:07.693Z","avatar_url":"https://github.com/Rahix.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"![](Eyecandy/Logo.svg) Pavu Mixer\n=================================\n_Pavu Mixer_ is a hardware mixing desk for controlling\n[PulseAudio](https://www.freedesktop.org/wiki/Software/PulseAudio/) streams on\na connected computer.  Think of it as a hardware version of\n[`pavucontrol`](https://freedesktop.org/software/pulseaudio/pavucontrol/).\n\n![Pavu Mixer in Action](Eyecandy/Picture.jpg)\n\nMore pictures in [`Eyecandy/`](./Eyecandy).\n\n### Hardware\nThe _Pavu Mixer_ is currently just a PCB fitted as the front plate of a\n[console enclosure][enclosure].  This remedies the need for a custom front\nplate.  Beneath it, an [STM32F3DISCOVERY][discovery] eval board is used as the\ncontroller.  Connection to the computer is done over USB.\n\nFollowing are the capabilities of the current hardware:\n\n- 4 \"Application Channels\" + 1 \"Main\" Channel\n- [240x240 LCD Display][display-board] (driver available in\n  [`waveshare-display/`](./waveshare-display) subdirectory)\n- Per channel:\n  - Mono Volume Fader\n  - Mute Button with green/red indicator LED\n  - LED as brightness-based level indicator\n  - Red LED as status indicator\n- For the main channel, the level indicator is a 20 segment LED-bargraph\n  instead.\n- USB-B socket for connection to the computer\n\n[enclosure]: https://www.tekoenclosures.com/en/products/family/PU/series/pult-36\n[discovery]: https://www.st.com/en/evaluation-tools/stm32f3discovery.html\n[display-board]: https://www.waveshare.com/wiki/1.3inch_LCD_Module\n\n\n### Firmware/Software\nThe firmware on the [STM32F3DISCOVERY][discovery] board exposes all of the \"UI\"\n(faders, buttons, indicators, display) to the host via a custom USB class.\nMessages are serialized using [`postcard`](https://crates.io/crates/postcard).\n\nOn the host, a daemon is running which communicates to the hardware and keeps\ntrack of PulseAudio state.  It has a configuration file for selecting which\nchannel controls which applications.  Streams are then attached to the mixer\nchannels automatically when they appear.\n\nThe firmware and host-side software are still in development - these features\nare subject to change.\n\n- New application streams are attached to channels based on a configurable\n  property-matching table.  All streams connected to a channel will be forced\n  to the volume reported by the fader.\n- Main channel controls the currently selected default sink.\n- Whenever a channel has an active stream, its reported icon will be displayed\n  on the LCD.  For streams which do not properly report an icon, a second\n  matching table can be used to select custom icons.\n\n\n### Alternative Hardware\nRight now, only the _Pavu Mixer_ hardware is supported.  As this board is not\ncommercially available, but a hardware mixer for PulseAudio could be\ninteresting for other people as well, I am open to extend the host-daemon to\nsupport other boards as well.  For example, there are a lot of MIDI-based\ndigital audio mixers which would be a good candidate for support.  Please open\nan issue on GitHub or contact me directly if interested.\n\n\n## Project Structure\n| Path | Contents |\n| -- | -- |\n| `Eyecandy/` | Pictures and \"rendered\" schematic ([`Pavu-Mixer-Schematic.pdf`](Eyecandy/Pavu-Mixer-Schematic.pdf)). |\n| `Hardware/` | KiCAD project for the interface board \u0026 other hardware related files. |\n| `hardware-tests/` | Test-firmware for demonstrating functionality of all parts of the hardware. |\n| `common/` | Definitions shared between firmware and host-software (for [`postcard`](https://crates.io/crates/postcard) serdes). |\n| `firmware/` | Firmware for the [STM32F3DISCOVERY][discovery] board. |\n| `host-daemon/` | Host-side daemon for mixer communication and PulseAudio interaction. |\n| `waveshare-display/` | Driver for the LCD screen (see its [README](waveshare-display/README.md) for details). |\n\n\n## License\nIt is a difficult story... Individual parts of this project are licensed under\ndifferent terms:\n\n- All files in the `Hardware/` directory (exception below) are licensed under\n  the [CERN-OHL-W](LICENSE-HARDWARE).\n- Files in `Hardware/3D` are licensed under [MIT](Hardware/3D/LICENSE-3D).\n- The display driver in `waveshare-display/` is dual licensed under Apache 2/MIT\n  as detailed in its own [README](waveshare-display/README.md).\n- The remaining files of this project (including `common/`, `firmware/`,\n  `hardware-tests/`, and `host-daemon/`) are licensed under the\n  [GPL v3](LICENSE-SOFTWARE).\n\n\n## Contribution\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall\nbe licensed as above, without any additional terms or conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frahix%2Fpavu-mixer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frahix%2Fpavu-mixer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frahix%2Fpavu-mixer/lists"}