Tự động chuyển đổi cấu hình PulseAudio dựa trên số lượng kênh đầu vào


39

Tôi đang chạy âm thanh qua HDMI đến máy thu của mình, có cài đặt 7.1 đầy đủ được kết nối với nó. Tuy nhiên, hầu hết những thứ tôi nghe có ít kênh hơn, một số kênh là đơn âm, hầu hết là âm thanh nổi, một chút là 5.1. Khi máy thu được cung cấp đúng số kênh, nó có các hiệu ứng DSP khác nhau hoạt động khá tốt (ví dụ: tách kênh trung tâm, gửi cơ sở đến loa siêu trầm, tự động phát hiện xung quanh ma trận Dolby, v.v.). Điều này sẽ ngừng hoạt động nếu bạn gửi tín hiệu 7.1 đầy đủ với một loạt các kênh im lặng.

Số lượng kênh đầu ra trong PulseAudio được định cấu hình, trên mỗi thẻ / chìm, theo cấu hình được gán cho thẻ. Bạn có thể thay đổi cấu hình được giao pacmd, pactlvà các chương trình GUI khác nhau.

Làm cách nào tôi có thể thiết lập nó để tự động thay đổi cấu hình dựa trên việc sử dụng kênh trong (các) luồng đầu vào? Ví dụ: nếu các luồng đầu vào chỉ sử dụng phía trước bên trái và phía trước bên phải, hãy chuyển sang cấu hình âm thanh nổi. Nếu họ cũng đang sử dụng back-left và back-right, hãy chuyển sang quadrophonic, v.v.


3
Có thể tôi sai, nhưng tôi không nghĩ nó khả thi. Pulseaudio quản lý nhiều luồng cùng một lúc: cấu hình nào sẽ đúng nếu các luồng khác nhau có số kênh khác nhau được phát cùng nhau?
Alessio Gaeta

@meden Một kênh có số lượng kênh cao nhất, tôi đoán vậy.
derobert

Vâng, tất nhiên, nhưng vẫn sẽ có những trường hợp bạn không thể đạt được mục tiêu của mình. BTW, tôi không nghĩ có một cách nào đó trong Pulseaudio để chuyển đổi một cách có điều kiện một hồ sơ. Có thể hướng dẫn Kodi về Pulseaudio [ kodi.wiki/view/PulseAudio] có thể hữu ích để có một số gợi ý (ví dụ: sử dụng passthrough và để người nhận của bạn thực hiện tất cả công việc, miễn là nó hỗ trợ tất cả các định dạng bạn sử dụng).
Alessio Gaeta

Đây là một câu hỏi thú vị. Tôi không có cài đặt âm thanh sẵn để kiểm tra điều này, nhưng như một xung quanh công việc, nếu bạn đã tạo hồ sơ cho mỗi trường hợp bạn hình dung, thiết lập một kịch bản để phân tích các dòng trước (có lẽ bởi grepping đầu ra của mediainfohay ffmpeghay avconv) và sau đó sử dụng pacmdđể chọn cấu hình phù hợp trước khi khởi chạy trình phát của bạn, Từ quan điểm logic tôi sẽ mong đợi nó hoạt động với điều kiện bạn đang phát một âm thanh tại một thời điểm.
Anh Cả Geek

4
Có thể đáng để gửi câu hỏi này dưới dạng yêu cầu tính năng tại launchpad.net/bugs/orptrackers/pulseaudio-bugs nếu nó chưa được gửi ở đó. Nó sẽ là một tính năng thú vị và âm thanh xung có thể giải quyết vấn đề này tốt hơn trong nội bộ hơn là sử dụng một tập lệnh bên ngoài.
Alexander

Câu trả lời:


1

Đây chỉ là một khái niệm và không có giải pháp hoàn chỉnh:

Bạn có thể tự xử lý các sự kiện patcl subscribenếu bạn có thể gán cấu hình cho các máy khách pulsaudio (ví dụ: nếu trình phát phim kết nối, bạn chuyển sang cấu hình 7.1, nếu không, bạn sử dụng cấu hình âm thanh nổi). Bạn sẽ nhận được một chuỗi các sự kiện liên tục từ patcl subscribeđó, bạn có thể xử lý bằng cách quan sát các kết nối máy khách. Sau đó, bạn có thể chỉ cần gọi pactl / pacmd để thay đổi hồ sơ.

Ví dụ đầu ra của đăng ký 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

Xin lưu ý rằng bạn vẫn gặp sự cố khi xử lý các trường hợp bạn có nhiều khách hàng với số lượng kênh khác nhau.

Hơn nữa, cách tiếp cận trên là khá hạn chế. Cài đặt cho mỗi ứng dụng không đủ để phát hiện số kênh thực đã sử dụng của ứng dụng (ví dụ: vlc có thể phát video 5.1 hoặc 7.1). Tôi chưa tìm được cách lấy số kênh thực sự được sử dụng của máy khách pulseaudio qua pactl, nhưng tôi có thể đã bỏ lỡ một số tùy chọn ở đây. Ngoài ra, bạn cũng có thể tự móc vào ứng dụng trình phát video và lấy các bit còn thiếu ở đó.


Với pactl list | grep format.channelsbạn sẽ có thể tìm ra tối đa. # kênh được sử dụng (và nhiều thông tin nữa). Sử dụng thông tin đó trong một tập lệnh được kích hoạt bởi các sự kiện được đăng ký có thể dẫn đến một giải pháp.
vô lý
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.