Basculement automatique des profils PulseAudio en fonction du nombre de canaux d'entrée

39

J'utilise l'audio via HDMI sur mon récepteur, qui est doté d'une configuration 7.1 complète. Cependant, la plupart des morceaux que j'écoute ont beaucoup moins de canaux - certains sont mono, la plupart en stéréo, un peu en 5.1. Lorsque le récepteur reçoit le nombre correct de canaux, il génère divers effets DSP qui fonctionnent assez bien (par exemple, pour séparer un canal central, pour envoyer une base au subwoofer, pour détecter automatiquement l’environnement Dolby matrix, etc.). Cela cesse de fonctionner si vous lui envoyez un signal 7.1 complet avec un tas de canaux silencieux.

Le nombre de canaux de sortie dans PulseAudio est configuré, par carte / récepteur, par le profil attribué à la carte. Vous pouvez modifier le profil attribué avec pacmd, pactlet divers programmes de l' interface graphique.

Comment puis-je le configurer pour modifier automatiquement le profil en fonction de l'utilisation du canal dans le ou les flux d'entrée? Par exemple, si les flux d'entrée n'utilisent que l'avant gauche et l'avant droite, passez au profil stéréo. S'ils utilisent également l'arrière-gauche et l'arrière-droite, passez au quadrophonique, etc.

derobert
la source
3
Peut-être que je me trompe, mais je ne pense pas que ce soit réalisable du tout. Pulseaudio gère plusieurs flux à la fois: quel profil serait correct si différents flux avec des numéros de canaux différents jouaient ensemble?
Alessio Gaeta
@meden Celui qui a le plus grand nombre de canaux, je suppose.
derobert
Oui, bien sûr, mais il y aura toujours des cas dans lesquels vous ne pourriez pas atteindre votre objectif. BTW, je ne pense pas qu'il y ait un moyen dans Pulseaudio de changer conditionnellement un profil. Peut-être que le guide Kodi de Pulseaudio [ kodi.wiki/view/PulseAudio] pourrait être utile pour avoir un indice (par exemple, utiliser la procédure passthrough et laisser votre récepteur faire tout le travail, à condition qu'il prenne en charge tous les formats que vous utilisez).
Alessio Gaeta
C'est une question intéressante. Je n'ai pas la configuration audio disponible pour tester cela, mais comme solution de contournement, si vous deviez créer des profils pour chaque instance envisagée, configurez un script pour analyser les flux à l'avance (peut-être en accaparant la sortie de mediainfoou ffmpegou avconv) et utilisez ensuite pacmdpour sélectionner le profil approprié avant de lancer votre lecteur. D'un point de vue logique, je m'attendrais à ce que cela fonctionne tant que vous ne jouez qu'un fichier audio à la fois.
Elder Geek
4
Il pourrait être intéressant de soumettre cette question sous forme de demande de fonctionnalité à launchpad.net/bugs/bugtrackers/pulseaudio-bugs si elle n'y a pas déjà été soumise. Ce serait une fonctionnalité intéressante et l'audio à impulsions pourrait probablement résoudre cela mieux en interne qu'en utilisant un script externe.
Alexander

Réponses:

1

Ceci est juste un concept et pas de solution complète:

Vous pourrez peut-être gérer vous-même les événements patcl subscribesi vous pouvez affecter des configurations à des clients pulsaudio (par exemple, si le lecteur de film se connecte, vous passez en configuration 7.1, sinon vous utilisez la configuration stéréo). Vous obtiendrez un flux constant d'événements patcl subscribeque vous pourrez gérer en observant les connexions des clients. Ensuite, vous pouvez simplement appeler pactl / pacmd pour modifier le profil.

Exemple de sortie de pactl subscribe:

$ 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

Veuillez noter que vous avez toujours le problème de gérer les cas dans lesquels vous avez plusieurs clients avec un nombre différent de canaux.

En outre, l'approche ci-dessus est plutôt limitée. Les paramètres par application ne suffisent pas pour détecter le nombre réel de canaux utilisés de l'application (par exemple, vlc peut lire une vidéo 5.1 ou 7.1). Je n'ai pas trouvé le moyen d'obtenir le nombre réellement utilisé les canaux d'un client pulseaudio par rapport à pactl, mais j'ai peut-être manqué certaines options ici. Alternativement, vous pouvez également être connecté à l'application de lecteur vidéo elle-même et y obtenir les bits manquants.

Till Schäfer
la source
Avec pactl list | grep format.channelsvous devriez être capable de trouver le max. Nombre de canaux utilisés (et plus d’informations également). L'utilisation de ces informations dans un script déclenché par des événements abonnés pourrait mener à une solution.
Ridgy