From efebb56df421be79be48cc4a46583f49105146d6 Mon Sep 17 00:00:00 2001 From: menekis <_a+B*9y[%Q8)> Date: Sun, 19 Jul 2026 15:03:48 -0400 Subject: [PATCH] first ai draft for readme --- README.md | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b47ff54..b469ff1 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,80 @@ -# Speaker-Cast +# 🔊 3D Printed Multi-Room Smart Speaker +A complete guide to building a custom-designed, 3D-printed smart speaker. This project leverages a Raspberry Pi Zero 2 W for the client hardware and uses Music Assistant with Snapcast for sub-millisecond multi-room audio synchronization. + +## ✨ Features +* **Acoustically Optimized:** Custom 3D printed enclosures designed to eliminate standing waves. +* **Perfectly Synced:** Snapcast integration ensures multi-room audio with zero echo. +* **Centralized Control:** Managed via Music Assistant and Home Assistant. +* **Low Power:** Client nodes run on highly efficient Raspberry Pi Zero 2 W boards. + +--- + +## 🛠️ Hardware Prerequisites + +### The Client (Speaker Node) +* **SBC:** Raspberry Pi Zero 2 W +* **Audio Output:** HiFiBerry AMP2 (or similar I2S DAC/Amp HAT) +* **Drivers:** Raw speaker drivers (T/S parameters required for volume calculation) +* **Power:** High-quality 5V power supply +* **Hardware:** M3 heat-set brass inserts, M3 machine screws, Poly-fil (pillow stuffing), and adhesive weather-stripping (or TPU for a printed gasket). + +--- + +## 🖨️ 3D Printing the Enclosure + +To achieve true high-fidelity sound rather than a hollow plastic echo, the enclosure must be rigid, airtight, and acoustically tuned. + +### Acoustic Design +1. **Calculate Volume:** Start with a **sealed enclosure**. Use the Thiele/Small (T/S) parameters of your chosen speaker driver to calculate the exact internal volume required. +2. **Ditch the Cube:** Model the enclosure with swept curves, spheres, or teardrops. Curves prevent internal standing waves and add massive structural rigidity. +3. **Thick Baffle:** Design the front face (where the speaker mounts) to be 15mm - 20mm thick. + +### Slicer Settings +* **Material:** PETG, ABS, or ASA. (Avoid PLA as it creeps under screw pressure and warps in heat). +* **Walls over Infill:** Aim for 3-4 perimeters to achieve a 2mm-3mm solid shell. Total wall thickness should be roughly 8mm-10mm. +* **Infill:** 15% - 40% Gyroid or Cubic infill for multi-directional strength. + +### Assembly +* Melt heat-set inserts into the mounting holes to prevent screws from backing out under vibration. +* Apply a gasket between the driver and the printed baffle to ensure an airtight seal. +* Loosely pack the interior with Poly-fil to slow internal sound waves and improve bass response. + +--- + +## 💻 Software Deployment + +### 1. The Server (Control Plane) +Music Assistant handles both the media library and the Snapcast server. Deploying via Docker Compose is the cleanest method for a dedicated server environment like TrueNAS. + +**Crucial Note:** You *must* use `network_mode: "host"` so Music Assistant can dynamically allocate TCP ports for incoming audio streams without Docker bridge bottlenecks. + +```yaml +services: + music-assistant: + image: ghcr.io/music-assistant/server + container_name: music-assistant + restart: unless-stopped + network_mode: "host" + volumes: + - /path/to/your/appdata/music-assistant:/data + # Mount your local media directories (e.g., from your ZFS pool) + - /path/to/your/media:/media:ro +``` + +### 2. The Client (Pi Zero 2 W) +1. Flash the Pi Zero 2 W with a lightweight OS like **Raspberry Pi OS Lite**. +2. Install the Snapcast client daemon: + ```bash + sudo apt update + sudo apt install snapclient + ``` +3. Configure `snapclient` to point to your Music Assistant server IP, connecting on port `1704`. +4. Configure your `/boot/config.txt` to enable the I2S overlay for your specific DAC/Amp HAT. + +--- + +## 🌐 Network Requirements +* **Server:** Wired Ethernet is highly recommended. +* **Clients:** A strong, stable 2.4GHz Wi-Fi connection. +* **Ports:** TCP `1704` (Audio Stream) and TCP `1705` (Control/JSON-RPC) must be open.