這是有關如何使用 Raspberry Pi 在 Sonos 安裝上無線播放具有 USB 輸出的現代轉盤的快速指南。本指南重點介紹此用例,但也可用於串流傳輸到其他揚聲器,因為我們將建立一個 MP3 串流,幾乎任何可以串流音訊的裝置都可以播放該串流。
首先,我們需要在 SD 卡上全新安裝 Raspbian。由於我們不需要圖形或任何特殊的東西,因此我們可以使用 Raspbian Lite。另外,我們不需要太多的磁碟空間,2GB 以上的磁碟空間都可以。安裝後我只使用了 1.5GB 的 SD 卡。
在我的安裝中,我使用了 Raspbian OS Lite 的Buster
版本(2022 年 9 月)。您可以嘗試更新的版本,但這尚未經過測試。
透過 Raspberry Pi Imager 安裝 Raspberry Pi OS Lite(64 位元)https://www.raspberrypi.com/software/
點擊齒輪圖示以獲取高級選項
vinyl
,插入 Raspberry Pi,透過 ssh 連接到它,然後執行以下命令
smorton@homepc: ~ $ ssh [email protected]
vinyl@vinyl: ~ $ cd /tmp && wget https://github.com/stephencmorton/USB-Turntables-to-Sonos-with-RPi/archive/master.zip && unzip master.zip && USB-Turntables-to-Sonos-with-RPi-master/scripts/install.sh
跳至「檢查蒸氣是否正常運作」。
現在,使用 USB 將轉盤連接到 Raspberry Pi。您可以使用指令arecord -l
檢查是否已偵測到您的裝置。我的顯示這個:
vinyl@vinyl:~ $ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: CODEC [USB AUDIO CODEC], device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0
記下我的卡號1
(“ card: 1
”),或者更好的是名稱(上面的“CODEC”)。這對您來說可能是相同的,但如果不同,您可能需要記住它並在以下步驟中進行相應更改。您將在下面的asound.conf
檔案中使用它。
ALSA 是最底層的 Linux 聲音子系統。我們正在配置輸入,以便 darkice 可以使用它。
由於大多數USB轉盤沒有硬體音量控制,且輸入音量約為應有的一半,因此我們需要添加軟體音量控制。建立檔案 /etc/asound.conf 並編輯它以添加以下內容:
pcm.dmic_hw {
type hw
# card 1
# For some reason, the card number can jump around. But this will get it by name
card CODEC
channels 2
# format S16_LE # Use this if "format dat" doesn't work. Only difference is S16_LE = 44.1 kHz sampling vs dat = 48 kHz
format dat
}
pcm.dmic_mm {
type mmap_emul
slave.pcm dmic_hw
}
pcm.dmic_sv {
type softvol
slave.pcm dmic_hw
control {
name "Boost Capture Volume"
# card 1
# For some reason, the card number can jump around. But this will get it by name
card CODEC
}
min_dB -5.0
max_dB 20.0
}
接下來,執行此命令刷新 alsa 狀態並顯示 VU Meters 來測試輸入音量:
arecord -D dmic_sv -r 48000 -f dat -c 2 --vumeter=stereo /dev/null
(在您在電唱機上播放某些內容之前,它將顯示零音量。)
您可能會注意到,音量太低了。如果是這樣,您可以使用alsamixer
來更改音量。按F6
選擇 USB 轉盤設備,然後按TAB
直到看到增強滑桿。我在設置中將其設置為65
,但您可以嘗試一下。確保您沒有將其調得太高,否則您的音質可能會因削波而降低。
運行以下命令:
sudo apt-get update
sudo apt-get install -y darkice icecast2
選擇Yes
配置 Icecast。您可以將所有內容保留為預設值,但如果您變更密碼,請確保在後續步驟中變更配置中的密碼。
Darkice 是從 USB 裝置錄製並將其編碼為 MP3 的軟體。要配置它,請建立或編輯檔案 /etc/darkice.cfg,並將其放入:
# this section describes general aspects of the live streaming session
[general]
duration = 0 # duration of encoding, in seconds. 0 means forever
bufferSecs = 1 # size of internal slip buffer, in seconds
reconnect = yes # reconnect to the server(s) if disconnected
realtime = yes # run the encoder with POSIX realtime priority (default==yes)
rtprio = 4 # scheduling priority for the realtime threads (default==4)
# this section describes the audio input that will be streamed
[input]
device = dmic_sv # OSS DSP soundcard device for the audio input
sampleRate = 48000 # other settings have crackling audo, esp. 44100
bitsPerSample = 16 # bits per sample. try 16
channel = 2 # channels. 1 = mono, 2 = stereo
# this section describes a streaming connection to an IceCast2 server
# there may be up to 8 of these sections, named [icecast2-0] ... [icecast2-7]
# these can be mixed with [icecast-x] and [shoutcast-x] sections
[icecast2-0]
bitrateMode = cbr
format = mp3
bitrate = 320
server = vinyl
port = 8000
mountPoint = turntable.mp3
name = Turntable
description = Music from our record player
# highpass = 18
# lowpass = 20000
url = http://vinyl.local:8080/
genre = vinyl
public = no
password = hackme # or whatever you set your icecast2 password to
有關此文件和可以更改的參數的更多信息,請參閱 darkice.cfg 線上說明頁。
Darkice 和icecast 使用老式的init.d 控制。讓我們邊做邊對它們進行現代化改造。
# Remove old-fashioned init.d controls
sudo update-rc.d darkice remove
sudo update-rc.d icecast2 remove
將以下程式碼複製到 /etc/systemd/system/darkice.service 和 /etc/systemd/system/icecast2.service。然後運行
sudo systemctl enable icecast2
sudo systemctl enable darkice
黑暗服務
[Unit]
Description =DarkIce Icecast Network Audio Streamer
After =icecast.target
[Service]
Type =simple
ExecStart =/usr/bin/darkice -c /etc/darkice.cfg
ExecReload =/bin/kill -HUP $MAINPID
User =root
Group =root
# WorkingDirectory=/usr/share/icecast2/
Restart =always
RestartSec =5
[Install]
WantedBy =multi-user.target
Icecast2服務
[Unit]
Description =Icecast Network Audio Streaming Server
After =network.target
[Service]
Type =simple
ExecStart =/usr/bin/icecast2 -c /etc/icecast2/icecast.xml
ExecReload =/bin/kill -HUP $MAINPID
User =icecast2
Group =icecast
# WorkingDirectory=/usr/share/icecast2/
Restart =always
[Install]
WantedBy =multi-user.target
重新啟動 Raspberry Pi,檢查一切設定是否正確,因為我們更改了一些設定檔並確保 Darkice 正在運行。
現在開啟瀏覽器,然後前往http://vinyl.local:8000
(預設icecast2連接埠)。您應該在那裡看到一個 Mountpoint Mount Point /turntable.mp3
。如果沒有,請返回並檢查您是否按照描述執行了所有操作。右鍵點選M3U連結(右上角),然後複製連結地址。這是您的 Steam 網址。您可以在 iTunes、VLC、瀏覽器或任何其他支援串流的音訊用戶端中開啟它。
打開桌面上的 Sonos 應用程式(這不適用於行動裝置)。前往Manage
> Add Radio Station...
並貼上您的直播 URL。您可以選擇任何您想要的名稱。要在 Sonos 上播放串流,請前往Radio by TuneIn
> My Radio Stations
。您的資訊流應該會出現在那裡!如果需要,請右鍵單擊即可新增至您的收藏夾! :-) 您可以從行動裝置開始播放,但無法在行動裝置上新增網路串流。
若要加快 Raspberry Pi 的啟動時間,您可以
這是留給讀者的練習,但 fastboot.sh 中有各種程式碼片段可供查看,以及技術說明和參考文獻中的各種連結。
參見