Это краткое руководство о том, как использовать Raspberry Pi для беспроводного воспроизведения современных проигрывателей с USB-выходом на установке Sonos. Это руководство ориентировано на этот вариант использования, но его также можно использовать для потоковой передачи на другие динамики, поскольку мы собираемся создать поток MP3, который можно будет воспроизводить практически на всем, что может передавать потоковое аудио.
Для начала нам нужна чистая установка Raspbian на SD-карту. Поскольку нам не нужна графика или что-то особенное, мы можем использовать Raspbian Lite. Кроме того, нам не нужно много места на диске, подойдет что-нибудь от 2 ГБ и выше. После установки я использую только 1,5 ГБ моей SD-карты.
Для установки я использовал версию Raspbian OS Lite Buster
(сентябрь 2022 г.). Вы можете попробовать более новую версию, но она не тестировалась.
Установите Raspberry Pi OS Lite (64-разрядную версию) через Raspberry Pi Imager 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
Перейдите к разделу «Проверьте, работает ли пропаривание».
Теперь подключите проигрыватель к Raspberry Pi с помощью USB. Вы можете использовать команду 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
») или, еще лучше, имя («КОДЕК» выше). Вероятно, для вас это то же самое, но если оно отличается, возможно, вам придется запомнить его и соответствующим образом изменить на следующих шагах. Вы будете использовать его в файле 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 для проверки входного объема:
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
darkice.service
[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.service
[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 по умолчанию). Там вы должны увидеть Mount Point /turntable.mp3
. Если нет, вернитесь и проверьте, все ли вы сделали, как описано. Щелкните правой кнопкой мыши ссылку M3U (вверху справа) и скопируйте адрес ссылки. Это ваш URL-адрес Steam. Вы можете открыть его в iTunes, VLC, браузере или в любом другом аудиоклиенте, поддерживающем потоковую передачу.
Откройте приложение Sonos на своем рабочем столе (это не будет работать на мобильном устройстве). Откройте Manage
> Add Radio Station...
и вставьте URL-адрес своего потока. Вы можете выбрать любое имя. Чтобы воспроизвести поток на Sonos, перейдите в Radio by TuneIn
> My Radio Stations
. Ваш поток должен появиться там! Щелкните правой кнопкой мыши, чтобы добавить в избранное, если хотите! :-) Начать играть можно с мобильных устройств, вот только добавить на них сетевой поток нельзя.
Чтобы ускорить загрузку Raspberry Pi, вы можете
Это оставлено в качестве упражнения для читателя, но в fastboot.sh есть различные фрагменты кода, а также различные ссылки в технических примечаниях и справочниках.
См. также