β

利用树莓派, 让你的有线音箱支持 AirPlay 无线播放

少数派 143 阅读
 

自我介绍

笔者系计算机系在校生,搞机生涯丰富,强迫症患者,喜欢自己给自己找事,想尽办法让生活过的方便一丢丢,多年果粉 & Nexus 粉一枚,未来的码农,目前深陷 Apple Loop 无法自拔。

上一期: 跟着上手树莓派(二)—— SSH & VNC 连接


前言

截至目前,你应该拥有了一块正常运行的树莓派,掌握了与他互动的两种方式(SSH 以及 VNC),本期让我们开始搞一个小东西,一款名叫 Shairplay 的应用。它可以让你的有线老音箱与树莓派结合,瞬间变成一款支持 AirPlay 的智能 Wi-Fi 音箱,你的 iOS 设备在家中可以无缝连接到同一音箱上,就像下图所示:

macOS 上可以按住 Option,点击音量,选择把音频从音箱输出。
iOS 上也可以在音乐界面或控制中心里选择从音箱输出。

1. 更换软件源

刚才说过,这个功能的实现是通过一款叫做 Shairplay 的应用来实现的,我们可以直接在树莓派从软件源上下载安装该应用,但由于树莓派默认的软件源是国外的服务器,访问较慢,所以在开始之前我们把软件源更改为阿里云提供的高速镜像源。(必须感谢下阿里爸爸)

①  SSH 登录至树莓派,输入 nano /etc/apt/sources.list

②  将文件按下图修改:(注意将原来的 deb-src 那一行的行首加一个 "#" 来注释掉原来的源)

8CCD6205-2F7F-4C7A-8133-BEF021555B89

阿里云镜像源:

deb http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib

③  然后按 Ctrl + O,回车,Ctrl + X,保存退出。

④  最后输入 sudo apt-get update && apt-get upgrade -y 更新,可以看到此时连接的速度已经快到飞起了,待更新完毕,继续下面的教程。

0C011034-0FBA-4C21-B144-4DF879867432

2. 安装 Shairplay

接下来就可以愉快的安装 Shairplay 了,一切根据 Github 上的教程走:

①  依次输入以下命令,安装 Shairplay 和必要依赖:

sudo apt-get install autoconf automake libtool sudo apt-get install libltdl-dev libao-dev libavahi-compat-libdnssd-dev sudo apt-get install avahi-daemon

②  依次输入以下命令,来编译和安装 Shairplay:

git clone https://github.com/juhovh/shairplay.git
cd shairplay
./autogen.sh
./configure
sudo make install

③  至此,你的 Shairplay 就安装完毕了。

3. 第一次运行 Shairplay

①  确保你在 shairplay 的路径下,输入 shairplay -a Shairplay ,看到以下输出,即成功运行:

②  此时使用你的 iOS 设备查找 Airplay 音箱,即可找到你的小音箱。

IMG_3194

4. TrubleShoot (噪音问题)

如果你遇到音箱有莫名噪音的问题,除了使用共地滤波器解决一下之外,还可以尝试更改 Audio 的 PWM 模式,修改为图中样子(没有的话就新增),之后重启一下就好了。

7C76F889-3A61-4DD8-B154-BB775AE425A6

5. 设置开机自启

截至目前,一旦我们关闭 SSH 的窗口,音箱就不能再用 Airplay 了。而当我们想使用的时候,也需要手动打开,所以设置开机自动启动就是件必备的事情:

①  建立 shairplay 服务,输入:

cd /etc/init.d/touch shairplaynano shairplay

②  开启启动脚本,复制粘贴以下:

#!/bin/bash## This starts and stops shairplay#### BEGIN INIT INFO# Provides: shairplay# Required-Start: $network# Required-Stop:# Short-Description: Free portable AirPlay server implementation similar to ShairPort.# Description: Free portable AirPlay server implementation similar to ShairPort.# Default-Start: 2 3 4 5# Default-Stop: 0 1 6### END INIT INFO

# Source function library.. /lib/lsb/init-functions
DAEMON="/usr/local/bin/shairplay"DAEMON_ARGS="-a Wohnzimmer"  # 这里的 Wohnzimmer 可以替换成你想要的音箱名称AIRPORT_KEY_DIR="/usr/local/share/shairplay"
[ -x $binary ] || exit 0
RETVAL=0
start() { echo -n "Starting shairplay: " start-stop-daemon --start --quiet --chdir $AIRPORT_KEY_DIR \ --exec "$DAEMON" -b --oknodo -- $DAEMON_ARGS log_end_msg $?}
stop() { echo -n "Shutting down shairplay: " start-stop-daemon --stop --quiet --exec "$DAEMON" \ --retry 1 --oknodo log_end_msg $?}
restart() { stop sleep 1 start}
case "$1" in start) start ;; stop) stop ;; status) status shairplay ;; restart) restart ;; *) echo "Usage: $0 {start|stop|status|restart}" ;;esacexit 0

③  依旧 Ctrl+O,回车, Ctrl+X 退出。

④  输入 chmod +x /etc/init.d/shairplay ,赋予其可执行权限。

⑤  输入 update-rc.d shairplay defaults ,更新 Shairplay 设置。

⑥  输入 cd ~ 回到用户目录。

⑦  输入以下命令,储存 airport.key。

mkdir /usr/local/share/shairplaycp shairplay/airport.key /usr/local/share/shairplay

⑧  输入 nano /etc/rc.local,复制以下脚本:

# Don't run multiple instances - start just one screen, named "shairplay":[[ $(screen -list | grep shairplay) == '' ]] && screen -dmS shairplay sh# Keep shairplay perpetually running. When it crashes, we can just SIGKILL it, and it comes back:[[ $(ps aux | grep -v grep | grep pts | grep '/usr/bin/shairplay') == '' ]] && screen -S shairplay -p 0 -X stuff "while true; do /usr/bin/shairplay --apname=Airamaplay --ao_devicename=default; sleep 2s; done"

⑨  粘贴到 exit 0 之前,Ctrl+O,回车,Ctrl+X,退出。

⑩  输入 reboot,重启,开机就会自动启动 Shairplay 了。

Enjoy it.


我的新浪微博: @Sunbelife ,欢迎和我讨论和分享好玩的东西。

 
作者:少数派
少数派发现优质应用、游戏与设备周边,撰写客观深度的评测,制作实用易懂的教程,以少数人的力量,改变多数人的数字生活。

发表评论