นี่เป็นคำแนะนำโดยย่อเกี่ยวกับวิธีใช้ Raspberry Pi เพื่อเล่นเครื่องเล่นแผ่นเสียงสมัยใหม่ที่มีเอาต์พุต USB แบบไร้สายในการติดตั้ง Sonos คู่มือนี้เน้นที่กรณีการใช้งานนี้ แต่ยังอาจใช้เพื่อสตรีมไปยังลำโพงอื่นๆ เนื่องจากเรากำลังจะสร้างสตรีม MP3 ซึ่งสามารถเล่นได้ด้วยแทบทุกอย่างที่สามารถสตรีมเสียงได้
ก่อนอื่นเราต้องติดตั้ง Raspbian บนการ์ด SD ใหม่ทั้งหมด เนื่องจากเราไม่ต้องการกราฟิกหรืออะไรพิเศษ เราจึงใช้ Raspbian Lite ได้ นอกจากนี้เรายังไม่ต้องการพื้นที่ดิสก์มากนัก อาจมีขนาดตั้งแต่ 2GB ขึ้นไปก็ดี หลังการติดตั้ง ฉันใช้การ์ด SD เพียง 1.5GB
สำหรับการติดตั้งของฉัน ฉันใช้ 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
") หรือชื่อที่ดีกว่า ("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 Turntable แล้วกด 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
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับไฟล์นี้และพารามิเตอร์ที่คุณสามารถเปลี่ยนแปลงได้ โปรดดูที่ manpage 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.บริการ
[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 (ขวาบน) และคัดลอกที่อยู่ลิงก์ นี่คือ URL ไอน้ำของคุณ คุณสามารถเปิดสิ่งนี้ได้ใน iTunes, VLC, เบราว์เซอร์ของคุณ หรือเกี่ยวกับไคลเอนต์เสียงอื่นๆ ที่รองรับการสตรีม
เปิดแอป Sonos บนเดสก์ท็อปของคุณ (ซึ่งจะใช้งาน ไม่ได้ บนมือถือ) ไปที่ Manage
> Add Radio Station...
และวาง URL สตรีมของคุณ คุณสามารถเลือกชื่อที่คุณต้องการ หากต้องการเล่นสตรีมบน Sonos ของคุณ ให้ไปที่ Radio by TuneIn
> My Radio Stations
สตรีมของคุณควรปรากฏขึ้นที่นั่น! คลิกขวาเพื่อเพิ่มในรายการโปรดของคุณหากคุณต้องการ! :-) คุณ สามารถ เริ่มเล่นจากอุปกรณ์มือถือได้ แต่คุณไม่สามารถเพิ่มสตรีมเครือข่ายลงไปได้
เพื่อเร่งเวลาบูตของ Raspberry Pi คุณสามารถทำได้
นี่เป็นแบบฝึกหัดสำหรับผู้อ่าน แต่มีตัวอย่างโค้ดต่างๆ ใน fastboot.sh ให้ดู รวมถึงลิงก์ต่างๆ ในบันทึกทางเทคนิคและข้อมูลอ้างอิง
ดูเพิ่มเติม