mirror of
https://github.com/skoelle/moonweb-site.git
synced 2026-09-17 17:00:25 +00:00
45 lines
2.1 KiB
Plaintext
45 lines
2.1 KiB
Plaintext
---
|
|
title: "AirPlay Audio"
|
|
section: "smarthome"
|
|
parent: "/"
|
|
description: "Multi-room AirPlay receivers with software volume boost on Raspberry Pi devices."
|
|
layout: base.njk
|
|
---
|
|
<h1>AirPlay Audio</h1>
|
|
<div class="detail-content">
|
|
|
|
<p>Two Raspberry Pis run AirPlay receivers so any Apple device in the flat
|
|
can stream audio to the kitchen or the bathroom without a dedicated
|
|
speaker app.</p>
|
|
|
|
<h2>Setup</h2>
|
|
<table>
|
|
<tr><th>Location</th><th>Hardware</th><th>AirPlay version</th><th>Runs as</th></tr>
|
|
<tr><td>Kitchen</td><td>Raspberry Pi 3B</td><td>AirPlay 2</td><td>Docker container (shairport-sync)</td></tr>
|
|
<tr><td>Bathroom</td><td>Raspberry Pi Zero W</td><td>AirPlay 1</td><td>Native systemd service (older OS, legacy repo)</td></tr>
|
|
</table>
|
|
|
|
<h2>The volume-boost problem</h2>
|
|
<p>Both Pis' analog audio output is too quiet at full hardware volume, so
|
|
a software mixer stage (<code>+20 dB</code> via an ALSA softvol plugin) sits between
|
|
shairport-sync and the hardware. The hardware mixer itself is deliberately
|
|
left fixed at 100% / 0 dB, and shairport-sync only ever adjusts its own
|
|
internal software volume — this avoids the volume jumps and mixer
|
|
conflicts that show up when multiple layers all try to control loudness.</p>
|
|
|
|
<h2>Bathroom-specific integration</h2>
|
|
<p>The bathroom Pi also runs a small custom tool that starts an internet
|
|
radio stream automatically when its light sensor detects the light has
|
|
been switched on. A simple flag file signals whether AirPlay is currently
|
|
active, so the automatic radio stream politely stays off while someone is
|
|
actively AirPlaying — and resumes its normal behavior as soon as the
|
|
AirPlay session ends.</p>
|
|
|
|
<h2>Why this design</h2>
|
|
<ul>
|
|
<li>Software-only volume control avoids ALSA mixer conflicts across two different loudness sources.</li>
|
|
<li>The flag-file handoff is trivial to implement and doesn't need a message broker for something this simple.</li>
|
|
<li>Docker on the kitchen Pi keeps that receiver easy to update; the bathroom Pi's older OS made a native install more reliable than fighting Docker on legacy hardware.</li>
|
|
</ul>
|
|
</div>
|