[Raspberry Pi 3] AirPlay 讓音樂不只受「線」制,更要讓每個房間也一同享「樂」

by 5月 01, 2016 2 意見        

我們之前曾經在 Raspberry Pi 的應用 - iOS & OSX 的好朋友,AirPlay 無線喇叭 這篇文章裡,實作了 Airplay 無線喇叭功能。

可是,原作者早在 2014 年就已經停止維護在 GitHub 上的專案了,如果出現了 Bug 或是不支援新的 OS X / iOS 的話,這可怎麼辦才好?!
最後更新日期:2017/01/26

別怕!!!
還好有另一位網友利用原專案的原始碼,建立了一個名叫 shairport-sync 的新專案,不只延續了原本的功能,還改善了:
  • 更好的音量控制範圍
  • 支援硬體設備上的靜音功能
  • 不會因為另一個串流請求而造成播放的中斷
  • 支援描述資料 (Metadata)
  • 支援 RAW 格式
  • 更容易自行編輯
而且介紹的第一句話就寫著:
AirPlay audio player. Shairport Sync adds multi-room capability with Audio Synchronisation.」
加入了音訊同步多室串流的功能,簡單的說就是可以讓多個不同空間的 AirPlay 喇叭,同步播放相同的音樂。

不過,依然沒有辦法串流播放視訊跟照片......XD


事前準備


請先參閱  [Raspberry Pi 3] 老朋友,新功能!關於那些開箱後馬上要作的事,完成初始設定。
使用 Raspberry Pi 0/1/2 也一樣先完成基本的前置作業

也別忘了讓 Raspberry Pi 有線網路或是無線網路的連線,取得與 Mac / iPhone / iPad / iPod 相同網段的 IP 位址。


開始安裝


把 shairport-sync 專案從 GitHub 複製回來。
git clone https://github.com/mikebrady/shairport-sync.git

安裝必要的相依套件。
sudo apt-get -y install build-essential git autoconf automake libtool libdaemon-dev libasound2-dev libpopt-dev libconfig-dev avahi-daemon libavahi-client-dev libssl-dev libpolarssl-dev libsoxr-dev

開始編譯。
cd shairport-sync
autoreconf -i -f

./configure --with-alsa --with-stdout --with-pipe --with-avahi --with-ssl=openssl --with-metadata --with-systemd

make

建立專屬的群組和使用者。
getent group shairport-sync &> /dev/null || sudo groupadd -r shairport-sync > /dev/null
getent passwd shairport-sync &> /dev/null || sudo useradd -r -M -g shairport-sync -s /usr/bin/nologin -G audio shairport-sync > /dev/null

安裝到系統裡。
sudo make install

編輯主設定檔,如果不在 /etc 目錄裡,看一下是不是在 /usr/local/etc 。
sudo vi /etc/shairport-sync.conf

這邊有不少可以修改的參數,把註解符號 // 刪除就可以改用自訂的設定值。
  • name - 預設的顯示名稱,可以輸入中文名稱。
  • password - 用密碼管制可以連線的用戶端。
  • port - 服務的主要通訊埠。
  • udp_port_base, udp_port_range - 串流用的通訊埠範圍。
其他可調整的參數,請參閱 Configuration File Settings

啟動服務。
sudo systemctl restart shairport-sync && sudo systemctl status shairport-sync

設定成開機後自動啟動。
sudo systemctl enable shairport-sync


在 Mac 和 iPhone 使用


Mac + OS X 10.11.4


在最上方的選單列可以看到音量的圖示,按住 option 鍵再點選它,就會跳出不一樣的功能選單。

只要 Raspberry Pi 3 跟 Mac 的網路在同一個網段裡,就可以看到 shairport-sync 產生出來的 AirPlay 喇叭,勾選它就可以直接將系統裡所有的音樂 + 音效全部轉過去 AirPlay 喇叭來播放。


當然也可以單獨將 iTunes 上面的音樂,轉到這個 AirPlay 喇叭上播放。

iPhone + iOS 9.2.1


在 iPhone 上面使用方法更簡單,從畫面最下方往上滑,叫出控制中心之後,就會看到 AirPlay 的圖示。

勾選我們建立的 AirPlay 喇叭之後,同樣也可以讓所有音樂 + 音效都從 AirPlay 喇叭來播放了。

多室串流


只要軟體有支援 multi-room 的功能,我們只要在家中或辦公室全部的房間裡各自用 Raspberry Pi 啟用 AirPlay 來接上喇叭。


就可以讓所有的空間無縫接軌,全都沉浸在相同的音樂氛圍裡!


參考資料


圖片來源


更新紀錄

  • 2016/05/01 撰文。
  • 2017/01/26 更新,補充設定檔的所在目錄。

Heracles Jam,江湖人稱「海公公」

IT 技術家 - 創站部落客

一個常用 Windows、慣用 macOS、愛用 Linux 的 3C 阿宅
現職 MIS / 業界講師 / 資訊顧問 / 部落客

2 則留言 :

  1. 大大您好, 這真是圖文並茂的詳細文章, 讓在下能一路做到最後, iPhone也找到Airplay的設備了
    可是撥放起來還是沒有聲音, 想要請問如何解決?
    我是用Pi3, Raspbain系統, 並且在該系統下還有加裝Kodi(不知道這是否會影響?)
    然後iPhone6上安裝的是iOS 10.2.1 , 我的Pi3是透過HDMI將聲音畫面都接到電視上
    無論是Raspbain或者是Kodi 都已使用多媒體來確定聲音可正常輸出, 或者音量在正常範圍內

    當我在手機上使用iTune撥放音樂時, 在下拉選單中切換Airplay的介面後, 有找到預設的Raspberrypi
    但當我將音樂切換過去後, 就都沒有聲音了
    我不死心, 隨便拿個耳機同時往Pi3的聲音輸出孔一插, 仍然沒有聲音..Raspbain或Kodi皆同
    (kodi我有打開Airplay支援)
    請問我是否有哪邊做錯了呢? 謝謝

    回覆刪除
    回覆
    1. 因為 Raspbian 不會同時把音效輸出到兩種介面,你既然已經從 HDMI 輸出了,3.5mm Audio 沒聲音也是正常的。
      你可以參考一下我這篇文章,再做個小小修改,把預設的輸出介面統一指定成 HDMI,讓 AirPlay 也從 HDMI 走 ...
      http://blog.itist.tw/2015/05/playing-audio-via-usb-sound-device-with-raspberry-pi.html

      刪除