本内容来源于@什么值得买APP,观点仅代表作者本人 |作者:拉德布鲁赫信徒
这篇文章的一切,要从什么值得买的金币说起。前一阵发现什么值得买的金币跟京东云无线宝给的京豆已经攒了很多很多了,就套现了一波,顺手买了一个音响,就是很普通的一个音响,漫步者的R201BT。
虽然是一个蓝牙音响把,但是关于听歌这种事情,就是蛮随性的,有时候用着电脑(音响是接在电脑上的),有时候又是手机或者平板。有时候就是很想让这个音响成为某种意义上的“共享音响”,即随时随地都可以享受音乐(瞎听加木耳,没必要跟我说加钱什么的,这个音响对我来说已经足够使用了)。
在这个立意下,在猫店狗店进行了一番深入的学习,市面上主流的协议就是两种,即苹果的airplay和安卓等设备使用的dlan(当然还有qq音乐自己搞出来的qplay,因为确实用得少就不在我的考虑范围了),按照我的理解归纳为以下几种:
一种就是实体音响,自带各种协议的,这里比较常见的就是苹果的HomePod和Sonos这种音响,但是相对而言价格较高,而且某种意义上是封闭的。当然了,某哈曼卡顿的R1音响当年还是有一定性价比的,但是现在价格被炒上去了就瞬间不香了。还有一种就是在传统的音响上面进行升级,即所谓的无线音频接收器。
作为实体音响来说,主要存在两点,一点就是相对封闭,比如苹果的HomePod对苹果设备支持较好,但是对其他设备支持欠缺,Sonos在我看来设置过于麻烦。最重要的一点,就是价格普遍偏高,这种东西在自己有限的购买力范围内能够给自己带来快乐就行,本身产生不了其他的价格,因此对于我个人而言是不愿意花大价钱去买音响的。
而无线音频接收器而言,我觉得没有啥缺点,唯一的缺点就是贵,以下粘贴几个,可以感受一下:
身为垃圾佬,看着手头捡的这些垃圾,故萌生了自己做一个的想法。单纯做一个这样的音频接收器,需要的只是一个linux设备,性能根本不需要太多。手头的设备,之前发过的荣品rk3399(这个后面开文另外再说新用途)、sw799(一款rk3399的板子,但是接口跟资料确实是太少,不是很符合我的需求),还有一个rk3588的orangepi5(性能单纯拿来做一个这个属实浪费)。只试了一下荣品的设备,确实满足需求,但是rk3399的芯片拿来做这个确实大材小用了。
根据立意,这款设备我定下的标准就是:性能够用,处理器要支持64位的,ubuntu的版本一定要能支持到比较新的版本(个人的习惯),然后支持wifi(省去拖网线的烦恼),有音频接口。因此对应的只能是一些开发板啥的,但是新的开发板哪怕是全志h3芯片的价格都要100多,捡垃圾的话,支持系统都会或多或少的存在一些问题,有的就是纯粹移植一个系统,能够启动就算完事了,至于板子上的硬件能不能驱动起来,并不在考虑范围之内。
在小黄鱼浪迹了几天之后,终于是发现了这款30块钱的设备,正好能够契合我的需求,暂且给它起一个名字,就叫rk3118-box。
基本上该有的接口也都有了,比一些广告机拆下来的设备乱七八糟不知道咋用的接口,看起来观感好上很多。rk3118就是一款普普通通的64位芯片,但是神奇的是卖家竟然给刷上了ubuntu22.04。主要的几个接口如hdmi、音频接口、有线网口(好像是百兆的)、还有sd卡槽跟usb口,基本上该有的也都有了,不该有的一个都没有。个人感觉应该就是从某个机顶盒上面拆下来的板子,但是能够支持完整的ubuntu就比cm311这种只支持armbian的要好上不少了。
2 效果展示
以下分别展示以下airplay和dlan播放的效果,会分别列出一些存在的问题。
综合来说,这里支持的Airplay是通过AirPlay2实现的,存在的问题主要就是有一定的延迟,但是对于我来说还属于可以接受的范围。而DLAN的表现就比较稳定,但是也会存在一点点小bug,就是有时候快速点一首歌的时候会没有反应,但是切换一下也就好了。
3 部署
到手当然是先升级一下系统,SSH的密码是armbian还是root,自己试一下就好的。
sudo apt update
sudo apt upgrade
然后就进入部署阶段。
3.1 Airplay这里使用的shairport-sync去实现AirPlay的功能。这个项目同时支持AirPlay的一代和二代。
官方项目地址里面指明了两种部署方式,一种是本地部署,还有一种是通过Docker部署。经过实测,Docker总会出现一些奇怪的问题,因此还是用最基本的方式部署。当然,大家也可以尝试一下,有跑通的记得艾特我一下,我这出现的问题就是使用都没有声音。
3.1.1 部署
1 安装必要的依赖项
sudo apt-get install build-essential git xmltoman autoconf automake libtool libdaemon-dev libpopt-dev libconfig-dev libavahi-client-dev libssl-dev libasound2-dev libsoxr-dev avahi-daemon
2 克隆shairport-sync的源代码并编译
git clone https://github.com/mikebrady/shairport-sync.git
cd shairport-sync
autoreconf -i -f
./configure --sysconfdir=/etc --with-alsa --with-soxr --with-avahi --with-ssl=openssl --with-Systemd
make
3 安装shairport-sync
sudo make install
4 启动shairport-sync
shairport-sync
到这一步应该可以在Apple设备上看到一个名为“Shairport Sync”的AirPlay输出。试着播放一些音乐,看看是否能听到声音,如果可以听到,就证明部署成功了。如果没有的话,就进入下一步。
3.1.2 配置shairport-sync
1.以root身份打开 /etc/shairport-sync.conf 文件。使用以下命令:
sudo nano /etc/shairport-sync.conf
2.找到 [alsa] 部分,并取消 output_device 设置的注释,然后将其值设置为您的音频设备名称。这里的设备是“ANALOG”。所以,需要将其设置为:
output_device = "hw:ANALOG";
当然,也可以设置成hw:0,0 ,表示您要使用的是卡0(ANALOG)的设备0。
具体示例如下:
alsa =
{
output_device = "hw:0,0"; // the name of the alsa output device. Use "shairport-sync -h" to discover the names of ALSA hardware devices. Use "alsamixer" or "aplay" to find out the names of devices, mixers, etc.
// mixer_control_name = "PCM"; // the name of the mixer to use to adjust output volume. No default. If not specified, no mixer is used and volume in adjusted in software.
// mixer_control_index = 0; // the index of the mixer to use to adjust output volume. Default is 0. The mixer is fully identified by the combination of the mixer_control_name and the mixer_control_index, e.g. "PCM",0 would be such a specification.
// mixer_device = "default"; // the mixer_device default is whatever the output_device is. Normally you wouldn't have to use this.
// ...
};
3.保存文件并退出编辑器。
4.重启shairport-sync服务:
sudo systemctl restart shairport-sync
到这里就Airplay已经部署完成了,关于设置开机启动,可以参考一下下面的内容。
3.2 DLANsudo systemctl enable shairport-sync
sudo systemctl start shairport-sync
DLAN是通过Gmrender来实现的,以下仅给出步骤:
3.2.1 安装依赖
sudo apt-get install libupnp-dev libgstreamer1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-alsa autoconf
3.2.2 安装 Gmrender
1、定位到home文件夹并克隆程序源码
cd ../home/
git clone <https://github.com/hzeller/gmrender-resurrect.git>
2、转到刚刚克隆的gmrender-resurrect文件夹并安装
cd gmrender-resurrect
./autogen.sh
./configure
sudo make
sudo make install
3、设置开机自启动
因为是通过源码编译安装的 gmediarender,那么我们需要手动创建一个 Systemd 服务文件。请按照以下步骤操作:
创建一个新的 Systemd 服务文件:
sudo nano /etc/systemd/system/gmediarender.service
将以下内容粘贴到编辑器中:
[Unit]
Description=GMRender-Resurrect (DLNA Media Renderer)
After=network.target
[Service]
User=root
Group=root
ExecStart=/usr/local/bin/gmediarender -f YOUR_RENDERER_NAME --gstout-audiosink=alsasink --gstout-audiodevice=sysdefault --logfile=/var/log/gmediarender.log
[Install]
WantedBy=multi-user.target
注意:将 YOUR_RENDERER_NAME 替换为您希望显示在 DLNA 控制器应用中的渲染器名称。
保存并退出编辑器 (在 nano 编辑器中,按 Ctrl X,然后按 Y 确认保存,再按 Enter 键)。
重新加载 Systemd 配置:
sudo systemctl daemon-reload
启动 gmediarender 服务:
sudo systemctl start gmediarender.service
检查 gmediarender 服务的状态:
sudo systemctl status gmediarender.service
如果服务正在运行,设置为开机启动:
sudo systemctl enable gmediarender.service
完成这些步骤后,gmediarender 应该在后台运行,并且Android 设备应该能够找到它。确保 Android 设备和运行 gmediarender 的设备位于同一局域网上。
4 结语
教程到这里差不多就算结束了。捡垃圾嘛,最终的目的就是花小钱办大事,并且享受折腾的乐趣。这个小设备呢,确实比较便宜,30块钱就可以实现很多很多的功能,基本上大家平日里说的docker、homeassitant也是都可以部署的,我这里只是切片去讲一下如何将这种设备落地,即大家在生活中可以切实的感受到这个设备。64位的完整ubuntu系统(不要拿一些设备刷了armbian的来跟我这叨叨,armbian是精简版的Debian,很多东西都是缺失的)加上wifi,这种设备捡垃圾的时候确实难找,而且体积相对也是适中的。
关于音响的部分,除了开头就提到的漫步者,当时考虑的还有另外一款:
音响的选择嘛,其实说白了够用就行的。毕竟也不是每个人都是发烧友,也没必要搞一些加钱或者鄙视链啥的,只要花钱能够满足自己的需求,让自己能够开心就好的。疫情刚刚结束,大多数人的日子都不好过,所以花小钱办大事,或者说花一点小钱给自己买来一点快乐这才是至关重要的。
后面准备拿之前的荣品那个板子,捣鼓一个支持gpt的智能音响出来,弄好了再发文把。