树莓派的初始配置与AirPlay
立泉我那台树莓派3B
已经吃灰很久,除去大学时做过的一个机器人之外并没有给它找到合适的用途,所以自从机器人因为某些原因被拆掉后一直把它放在柜子里。
受古典戏剧影响,我的审美倾向正趋于“平淡”,对桌上硕大的副屏和繁多配件愈感碍眼。当初购买只是好奇尝试,但长期使用并没有提升多少效率反而会使我无法专注,便决定移除它们。抛掉4K
副屏,13寸MacBook Pro
的图形算力显然得到不小释放,能清晰感觉到过渡动画更加细腻,也不再有频繁的卡顿掉帧。另外,拔掉外置红轴机械键盘才发现苹果的蝶式键盘并没有那么不堪,是一种不同于长键程的清脆手感,我很喜欢。
MBP
无需其它配件就已经很好用,唯一不足是与桌面音箱比起来寒酸的内置扬声器,毕竟那么悬殊的音腔体积。我有一对不支持蓝牙和网络的漫步者
经典桌面音箱EDIFIER R1200TII
,之前一直插在雷电3
拓展坞上,用一根线连接电脑就能自动切换到它。但我想更进一步,让我的iPhone
和iPad
也能以无线方式播放音频。
首先想到的自然是蓝牙,在京东上买一个海备思
蓝牙接收器,但结果很失望,不仅有无法消除的底噪,而且只能连接一台设备,换其它设备要重新配对,不是我想要的效果。另一种方案就是AirPlay
,闲置的树莓派
作为AirPlay
接收器,由它控制播放收到的音频流,可以让这台音箱以低成本融入到苹果的设备生态里。
初始化
树莓派
已经吃灰太久,要重新安装Raspberry Pi OS with desktop操作系统。
这个系统有一些初始配置:
- 默认用户名为
pi
,密码为raspberry
- 默认主机名为
raspberrypi
- 默认关闭
SSH
和VNC
因为SSH
和VNC
是默认关闭的,所以必须在有显示器和键鼠的情况下手动开启之后才能通过网络连接到树莓派
,然后就可以扔掉显示器直接用远程桌面了。
# 在同一个局域网中通过主机名访问树莓派
ssh pi@raspberrypi
如果不想每次都输密码可以用SSH Key登录。
另一个众所周知的Linux
必备操作是切换软件源,树莓派
默认的源archive.raspbian.org
位于欧洲,我这里的访问速度低于100KB/S,必须切换到国内镜像。可以在这个列表里找到,我选择的是清华大学的源mirrors.tuna.tsinghua.edu.cn
。
树莓派3B
设置apt
源需要修改2个文件:
/etc/apt/sources.list
/etc/apt/sources.list.d/raspi.list
# 编辑前备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.back
sudo cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.back
# 编辑rasbian相关的软件包地址,切换到清华源
sudo vim /etc/apt/sources.list
# 内容改为
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi
# 编辑rasperrypi相关的软件包地址,切换到清华源
sudo vim /etc/apt/sources.list.d/raspi.list
# 内容改为
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
切换好国内源,再升级一下已安装的软件包就可以正常使用树莓派
。
# 获取最新的软件包版本
sudo apt update
# 升级软件包
sudo apt upgrade
AirPlay
树莓派
支持AirPlay
有2种方式,BalenaSound和Shairport Sync。
BalenaSound
本质是一个支持AirPlay
的IOT
系统,树莓派
安装此系统会在开机后自动接入它提供的物联网平台,同时在局域网内能通过AirPlay
把音频串流到树莓派
连接的音箱上。这种方式非常简单,开箱即用,但因为要安装定制的操作系统,树莓派
自身的灵活性是受限的。
而Shairport Sync
则只是一个单纯的开源Linux
软件,可以安装到任何支持的操作系统中,包括Raspberry Pi OS
,显然更适合开发者。
Simple Installation Instructions
官网提供完善的安装文档,对树莓派
有单独介绍,只是要注意配置文件/etc/shairport-sync.conf
中的output_device
参数。它指定要播放音频的设备且与实际硬件有关,如果照搬示例中给出的hw:0
可能最终串流成功但却没有声音。
// Sample Configuration File for Shairport Sync on a Raspberry Pi using the built-in audio DAC
general =
{
volume_range_db = 60;
};
alsa =
{
output_device = "hw:0";
mixer_control_name = "PCM";
};
确定这个参数只需执行shairport-sync -h
,在输出中找到hardware output devices
,这里的hw:Headphones
就是树莓派
上的3.5mm音频接口。
Usage: shairport-sync [options...]
or: shairport-sync [options...] -- [audio output-specific options]
...
Settings and options for the audio backend "alsa":
-d output-device set the output device, default is "default".
-c mixer-control set the mixer control name, default is to use no mixer.
-m mixer-device set the mixer device, default is the output device.
-i mixer-index set the mixer index, default is 0.
hardware output devices:
"hw:b1"
"hw:Headphones"
所以树莓派
的最终配置是:
general =
{
// 自定义AirPlay名字
name = "RaspberryPi";
volume_range_db = 60;
};
alsa =
{
output_device = "hw:Headphones";
mixer_control_name = "PCM";
};
按说明启动Shairport Sync
:
# 启动shairport-sync,即可在局域网内找到这个AirPlay设备
sudo systemctl start shairport-sync
# 故障时重启服务
sudo systemctl restart shairport-sync
# 把shairport-sync添加到开机启动
sudo systemctl enable shairport-sync
如果AirPlay
仍然没有声音,试试在树莓派
上播放音频,观察音箱是否出声。如果没有,可能是树莓派
系统的音频输出设备没有设置为耳机接口,执行sudo raspi-config
,在System Options
的Audio
中选择输出设备为Headphones
即可。