Reorganize the repo so it can rebuild the audio hub on any Pi, not just the live `adac` box: - README.md: now a project landing page (overview, repo map, deploy summary) instead of the adac-specific maintenance guide. - MAINTENANCE.md: the "how it's wired / day-to-day upkeep" guide, genericized with <pi-host>/<pi-ip>/<lan-cidr>/<desktop-host> placeholders. - config/: the actual PipeWire/WirePlumber drop-ins as deploy-ready templates (<VOLT_SOURCE>/<VOLT_SINK>/<LAN_CIDR> placeholders, with the commands to resolve them in each file's header comment). - systemd/bt-agent.service, firmware/config.txt.snippet: the remaining deployable artifacts. - instances/adac.md: the live deployment's real values (host, IP, Volt serial, paired phones, history) — the one place machine-specific data lives. - RUNBOOK.md: replace the hardcoded LAN subnet with <lan-cidr>. - root-README.md: genericized; .gitignore keeps local harness settings out. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
53 lines
2.8 KiB
Markdown
53 lines
2.8 KiB
Markdown
# Raspberry Pi PipeWire Audio Hub
|
||
|
||
Turn a headless **Raspberry Pi 4** + **Universal Audio Volt 4** USB interface into a
|
||
multi-source audio hub built around an analog mixer:
|
||
|
||
- a **phone** plays in over **Bluetooth** (A2DP),
|
||
- one or more **desktops** play in over the **wired LAN** (PipeWire/PulseAudio network),
|
||
- the mixer's **main output** is captured back and **re-published on the network** so
|
||
**OBS** machines can record it.
|
||
|
||
```
|
||
Phone (Bluetooth) ───────────────────────▶ Volt OUT 1/2 ─┐
|
||
Desktop (default sink) ──────────────────▶ Volt OUT 1/2 ─┤
|
||
├─▶ MIXER ─▶ main out
|
||
Desktop ("Desktop (Volt 3/4)" sink) ─────▶ Volt OUT 3/4 ─┘ │
|
||
│
|
||
OBS machines ◀── network ◀── Volt IN 3/4 ◀────────────────────┘
|
||
```
|
||
|
||
The Pi does **no software mixing** — it just feeds the Volt's outputs and captures
|
||
its inputs. All levels/EQ/mute live on the physical mixer.
|
||
|
||
## What's in this repo
|
||
|
||
| Path | What it is |
|
||
|---|---|
|
||
| **`RUNBOOK.md`** | Build from a blank SD card, step by step (the install guide). |
|
||
| **`MAINTENANCE.md`** | How a built hub is wired together + day-to-day upkeep (operate it). |
|
||
| **`config/`** | The actual PipeWire/WirePlumber drop-in files, as deploy-ready templates. |
|
||
| **`systemd/`** | `bt-agent.service` — headless auto-accept Bluetooth pairing. |
|
||
| **`firmware/`** | The `/boot/firmware/config.txt` lines to set (disable HDMI/onboard audio + Wi-Fi). |
|
||
| **`instances/`** | Per-deployment real values (host, IP, Volt serial, phones). E.g. `instances/adac.md`. |
|
||
|
||
The docs use placeholders — `<pi-host>`, `<pi-ip>`, `<lan-cidr>`, `<VOLT_SOURCE>`,
|
||
`<VOLT_SINK>` — filled in per box from the matching `instances/` file.
|
||
|
||
## Deploying to a Pi
|
||
|
||
`RUNBOOK.md` is the authoritative walkthrough. In short, once the OS + packages are
|
||
in place (RUNBOOK §1–§2):
|
||
|
||
1. Copy `config/` into `~/.config/` for the `user` account (PipeWire runs per-user).
|
||
2. In `30-mixer-return.conf` / `40-desktop-34.conf` replace `<VOLT_SOURCE>` /
|
||
`<VOLT_SINK>` with this unit's real node names (the commands are in each file's
|
||
header comment), and put your subnet in `20-network.conf` (`<LAN_CIDR>`).
|
||
3. Install `systemd/bt-agent.service` to `/etc/systemd/system/` and
|
||
`enable --now` it.
|
||
4. Apply the `firmware/config.txt.snippet` edits and reboot.
|
||
5. `MAINTENANCE.md` §7 has the health checks to confirm it all came up.
|
||
|
||
> The deployed Pi also carries two on-box READMEs (a `/root` redirect to "log in as
|
||
> `user`", and a copy of `MAINTENANCE.md` at `/home/user/README.md`). The redirect's
|
||
> text is `root-README.md` in this repo.
|