web-dev-qa-db-fra.com

Existe-t-il un moyen de contrôler le volume de sortie JACK via un terminal ou d'obtenir une entrée PulseAudio?

J'ai une petite question précise:

En tant que musicien, j'utilise Ubuntu pour la surveillance des logiciels et je voudrais contrôler mon volume principal de sortie avec la molette de la souris.

Dans ce but, j'utilise actuellement EasyStroke avec les commandes amixer -D Pulse sset Master 5%+ (Roulette de la souris vers le haut) et amixer -D Pulse sset Master 5%- (Molette de la souris vers le bas), ce qui fonctionne bien.

Le problème est que j'utilise certains programmes qui ont une sortie JACK directe, comme Reaper, ma DAW et aussi certains lecteurs multimédias.

Tant que le logiciel utilise la sortie PulseAudio JACK Sink, je peux contrôler le volume de sortie via la molette de la souris, mais lorsque le logiciel n'utilise pas PulseAudio, il est directement connecté à JACK et toujours au volume maximum.

Si vous vous référez à la capture d'écran: je suis capable de manipuler le volume principal de la sortie marquée en rouge (PulseAudio JACK Sink), mais j'ai en fait besoin d'accéder à celui marqué en vert pour contrôler tout le son (sortie système).

Malheureusement, je ne peux pas contrôler mon volume principal ALSA via amixer -q sset Master X, car ALSA n'offre aucun contrôle pour ma seule carte son USB.

Existe-t-il un moyen de contrôler le volume de sortie JACK via un terminal avec lequel je pourrais remplacer les commandes de mon bouton de souris?

Ou bien, existe-t-il un moyen d'ajouter un module d'entrée PulseAudio sur le côté droit des connexions JACK pour connecter Reaper et tous les autres logiciels JACK et les acheminer via le PulseAudio JACK Sink? (La source PulseAudio JACK n'est utilisée que pour les microphones et ne lit pas l'entrée.)

enter image description here

7
Prototype700

Sur la base de l'exemple this , nous pouvons résoudre le problème.

Si votre carte son ne peut pas contrôler le volume du côté matériel ou si le pilote ne prend pas en charge cette fonctionnalité de votre carte son, une solution de contournement possible consiste à définir un nouveau périphérique pcm virtuel dans le ~/.asoundrc fichier, qui contrôle le volume côté logiciel.

Nous devons d'abord connaître le nom de notre carte son, donc

 aplay -L

est la commande utile ici. Le nom réel de la carte sera affiché après CARD= et le nom (numéro) de l'appareil après DEV=.

Nous pouvons tester l'appareil avec

speaker-test -D <card name> -c <channel count> -twav

Nous créons maintenant un nouveau périphérique softvol en ajoutant

pcm.softvol {
    type            softvol
    slave {
    pcm         "<card name>,<device name>"
    }
    control {
        name        "<control name>"
        card        "<card name>"
    }
}

à ~/.asoundrc. (Si le fichier n'existe pas, nous devons créer le fichier)

Dans ce cas, doit être Master, veuillez consulter des informations supplémentaires sur les noms de contrôle dans le lien ci-dessus.

Maintenant, nous testons le nouvel appareil avec

speaker-test -D softvol -c <channel count> -twav

Ouvrez alsamixer, vous devriez voir le nouveau contrôle Master maintenant et devriez pouvoir changer le volume en utilisant alsamixer.

Il peut être nécessaire de définir en plus le périphérique par défaut dans /etc/asound.conf avec:

pcm.!default {
    type   hw
    card   <card name>
}
ctl.!default {
    type   hw
    card   <card name>
}

Notez que ceci est différent de la suggestion dans le lien ci-dessus, mais c'est ce que OP a rapporté fonctionner.

Maintenant, nous devons définir le périphérique d'interface Jack sur softvol et pouvons utiliser par exemple.

amixer -q sset Master 5%+
amixer -q sset Master 5%-
amixer -q sset Master 50%

pour augmenter ou diminuer le volume de sortie de 5% respectivement ou réglé sur 50%, fixe.

Amixer doit "ouvrir" l'appareil la première fois avant que les commandes du volume principal ne soient accessibles. Lancer un test sonore avec speaker-test -D softvol -c <channel count> -twav tandis que jackd n'est pas en cours d'exécution, puis utilisez Sudo alsactl store pour enregistrer l'état du volume principal. Sinon, un son doit être lu via softvol après chaque redémarrage pour que le contrôle du volume fonctionne.

1
mook765

Mise à jour du 21 juillet 2019

À partir d'un site Web professionnel de musique pour Linux:

Désolé de poster une question sans ardeur mais j'ai besoin de vos conseils. Lorsque Jack prend le contrôle de l'audio, de nombreuses applications, y compris flashplayer, agissent très fort, c'est-à-dire que dans VLC, le volume est réglé sur 5%. Je voudrais contrôler le volume principal comme dans alsamixer au lieu de définir les niveaux pour chaque application individuellement. Comment puis je faire ça?

Il y a deux réponses publiées et celle-ci est la plus utile:

il n'y a pas un tel concept. JACK est conçu pour les workflows de création audio et de musique pro. Ce n'est pas un serveur de son de bureau, même si certains l'utilisent de cette façon. Si vous avez besoin d'une telle chose, vous devrez acheminer tous vos clients JACK via un client de mixage qui pourrait être quelque chose d'aussi simple que JackMix ou aussi complexe que Ardor. JACK lui-même ne fournit pas cette fonctionnalité, et son totalement hors de la portée de sa conception.

La solution la plus simple consiste alors à installer JackMix :

"Avez-vous déjà eu du mal avec un certain nombre d'applications jack sur votre bureau, tout le monde utilisant son propre fader de volume principal mais pas un endroit commun pour tous les volumes directement accessibles?"

"La solution à votre problème est JackMix, une application de mixage pour jack qui ressemble exactement au mixeur que vous utiliseriez si vous deviez connecter votre équipement analogique."

Il existe d'autres applications pour Jack que vous pouvez trouver répertoriées ici .


Réponse originale

Je dois avouer être un défi musical, mais je pense que ce script est où vous vous dirigez:

Vous pouvez obtenir une liste de tous les éviers avec pacmd list-sinks, and set the volume withpacmd set-sink-volume`, vous devez donc faire quelque chose comme

VOLUME='+5%'
for SINK in `pacmd list-sinks | grep 'index:' | cut -b12-`
do
  pacmd set-sink-volume $SINK $VOLUME
done

$VOLUME peut être absolu (150%) ou relatif (+ 5%, -5%), et éventuellement d'autres formats également.

La plupart des gestionnaires de fenêtres peuvent être configurés pour lancer des scripts ou des programmes, accompagnés d'arguments, lorsque vous appuyez sur les touches. C'est la meilleure méthode, mais si votre WM ne le fait pas, il existe des outils comme xbindkeys. Ainsi, vous pouvez personnaliser comme vous le souhaitez.

Notez que Pulseaudio commencera à utiliser des mélangeurs matériels si le volume de l'évier dépasse 100%, ce qui peut fausser le son.

Notez également que Pulseaudio permet de régler le volume de chaque application ("flux audio") avec pamcd set-sink-input-volume. Vous pouvez les répertorier avec pacmd list-sink-inputs et les définir de la même manière.

Cela vous permet d'avoir les volumes d'évier à un niveau fixe afin qu'ils soient à peu près égaux, sans utiliser de mélangeurs matériels, et lorsque vous changez d'évier, il aura automatiquement le "bon" volume. C'est la configuration que je préfère.

2
WinEunuuchs2Unix

MISE À JOUR 1

Juste pour que je puisse donner une explication rapide avant une écriture plus longue.

Même si PCM n'est pas disponible (pas seulement invisible dans amixer), nous pouvons toujours utiliser PulseAudio pour gérer JACK car dbus le découvrira.

Avant toute chose, assurez-vous que les modules du noyau sont chargés pour votre carte son USB avec:

Sudo modprobe snd-usb-audio

car cela pourrait être la raison pour laquelle les commandes de votre carte son n'apparaissent pas dans amixer. Juste pour confirmer, veuillez exécuter aplay -l et aplay -L et publier la sortie de ces deux commandes.

Ensuite, nous commençons par installer les packages pulseaudio correspondants:

Sudo apt-get update && Sudo apt-get install pulseaudio-module-jack

puis en chargeant son module correspondant:

pactl load-module module-jack-sink channels=2

et enfin régler le récepteur par défaut sur JACK

pacmd set-default-sink jack_out


Pour autant que Sudo pactl load-module module-alsa-sink control=PCM, cette ligne permet à pulseaudio de créer une nouvelle source de récepteur qui gère le niveau de volume de modulation du code d'impulsion au niveau de la carte son de l'API ALSA. La carte son d'OP doit être capable de convertir le flux audio numérique en un flux analogique via la modulation d'impulsion, car il y a du son provenant du système et des haut-parleurs.


Vous devez d'abord ajouter un récepteur qui contrôle le périphérique pcm en tant que sortie avec:

Sudo pactl load-module module-alsa-sink control=PCM

puis (juste pour revérifier, voir si vous voyez la nouvelle sortie visible à travers le pavucontrol c'est-à-dire GUI de contrôle du volume pulseaudio)

vous pouvez contrôler le volume de sortie du récepteur PCM directement avec

pactl set-sink-volume [pcm-sink-name likely something along the lines of alsa.default] 50%

1
BarBar1234