如果您有高級耳機,很堅持要在Linux系統聽無損(lossless,又稱保真壓縮音訊)格式的音樂串流,請聽我一言,以Waydroid跑Android版Apple Music吧。
1. 文獻回顧#
Apple Music為Apple公司推出的訂閱制音樂串流服務,除了基本的AAC 256kbps外,還提供無損音質串流。
所謂無損音質有二個:
- 保真壓縮音訊,24bit/48kHz
- 高解析保真壓縮無損音訊,24bit/192kHz
Apple Music APP支援iOS與Android系統。電腦聽Apple Music需依賴iTunes或Apple Music Preview,而iTunes只有Windows和macOS版本。
那Linux呢?用Wine跑iTunes?新版本Wine根本開不起來。
用 KVM Windows虛擬機跑iTunes?No no no只是聽音樂而已開銷太大了。
Apple Music網頁版?不優,不支援無損音質。
Cider?這個只是Apple Music網頁版的wrapper而已,同樣不支援無損音質。
我在google資料的時候還看到熟悉的套路,有廠商宣稱用他們家的軟體,將Apple Music的音樂下載成mp3你就可以在Linux聽啦!…啊如果我下載那聽串流的意義在哪裡?
唉,太苦了,連 Linux Hint也幫TunesKit這種專有軟體打廣告。哈,你知道TunesKit的軟體根本沒有Linux版嗎?
所以我就想到用Waydroid容器跑Android版Apple Music,界面可愛又怡人。
2. 提高PipeWire取樣率#
OS: Arch Linux 6.5.9,KDE 5.27.9 (Wayland)
PipeWire為新型的音訊系統,向下相容舊有的PulseAudio伺服器。PipeWire預設取樣率(sample rate)是48kHz,我們要把它的取樣率提升到Apple Music無損音質的192kHz。
值得注意的是取樣率48kHz以上的音樂可能得外接DAC才能聽得出效果。
執行指令
pactl info
,確認目前使用的是PipeWire,印出...on PipeWire
代表目前是PipeWire。複製
pipewire.conf
到/etc/pipewire
,編輯之
sudo cp /usr/share/pipewire/pipewire.conf /etc/pipewire
sudo vim /etc/pipewire/pipewire.conf
- 修改如下,
default.clock.rate
填入192kHz,default.clock.allowed-rates
按照喜好填入所有可用的取樣率。
default.clock.rate = 192000
default.clock.allowed-rates = [ 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000 ]
- 重新啟動PipeWire服務
systemctl restart --user pipewire.service
systemctl restart --user pipewire-pulse.service
- 用
pactl info
查看是否已經變更成功
3. 安裝Apple Music#
請安裝Waydroid,目前是Android 11。 Arch Linux| Ubuntu
Apple Music有x86版,可以直接到Play商店下載。
登入Apple ID,再勾選無損音質就好囉。
不幸的是,Linux端用
pw-top
指令查看,儘管Apple Music可以有192Hz輸出(ALSA),但Waydroid輸出到Linux端的音訊取樣率最高只有48Hz(Android SRC本身的限制),這樣也是有符合保真壓縮音訊的標準啦。
Waydroid播放開銷可比虛擬機跑iTunes要小多了。歌詞、專輯封面動態一切正常。
斟酌啟用多視窗模式。在支援好的Wayland環境下,就可以自由調整Apple Music的版面大小。
4. 嘗試解除Waydroid 48kHz的限制#
音訊播放結構
Apple Music → (Android) Waydroid → PipeWire → DAC
現在應該是卡在Android端的問題。
要解除限制Android端48kHz的限制,使用 usb-samplerate-unlocker或者 lineage-audio-mod模組,可以用Magisk刷。
或是手動改Waydroid vendor.img
檔案,把lineage-audio-mod修改的檔案放到Android系統:
cd Downloads
git clone https://github.com/nyarla/magisk-lineage-audio-mod.git
sudo systemctl stop waydroid-container
# 調整vendor.img大小
sudo dd if=/dev/zero bs=1MiB of=/var/lib/waydroid/images/vendor.img conv=notrunc oflag=append count=512
sudo e2fsck -yf /var/lib/waydroid/images/vendor.img
sudo resize2fs -f /var/lib/waydroid/images/vendor.img
sudo mkdir vendor
# 掛載並把檔案移動進去
sudo mount -t ext4 -o loop,rw /var/lib/waydroid/images/vendor.img vendor
sudo cp magisk-lineage-audio-mod/system/vendor/etc/* vendor/system/vendor/etc/
sudo umount vendor
sudo systemctl restart waydroid-container
重開Waydroid後安裝 Sample Rate Checker看到支援的取樣率有192kHz
但…pw-top
依然顯示Waydroid輸出48kHz而已。
如此一來,想要192kHz的音訊恐怕還是得跑虛擬機+iTunes了。