สารบัญ:
วีดีโอ: เล่นเพลงเดียวกันในหลายห้อง: 3 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
สวัสดีทุกคน, ฉันไม่รู้เกี่ยวกับคุณ แต่ฉันชอบเปิดเพลงเดียวกันในอพาร์ตเมนต์ทั้งหมดของฉันโดยไม่เปิดเสียงดังเกินไป หลังจากค้นคว้าเกี่ยวกับปัญหานี้เล็กน้อย ฉันตัดสินใจสร้างลำโพงหลายตัวที่เชื่อมต่อด้วย wifi กับเซิร์ฟเวอร์เพลงเดียวกันเพื่อเล่นเพลงเดียวกันพร้อมกันในหลายห้อง โดยเฉพาะในห้องน้ำ
ระบบนี้ใช้เทคโนโลยี GStreamer ซึ่งเป็นพื้นฐานของซอฟต์แวร์ที่ยอดเยี่ยม เช่น VLC และลำโพงที่มีความสามารถ wifi โดยใช้ Raspberry Pi
ขั้นตอนที่ 1: สร้างลำโพงสำหรับห้องน้ำ
รายการส่วน:
- ลำโพงกันน้ำ
- แอมพลิฟายเออร์ 2W (ทำงานบน 12v)
- Raspberry Pi Zero (ทำงานบน 5v)
- พิโมโรนี พัฒน์ DAC
- การ์ด SD
- ปุ่มเปิด/ปิด
- อะแดปเตอร์ไฟ 12v + ปลั๊กที่ใช้ร่วมกันได้
- สเต็ปดาวน์ DC/DC (12v->5v)
- กล่องไฟฟ้า
- บางสาย
การก่อสร้างค่อนข้างตรงไปตรงมา
ทางด้านอิเล็กทรอนิกส์ ให้ทำตามไดอะแกรม ASCII นี้
- DC plug ON/OFF ปุ่มเครื่องขยายเสียง
- ปุ่มเปิด/ปิด DC/DC step-down Raspberry Pi
- ลำโพงเครื่องขยายเสียง Raspberry Pi Phat DAC
ทางด้านกลไก ให้ตัดรูทั้งหมดที่จำเป็นในกล่องไฟฟ้า ใส่ทุกอย่างไว้ข้างใน เท่านี้ก็เรียบร้อย
ด้วยเทคนิคนี้ คุณสามารถสร้างลำโพงได้ทุกประเภทที่คุณต้องการ
ขั้นตอนที่ 2: ด้านซอฟต์แวร์
ด้านซอฟต์แวร์ทั้งหมดใช้เฟรมเวิร์กมัลติมีเดียแบบโอเพ่นซอร์ส GStreamer ฉันใช้แต่ Linux เท่านั้น แต่มีอยู่ในระบบปฏิบัติการที่แตกต่างกัน ดังนั้นฉันคิดว่าทั้งหมดนี้สามารถปรับให้เข้ากับระบบปฏิบัติการอื่นได้
สำหรับผู้เริ่มต้น คุณต้องติดตั้ง Raspbian Lite บน Pi, PHAT DAC และ GStreamer 1.0 พร้อมปลั๊กอิน "ดี" บนคอมพิวเตอร์ที่ใช้เป็นเซิร์ฟเวอร์เพลง คุณต้องมี GStreamer เดียวกัน ฉันจะไม่ให้รายละเอียดส่วนเหล่านั้นเพราะคนอื่นทำสิ่งนี้ได้ดีกว่าฉัน สิ่งสุดท้ายที่จำเป็นคือต้องเชื่อมต่อ Pi และเซิร์ฟเวอร์เพลงเข้ากับเครือข่ายเดียวกันด้วยสายเคเบิลหรือ wifi
เพื่อทดสอบว่า GStreamer ติดตั้งถูกต้องหรือไม่ คุณสามารถใช้บรรทัดคำสั่งเหล่านั้นได้
บนลำโพง:
$gst-launch-1.0 udpsrc port=5000 caps='application/x-rtp, media=(string)audio, clock-rate=(int)44100, encoding-name=(string)L16, encoding-params=(string))1, ช่อง=(int)1, เพย์โหลด=(int)96' ! rtpL16depay ! แปลงเสียง ! autoaudiosink
บนพีซี:
$gst-launch-1.0 audiotestsrc ! แปลงเสียง ! audio/x-raw, format="(string)S16BE", layout="(string)interleaved", channels=1,rate=44100 ! rtpL16pay ! โฮสต์ udpsink=พอร์ต RASPBERRYPI_IP=5000
หลังจากที่คุณใส่ที่อยู่ IP ที่ดีแทน "RASPBERRYPI_IP" คุณควรได้ยินเสียงไซน์บนลำโพง นั่นไม่ใช่สิ่งที่คุณจะอยากได้ยินเป็นเวลานาน ดังนั้นอย่าเปิดเสียงดังเกินไป
คำอธิบายบางอย่าง: พีซีสร้างเสียงไซน์โดยใช้ "audiotestsrc", "audioconvert ! audio/x-raw, format="(string)S16BE", layout="(string)interleaved", channels=1,rate=44100" convert เสียงในรูปแบบที่ดีที่เข้าใจโดย "rtpL16pay" ที่สร้างแพ็กเก็ตเสียงและสุดท้าย "udpsink" จะส่งแพ็กเก็ตโดยใช้โปรโตคอล UDP ในลำโพงจะเหมือนกัน แต่กลับด้าน "udpsrc" จะกู้คืนฟลักซ์เสียง "rtpL16depay" ยกเลิกการแพ็กเก็ตและ "audioconvert ! autoaudiosink" จะแปลงเสียงให้ตรงกับรูปแบบของการ์ดเสียงอัตโนมัติและแน่นอนว่าเล่นได้
ดังนั้นตอนนี้ที่สิ่งพื้นฐานใช้งานได้ก็ถึงเวลาดำเนินการต่อไป เป้าหมายคือการสกัดกั้นเสียงของแอปพลิเคชันเพื่อส่งผ่านเครือข่าย
- เราสร้างผลงานปลอม
$pactl โมดูลโหลดโมดูล-null-sink sink_name=multiHP
- เราเชื่อมต่ออินพุตกับเอาต์พุตปลอม (ปิดเสียงแอปพลิเคชันที่เลือก (อินพุต))
$pacmd list-sinks (รายการผลลัพธ์)
$pacmd list-sink-inputs (รายการอินพุต)
$pacmd move-sink-input %input %output (แทนที่ %input และ %output ด้วยหนึ่งในรายการที่เกี่ยวข้อง)
- เราใส่การ์ดเสียงสูงสุด
$pactl set-sink-volume 0 100%
- เราทดสอบบนพีซีเพื่อกู้คืนเอาต์พุตปลอม (กู้คืนเสียง)
$gst-launch-1.0 pulsesrc device=multiHP.monitor ! แปลงเสียง ! autoaudiosink
คุณควรได้ยินเสียงของแอปพลิเคชันที่คุณเลือกอีกครั้ง
ยอดเยี่ยม! ตอนนี้ได้เวลาไปที่บรรทัดคำสั่งสุดท้ายแล้ว ต่อไปนี้เป็นบรรทัดคำสั่งในกรณีของลำโพง 2 ตัวพร้อมเสียงที่เล่นโดยพีซี
ในแต่ละลำโพง:
$gst-launch-1.0 udpsrc port=5000 caps='application/x-rtp, media=(string)audio, clock-rate=(int)44100, encoding-name=(string)L16, encoding-params=(string))2, เพย์โหลด=(int)96' ! rtpL16depay ! แปลงเสียง ! autoaudiosink
บนพีซี:
$gst-launch-1.0 pulsesrc device=multiHP.monitor ! แปลงเสียง ! audio/x-raw, format="(string)S16BE", layout="(string)interleaved", channels=2,rate=44100 ! rtpL16pay ! ชื่อที=t t. ! คิว ! โฮสต์ udpsink=%addrpi1 พอร์ต=5000 ตัน ! คิว ! โฮสต์ udpsink=%addrpi2 พอร์ต=5000 ตัน ! คิว ! แปลงเสียง ! autoaudiosink
ขั้นตอนที่ 3: บทสรุป
คำแนะนำนี้เป็นเพียงขั้นตอนแรกในการทำโครงการให้เสร็จสมบูรณ์ เป็นเพียงการอธิบายหลักการเท่านั้น ตอนนี้คุณสามารถทำให้เป็นอัตโนมัติโดยสร้างสคริปต์บนบูต Raspberry Pi และบนพีซี คุณสามารถปรับคำสั่ง GStreamer ได้ตามความต้องการ ฉันแก้ไขคำสั่งก่อนหน้าของฉันเอง (BRAND NEW OLD RADIO) เพื่อใช้เป็นวิทยากร มีหลายสิ่งที่ต้องทำเพื่อปรับปรุงระบบเสียงแบบหลายห้องนี้ โดยเฉพาะอย่างยิ่ง ลำโพงทั้งหมดจะไม่ซิงโครไนซ์ ดังนั้นคุณจึงมีรูปแบบบางอย่างเมื่อคุณเปลี่ยนจากห้องหนึ่งไปอีกห้องหนึ่ง
ฉันหวังว่าคุณจะพยายามปรับปรุงคำแนะนำนี้
อย่าลังเลที่จะถามคำถามหากคุณต้องการรายละเอียด
คนจรจัดที่ดี!
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
เครื่อง Rube Goldberg 11 ขั้นตอน: 8 ขั้นตอน
เครื่อง 11 Step Rube Goldberg: โครงการนี้เป็นเครื่อง 11 Step Rube Goldberg ซึ่งออกแบบมาเพื่อสร้างงานง่ายๆ ในรูปแบบที่ซับซ้อน งานของโครงการนี้คือการจับสบู่ก้อนหนึ่ง