Comment puis-je utiliser les flux audio virtuels PulseAudio pour lire de la musique sur Skype?

20

J'essaie d'écouter la sortie audio d'un processus spécifique (A) et d'un autre processus (B) tout en redirigeant la sortie audio de A vers l'entrée audio de B. Ce serait l'équivalent de jouer de la musique dans Skype tout en écoutant la musique et votre ami et en ayant votre ami en mesure de vous entendre.

J'ai essayé de suivre le tutoriel sur openSUSE (Google "Vous cherchez (peut-être) un mélangeur audio à utiliser avec Pulse Audio") à ce sujet et j'ai même regardé la vidéo plusieurs fois. J'ai précédemment essayé JACK uniquement pour découvrir qu'il ne reconnaîtrait pas mon casque, le Logitech G35.

Je peux jouer de la musique, avoir mon ami et je l'entends mais je ne peux pas envoyer ma voix en même temps. C'est ma voix ou la musique que mon ami entend. Comment puis-je également envoyer ma voix?

Quelques photos de ma configuration (en utilisant une sortie nulle):

Onglet lecture: entrez la description de l'image ici

Onglet d'enregistrement: entrez la description de l'image ici

Jake Thompson
la source

Réponses:

23

Après de nombreuses heures de bricolage, j'ai finalement réussi!

J'ai créé deux sorties nulles et créé deux bouclages pour le premier et un bouclage pour le second.

pactl load-module module-null-sink sink_name=Virtual1
pactl load-module module-null-sink sink_name=Virtual2
pactl load-module module-loopback sink=Virtual1
pactl load-module module-loopback sink=Virtual1
pactl load-module module-loopback sink=Virtual2

Ensuite, j'ai ouvert PulseAudio Volume Control (pavucontrol)

Ce sont mes paramètres. Je les ai tapés dans l'ordre où ils apparaissent. Les chiffres vont de haut en bas.

  • Onglet d'enregistrement:

    • Applications:
      • Toutes les applications doivent entrer depuis votre casque / microphone.
      • Sauf que la ou les applications auxquelles vous souhaitez envoyer l'audio doivent être définies sur l'une des options suivantes. Si vous souhaitez UNIQUEMENT envoyer l'audio: Moniteur de sortie nulle 1. Ce sera la première "sortie nulle" de la liste. Si vous voulez envoyer à la fois l'audio et votre voix: Moniteur de sortie nulle 2. Ce sera la deuxième "sortie nulle" de la liste.
    • Flux virtuels:
      • Bouclage vers sortie nulle (1): votre casque / microphone
      • Retour en boucle vers votre casque / microphone: Sortie nulle 1. Ce sera la première "Sortie nulle" de la liste.
      • Bouclage vers sortie nulle: sortie nulle 1. Ce sera la première "sortie nulle" de la liste.
  • Onglet lecture:

    • Applications:
      • Toutes les applications doivent sortir sur votre casque / haut-parleur.
      • Sauf que la ou les applications que vous souhaitez enregistrer / envoyer via Skype / stream doivent être définies sur Null Output 1. Ce sera la première "Null Output" de la liste.
    • Flux virtuels:
      • Bouclage de votre casque: sortie nulle 2. Ce sera la deuxième "sortie nulle" de la liste.
      • Bouclage du moniteur de sortie nulle (1): votre casque.
      • Bouclage du moniteur de sortie nulle (2): sortie nulle 2. Ce sera la deuxième "sortie nulle" de la liste.
Jake Thompson
la source
11

juste pour ne pas être confondu avec la "sortie nulle", spécifiez simplement les noms comme ceci:

pactl load-module module-null-sink sink_name=Virtual1 sink_properties=device.description="NAME HERE (mic+music)"
pactl load-module module-null-sink sink_name=Virtual2 sink_properties=device.description="NAME HERE (only music)"
pactl load-module module-loopback sink=Virtual1
pactl load-module module-loopback sink=Virtual1
pactl load-module module-loopback sink=Virtual2
MikWind
la source
1

Il est possible d'aller encore plus loin que l'amélioration proposée par @MikWind, et de configurer les sources des périphériques de bouclage au moment de la création.

J'ai finalement obtenu un script bash pour configurer tout ce qui est constant:

#!/bin/bash

MICROPHONE="alsa_input.pci-0000_00_1b.0.analog-stereo"
SPEAKERS="alsa_output.pci-0000_00_1b.0.analog-stereo"

# Create the null sinks
# virtual1 gets your audio source (mplayer ...) only
# virtual2 gets virtual1 + micro
pactl load-module module-null-sink sink_name=virtual1 sink_properties=device.description="virtual1"
pactl load-module module-null-sink sink_name=virtual2 sink_properties=device.description="virtual2"

# Now create the loopback devices, all arguments are optional and can be configured with pavucontrol
pactl load-module module-loopback source=virtual1.monitor sink=$SPEAKERS
pactl load-module module-loopback source=virtual1.monitor sink=virtual2
pactl load-module module-loopback source=$MICROPHONE sink=virtual2

Ayant moi-même eu du mal plusieurs heures avant de comprendre suffisamment pour le faire fonctionner, j'ai compilé mes résultats de recherche (script, liens de documentation, explications) dans un git repo .

Je ne suis pas sûr que ce soit suffisamment clair pour être utile à quelqu'un d'autre que moi, mais j'aimerais avoir trouvé ce genre de documentation lorsque j'ai fait mes propres recherches, donc je recommanderais à quiconque essaie de faire le même genre de choses regarde.

toadjaune
la source