本内容來源于@什麼值得買APP,觀點僅代表作者本人 |作者:拉德布魯赫信徒
1 引言
這篇文章的一切,要從什麼值得買的金币說起。前一陣發現什麼值得買的金币跟京東雲無線寶給的京豆已經攢了很多很多了,就套現了一波,順手買了一個音響,就是很普通的一個音響,漫步者的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已經部署完成了,關于設定開機啟動,可以參考一下下面的内容。
sudo systemctl enable shairport-sync
sudo systemctl start shairport-sync
3.2 DLAN
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的智能音響出來,弄好了再發文把。