การสลับโปรไฟล์ PulseAudio โดยอัตโนมัติตามจำนวนช่องสัญญาณเข้า


39

ฉันใช้เสียงผ่าน HDMI ไปยังเครื่องรับของฉันซึ่งมีการติดตั้ง 7.1 เต็มรูปแบบที่เชื่อมต่ออยู่ อย่างไรก็ตามสิ่งที่ฉันฟังส่วนใหญ่มีช่องน้อยกว่ามาก - บางส่วนเป็นแบบโมโนส่วนใหญ่เป็นแบบสเตอริโอบิตคือ 5.1 เมื่อตัวรับสัญญาณถูกป้อนด้วยจำนวนช่องสัญญาณที่เหมาะสมจะมีเอฟเฟกต์ DSP หลากหลายชนิดซึ่งทำงานได้ค่อนข้างดี (เช่นการแยกช่องสัญญาณกลางในการส่งฐานไปยังซับวูฟเฟอร์ตรวจจับ Dolby matrix เซอร์ราวด์อัตโนมัติ ฯลฯ ) สิ่งนี้จะหยุดทำงานหากคุณส่งสัญญาณ 7.1 แบบเต็มโดยมีช่องสัญญาณเงียบ ๆ

จำนวนช่องสัญญาณออกใน PulseAudio ได้รับการกำหนดค่าต่อการ์ด / ซิงค์ตามโปรไฟล์ที่กำหนดให้กับการ์ด คุณสามารถเปลี่ยนรายละเอียดที่ได้รับมอบหมายด้วยpacmd, pactlและโปรแกรม GUI ต่างๆ

ฉันจะตั้งค่าให้เปลี่ยนโปรไฟล์โดยอัตโนมัติตามการใช้งานช่องในสตรีมอินพุทได้อย่างไร เช่นหากกระแสอินพุตใช้เฉพาะด้านหน้าซ้ายและด้านหน้าขวาให้เปลี่ยนเป็นโปรไฟล์สเตอริโอ หากพวกเขาใช้แบ็คซ้ายและแบ็กขวาเช่นกันให้เปลี่ยนเป็น quadrophonic ฯลฯ


3
บางทีฉันผิด แต่ฉันไม่คิดว่ามันเป็นไปได้เลย Pulseaudio จัดการสตรีมหลายรายการพร้อมกันโปรไฟล์ใดที่จะถูกต้องหากสตรีมที่แตกต่างกันที่มีหมายเลขสถานีต่างกันเล่นด้วยกัน
Alessio Gaeta

@meden ผู้ที่มีช่องมากที่สุดฉันเดาว่า
Derobert

ใช่แน่นอน แต่ยังมีอีกหลายกรณีที่คุณไม่สามารถบรรลุเป้าหมายได้ BTW ฉันไม่คิดว่าจะมีวิธีใน Pulseaudio ในการเปลี่ยนโปรไฟล์แบบมีเงื่อนไข บางทีคู่มือ Kodi ถึง Pulseaudio [ kodi.wiki/view/PulseAudio]อาจมีประโยชน์ในการให้คำแนะนำ (เช่นการใช้ passthrough และให้ผู้รับของคุณทำงานได้ทั้งหมดหากรองรับรูปแบบทั้งหมดที่คุณใช้)
Alessio Gaeta

นี่เป็นคำถามที่น่าสนใจ ฉันไม่มีการตั้งค่าเสียงเพื่อทดสอบสิ่งนี้ แต่หากคุณต้องสร้างโปรไฟล์สำหรับแต่ละอินสแตนซ์ที่คุณคาดการณ์ไว้ให้ตั้งค่าสคริปต์เพื่อวิเคราะห์สตรีมล่วงหน้า (อาจเป็นการเอาท์พุทของmediainfoหรือffmpegหรือavconv) จากนั้นใช้pacmdเพื่อเลือกโปรไฟล์ที่เหมาะสมก่อนที่จะเปิดเครื่องเล่นของคุณจากมุมมองเชิงตรรกะฉันคาดว่ามันจะทำงานหากคุณกำลังเล่นไฟล์เสียงหนึ่งครั้ง
Elder Geek

4
มันอาจจะคุ้มค่ากับการส่งคำถามนี้เป็นคำขอคุณลักษณะที่launchpad.net/bugs/bugtrackers/pulseaudio-bugsหากยังไม่ได้ส่งไปที่นั่น มันจะเป็นคุณสมบัติที่น่าสนใจและพัลส์เสียงอาจแก้ปัญหานี้ได้ดีกว่าภายในโดยใช้สคริปต์ภายนอก
อเล็กซานเด

คำตอบ:


1

นี่เป็นเพียงแนวคิดและไม่มีวิธีแก้ปัญหาที่สมบูรณ์:

คุณอาจจัดการเหตุการณ์ของคุณเองด้วยpatcl subscribeถ้าคุณสามารถกำหนดค่าให้กับลูกค้า pulsaudio (เช่นหากผู้เล่นภาพยนตร์เชื่อมต่อคุณเปลี่ยนเป็น 7.1 การกำหนดค่ามิฉะนั้นคุณจะใช้การกำหนดค่าสเตอริโอ) คุณจะได้รับกระแสของเหตุการณ์patcl subscribeที่คงที่ซึ่งคุณสามารถจัดการได้โดยการสังเกตการเชื่อมต่อของลูกค้า จากนั้นคุณสามารถเรียก pactl / pacmd เพื่อเปลี่ยนโปรไฟล์ได้

ตัวอย่างเอาต์พุตของการสมัครสมาชิก pactl:

$ pactl subscribe 
Event 'change' on sink #0
Event 'remove' on sink-input #93
Event 'change' on sink #0
Event 'change' on source #0
Event 'change' on sink #0
Event 'change' on source #0
Event 'new' on sink-input #98
Event 'change' on sink-input #98

โปรดทราบว่าคุณยังคงมีปัญหาในการจัดการกรณีที่คุณมีลูกค้าหลายรายที่มีจำนวนช่องที่แตกต่างกัน

นอกจากนี้วิธีการข้างต้นค่อนข้าง จำกัด การตั้งค่าตามแอปพลิเคชันไม่เพียงพอที่จะตรวจจับจำนวนช่องสัญญาณที่ใช้จริงของแอปพลิเคชัน (เช่น vlc อาจเล่นวิดีโอ 5.1 หรือ 7.1) ฉันไม่พบวิธีรับจำนวนช่องที่ใช้จริงของลูกค้า pulseaudio ผ่าน pactl แต่ฉันอาจพลาดตัวเลือกบางอย่างที่นี่ หรือคุณอาจเชื่อมต่อกับแอปพลิเคชันเครื่องเล่นวิดีโอและรับบิตที่ขาดหายไป


ด้วยpactl list | grep format.channelsคุณควรจะสามารถหาสูงสุด # ของช่องที่ใช้ (และข้อมูลเพิ่มเติมเช่นกัน) การใช้ข้อมูลนั้นในสคริปต์ที่ทริกเกอร์โดยเหตุการณ์ที่สมัครเป็นสมาชิกอาจทำให้เกิดโซลูชัน
30718 ridgy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.