สารบัญ:

เล่นเพลงเดียวกันในหลายห้อง: 3 ขั้นตอน
เล่นเพลงเดียวกันในหลายห้อง: 3 ขั้นตอน

วีดีโอ: เล่นเพลงเดียวกันในหลายห้อง: 3 ขั้นตอน

วีดีโอ: เล่นเพลงเดียวกันในหลายห้อง: 3 ขั้นตอน
วีดีโอ: วิธีสังเกตว่าเธอมีใจให้คุณรึเปล่า 2024, พฤศจิกายน
Anonim
เล่นเพลงเดียวกันในหลายห้อง
เล่นเพลงเดียวกันในหลายห้อง

สวัสดีทุกคน, ฉันไม่รู้เกี่ยวกับคุณ แต่ฉันชอบเปิดเพลงเดียวกันในอพาร์ตเมนต์ทั้งหมดของฉันโดยไม่เปิดเสียงดังเกินไป หลังจากค้นคว้าเกี่ยวกับปัญหานี้เล็กน้อย ฉันตัดสินใจสร้างลำโพงหลายตัวที่เชื่อมต่อด้วย 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) เพื่อใช้เป็นวิทยากร มีหลายสิ่งที่ต้องทำเพื่อปรับปรุงระบบเสียงแบบหลายห้องนี้ โดยเฉพาะอย่างยิ่ง ลำโพงทั้งหมดจะไม่ซิงโครไนซ์ ดังนั้นคุณจึงมีรูปแบบบางอย่างเมื่อคุณเปลี่ยนจากห้องหนึ่งไปอีกห้องหนึ่ง

ฉันหวังว่าคุณจะพยายามปรับปรุงคำแนะนำนี้

อย่าลังเลที่จะถามคำถามหากคุณต้องการรายละเอียด

คนจรจัดที่ดี!

แนะนำ: