web-dev-qa-db-fra.com

Comment obtenir les bons profils Pulseaudio pour qu'ils s'affichent sans redémarrer Pulseaudio?

Parfois, le microphone de mon casque USB disparaît de la liste des périphériques d'entrée. La reconnexion du casque ne fonctionne pas, mais tuer Pulseaudio fait ce qui suit:

pulseaudio -k

Lorsque Pulseaudio démarre, mon casque USB s’affiche sous les périphériques d’entrée et de sortie et fonctionne correctement.

Le problème est que tuer Pulseaudio bloque également toutes les applications qui l'utilisent ou les laisse sans son. Cela signifie que je dois redémarrer Skype, Steam, XChat, tout lecteur vidéo en cours d'exécution (plantage de SMPlayer), tous les jeux en cours, etc.

Existe-t-il un moyen de forcer le rechargement de tous les périphériques sans tuer l'instance en cours de Pulseaudio?


Fait intéressant, lorsque je fais fonctionner mon casque USB en redémarrant Pulseaudio, la reconnexion du casque ne ferait apparaître que le périphérique de sortie. Je dois redémarrer Pulseaudio avec le casque connecté pour que le périphérique d'entrée s'affiche.


Edit: Checked pavuvontrol sous "Configuration":

Screenshot

Après avoir redémarré Pulseaudio, un profil supplémentaire se terminant par "+ Entrée stéréo numérique" (ou quelque chose du genre) est disponible dans la liste et sélectionné par défaut.

7
Hubro

Je souffre du même problème depuis un moment et j'ai enfin eu l'occasion de l'examiner. Il s'avère que le déchargement et le rechargement du module Pulseaudio responsable du périphérique audio fonctionnent pour moi.

Déchargement et rechargement du module, à la main

Dans la fenêtre du terminal, entrez la commande

pacmd list-cards

et à partir de la sortie, recherchez le périphérique audio pour lequel il manque des profils. Vous obtiendrez probablement plusieurs cartes et devrez localiser la bonne. Le mien ressemble à ceci:

[...]
index: 8
    name: <alsa_card.usb-Logitech_Logitech_USB_Headset-00-Headset>
    driver: <module-alsa-card.c>
    owner module: 27
    properties:
            alsa.card = "1"
            alsa.card_name = "Logitech USB Headset"
            [... more output ...]
[...]

Dans votre sortie, recherchez la ligne "module propriétaire". C'est le module que vous devez décharger, mais vous devrez d'abord examiner ses paramètres pour pouvoir le recharger. Entrez la commande

pacmd list-modules

et localisez le module qui pilote votre carte. Encore une fois, la partie pertinente de la sortie dans mon cas ressemble à ceci ( index correspond module propriétaire à partir de la sortie de pacmd list-cards ):

[...]
index: 27
    name: <module-alsa-card>
    argument: <device_id="1" name="usb-Logitech_Logitech_USB_Headset-00-Headset" card_name="alsa_card.usb-Logitech_Logitech_USB_Headset-00-Headset" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes card_properties="module-udev-detect.discovered=1">
    used: 2
    load once: no
    properties:
    [... more output ...]
[...]

Vous aurez besoin du nom du module et des arguments pour le recharger.

Pour décharger le module, entrez command (remplacez module-index par la valeur appropriée dans votre sortie)

pacmd unload-module module-index

Pour recharger le module après son déchargement, entrez command

pacmd load-module module-name module-arguments

Remplacez nom-module et module-arguments par les valeurs issues de la sortie de pacmd list-modules . Laissez les équerres.

Maintenant, le module doit être rechargé et, avec un peu de chance, vos profils de micro-casque sont de retour.

Application de l'automatisation

Les étapes ci-dessus représentent beaucoup de travail si vous devez souvent réinitialiser votre appareil, car l'index du module ne cesse de changer et vous devez le rechercher à chaque fois. J'ai écrit un script Shell pour automatiser le pire:

#!/bin/bash

if [ -z "$1" ]; then
  echo "Pulseaudio has these cards:"
  pacmd list-cards | grep 'name: '
  exit 0
fi

MODULE_INDEX=`pacmd list-modules | tac | grep -A 10 -e "argument: .*$1" | grep 'index:' | head -n 1 | cut -d ':' -f 2 | tr -d ' '`
MODULE_NAME=`pacmd list-modules | tac | grep -A 10 -e "argument: .*$1" | grep 'name:' | head -n 1 | cut -d ':' -f 2 | tr -d '<>'`
MODULE_ARGUMENTS=`pacmd list-modules | tac | grep -e "argument: .*$1" | head -n 1 | cut -d ':' -f 2 | tr -d '<>'`
echo "Module index is $MODULE_INDEX"
echo "Module name: $MODULE_NAME"
echo "Module args: $MODULE_ARGUMENTS"

if [ -z "$MODULE_INDEX" ]; then echo "Could not find module index"; exit 0; fi
if [ -z "$MODULE_NAME" ]; then echo "Could not find module name"; exit 0; fi
if [ -z "$MODULE_ARGUMENTS" ]; then echo "Could not find module arguments"; exit 0; fi

echo "Unloading module"
pacmd unload-module $MODULE_INDEX
echo ""
echo "Reloading module"
pacmd load-module $MODULE_NAME $MODULE_ARGUMENTS
echo ""

Lorsqu'il est exécuté sans arguments, le script répertorie les cartes connues de Pulseaudio. Lorsqu'une partie du nom d'une carte est donnée en argument, le script tente de décharger et de recharger le module Pulseaudio approprié.

6
juise