快轉到主要內容

用Android手機播放Linux電腦音樂 ~ PulseAudio Wifi串流設定

分類   Linux系統 Linux使用技巧
標籤   PulseAudio PipeWire Android
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

Stream GNU/Linux audio output to Android devices over WI-FI with PipeWire.

有時候,手機平板的喇叭音質比電腦螢幕內建的揚聲器要好的多,所以就想要用手機當電腦喇叭來播放電腦的音樂。那有沒有可能透過區域網路(例如Wifi)來播放音效呢?在電腦是Linux的情況下,我們可以利用PulseAudio的「Simple TCP Protocol」模組達成此目的。此模組可在PipeWire下運作。

本篇文章主要是給Linux系統搭配Android手機使用的。

PulseAudio不適合需要極低延遲的音樂播放。

1. 設定PulseAudio
#

現在大多數Linux發行版應該都是採用PulseAudio當音訊伺服器。PipeWire向下相容PulseAudio的模組設定。

  1. 安裝後可透過此指令確認安裝情況,應該會跑出一堆音訊裝置:
pactl list
  1. 接著確定要使用的音訊裝置。目前我的電腦有HDMI音訊和主機板音效卡這2個音效輸出:
ivon@Lk31 ~ $ pactl list sources short
0       alsa_output.pci-0000_01_00.1.hdmi-stereo-extra1.monitor module-alsa-card.c      s16le 2ch 44100Hz       SUSPENDED
1       alsa_output.pci-0000_00_1f.3.iec958-stereo.monitor      module-alsa-card.c      s16le 2ch 44100Hz       RUNNING
  1. 我的想法是手機播放時電腦就得靜音,也就是說一開始是用HDMI的音訊輸出,手機開始播放後,就透過音效面板將電腦切換到沒有插喇叭的主機板音效卡。

  2. 接著要設定串流用的指令稿。新增一個pashare.sh的檔案。source後面填寫的是音效卡ID,讓PulseAudio錄製這個音效卡並輸出。

#!/bin/sh
case "$1" in
  start)
    $0 stop
    pactl load-module module-simple-protocol-tcp rate=48000 format=s16le channels=2 source="alsa_output.pci-0000_01_00.1.hdmi-stereo-extra1.monitor" record=true port=8000
    ;;
  stop)
    pactl unload-module `pactl list | grep tcp -B1 | grep M | sed 's/[^0-9]//g'`
    ;;
  *)
    echo "Usage: $0 start|stop" >&2
    ;;
esac
  1. 賦予指令稿執行權限:
chmod 755 pashare.sh
  1. 上面pashare.sh指令稿使用的通訊埠是8000,因此防火牆要開啟8000的通訊埠。
sudo ufw allow 8000
sudo ufw reload
  1. 執行指令稿:
./pashare.sh start

2. 安裝用於串流的手機APP
#

Android下載 Simple Protocol Player,iOS似乎沒有這方面的APP。

  1. 讓電腦和手機連線到同一個網路。電腦輸入ifocnfig查看區網IP:
ivon@Lk31 ~ $ ifconfig
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.102  netmask 255.255.255.0  broadcast 192.168.1.255
  1. 手機開啟Simple Protocol Player,填入電腦的IP和通訊埠,Sample Rate選48000,點選播放鍵。

  2. 在電腦上播放音樂,手機應該就會有聲音了。若要避免兩邊一起播放,透過pavucontrol音效面板將電腦的音訊輸出切換成主機板音效卡(沒有接喇叭),這樣就只有手機有聲音。

  3. 如果要停止串流音訊,在電腦上執行剛剛寫的指令稿:

./pashare.sh stop

3. 總結
#

實測偶爾會卡卡的,要看Wifi穩定度。

如果要把手機音訊用電腦播放呢?只要手機裝 Termux再反向操作就可以啦~ Linux的PulseAudio也能作為接收端。

參考資料
#

相關文章

Linux&樹莓派當作藍牙喇叭接收器,電腦播放手機音樂
分類   Linux系統 Linux使用技巧
標籤   PulseAudio PipeWire KDE Connect Raspberry Pi
Linux PipeWire透過AirPlay協定播放音樂
分類   Linux系統 Linux使用技巧
標籤   AirPlay PipeWire
xrandr製作Linux虛擬顯示器,設定虛擬雙顯示器輸出
分類   Linux系統 Linux使用技巧
標籤   X Window DisplayLink

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。