これは、Raspberry Pi を使用して、Sonos インストール上で USB 出力を備えた最新のターンテーブルをワイヤレスで再生する方法に関するクイック ガイドです。このガイドはこのユースケースに焦点を当てていますが、オーディオをストリーミングできるほぼすべての機器で再生可能な MP3 ストリームを作成するため、他のスピーカーにストリーミングするためにも使用できます。
まず、SD カードに Raspbian をクリーン インストールする必要があります。グラフィックスなど特別なものは必要ないので、Raspbian Lite を使用できます。また、多くのディスク容量は必要ありません。おそらく 2GB 以上のものが適しています。インストール後、SD カードは 1.5GB しか使用していません。
私のインストールには、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 メーターも表示します。
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
Icecast を設定するには、 Yes
を選択します。すべてをデフォルトのままにすることができますが、パスワードを変更する場合は、次の手順の構成で必ずパスワードを変更してください。
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
アイスキャスト2.サービス
[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 リンク (右上) を右クリックし、リンク アドレスをコピーします。これがスチーム URL です。これは、iTunes、VLC、ブラウザ、またはストリーミングをサポートするその他のオーディオ クライアントで開くことができます。
デスクトップで Sonos アプリを開きます (モバイルでは動作しません)。 Manage
> Add Radio Station...
に移動し、ストリーム URL を貼り付けます。任意の名前を選択できます。 Sonos でストリームを再生するには、 Radio by TuneIn
> My Radio Stations
に移動します。あなたのストリームがそこに表示されるはずです!必要に応じて、右クリックしてお気に入りに追加してください。 :-) モバイル デバイスから再生を開始することはできますが、モバイル デバイスにネットワーク ストリームを追加することはできません。
Raspberry Pi の起動時間を短縮するには、次のことができます。
これは読者の演習として残されていますが、fastboot.sh には参照すべきさまざまなコード スニペットや、テクニカル ノートやリファレンスのさまざまなリンクがあります。
こちらも参照