pi_audio/README.md
Me Here f0a07c269d Restructure into a reusable, genericized deploy kit
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>
2026-06-15 08:06:03 -05:00

53 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.