这是有关如何使用 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 中有各种代码片段可供查看,以及技术说明和参考文献中的各种链接。
参见