Commutazione automatica dei profili PulseAudio in base al conteggio dei canali di input (s)


39

Sto eseguendo l'audio su HDMI sul mio ricevitore, a cui è collegata una configurazione 7.1 completa. Tuttavia, la maggior parte delle cose che ascolto ha molti meno canali: alcuni sono mono, la maggior parte sono stereo, un po 'è 5.1. Quando il ricevitore viene alimentato con il giusto numero di canali, ha vari effetti DSP che funzionano abbastanza bene (ad es. Nel suddividere un canale centrale, nell'invio della base al subwoofer, nel rilevamento automatico della matrice Dolby Surround, ecc.). Questo smette di funzionare se si invia un segnale 7.1 completo con un sacco di canali silenziosi.

Il numero di canali di uscita in PulseAudio è configurato, per scheda / sink, dal profilo assegnato alla scheda. È possibile modificare il profilo assegnato con pacmd, pactle vari programmi con interfaccia grafica.

Come posso impostarlo per cambiare automaticamente il profilo in base all'utilizzo del canale nei flussi di input? Ad esempio, se i flussi di input utilizzano solo front-left e front-right, passare al profilo stereo. Se usano anche back-left e back-right, passa a quadrophonic, ecc.


3
Forse mi sbaglio, ma non credo sia fattibile affatto. Pulseaudio gestisce più stream contemporaneamente: quale profilo sarebbe corretto se si riproducessero stream diversi con numeri di canale diversi?
Alessio Gaeta,

@meden Quello con il maggior numero di canali, immagino.
derobert,

Sì, certo, ma ci saranno comunque casi in cui non è stato possibile raggiungere il tuo obiettivo. A proposito, non credo ci sia un modo in Pulseaudio per cambiare condizionalmente un profilo. Forse la guida di Kodi a Pulseaudio [ kodi.wiki/view/PulseAudio] potrebbe essere utile per avere qualche suggerimento (cioè usare il passthrough e lasciare che il tuo ricevitore faccia tutto il lavoro, purché supporti tutti i formati che usi).
Alessio Gaeta,

Questa è una domanda interessante Non ho la configurazione audio disponibile per testare questo, ma come soluzione, se dovessi creare profili per ogni istanza che prevedi, imposta uno script per analizzare in anticipo i flussi (magari facendo un grepping sull'output di mediainfoo ffmpego avconv) e quindi utilizzare pacmdper selezionare il profilo appropriato prima di avviare il lettore. Dal punto di vista logico, mi aspetto che funzioni, a condizione che si stia riproducendo un audio alla volta.
Elder Geek,

4
Potrebbe valere la pena di inviare questa domanda come richiesta di funzionalità su launchpad.net/bugs/bugtrackers/pulseaudio-bugs se non è già stata inviata lì. Sarebbe una caratteristica interessante e l'audio a impulsi potrebbe probabilmente risolverlo meglio internamente che usando uno script esterno.
Alexander

Risposte:


1

Questo è solo un concetto e nessuna soluzione completa:

Potresti essere in grado di gestire da solo gli eventi patcl subscribese puoi assegnare configurazioni ai client pulsaudio (ad esempio, se il lettore di film si connette, passi alla configurazione 7.1, altrimenti usi la configurazione stereo). Otterrai un flusso costante di eventi patcl subscribe, che puoi gestire osservando le connessioni client. Quindi puoi semplicemente chiamare pactl / pacmd per cambiare il profilo.

Esempio di output di abbonamento 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

Tieni presente che hai ancora il problema di gestire i casi in cui hai più client con un numero diverso di canali.

Inoltre, l'approccio sopra è piuttosto limitato. Le impostazioni per applicazione non sono sufficienti per rilevare il numero reale di canali utilizzati dell'applicazione (ad es. Vlc potrebbe riprodurre un video 5.1 o 7.1). Non ho trovato un modo per ottenere il numero di canali effettivamente utilizzati di un client pulseaudio su pactl, ma avrei potuto perdere alcune opzioni qui. In alternativa, potresti anche essere in grado di collegarti all'applicazione di riproduzione video stessa e ottenere lì i bit mancanti.


Con pactl list | grep format.channelste dovresti essere in grado di scoprire il massimo. Numero di canali utilizzati (e anche altre informazioni). L'uso di tali informazioni in uno script attivato da eventi sottoscritti potrebbe portare a una soluzione.
ridicolo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.