web-dev-qa-db-fra.com

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

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. Cela équivaudrait à jouer de la musique sur Skype tout en écoutant à la fois la musique et votre ami et en permettant à votre ami de vous entendre.

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

Je suis capable de jouer de la musique, d'avoir mon ami et moi, mais je ne peux pas envoyer ma voix en même temps. C'est soit ma voix, soit la musique que mon ami entend. Comment puis-je aussi envoyer ma voix?

Quelques images de ma configuration (utilisant une sortie nulle):

Onglet Lecture: enter image description here

Onglet Enregistrement: enter image description here

19
Jake Thompson

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

J'ai créé deux sorties nulles et créé deux boucles pour la première et une boucle pour la seconde.

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 dans lequel ils apparaissent. Les nombres vont de haut en bas.

  • Onglet Enregistrement:

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

    • Applications:
      • Toutes les applications doivent sortir vers votre casque/haut-parleur.
      • Sauf que les applications que vous voulez enregistrer/envoyer via Skype/stream doivent être définies sur Null Output 1. Ce sera le premier "Null Output" de la liste.
    • Flux virtuels:
      • Retour en boucle de votre casque: Null Output 2. Ce sera le deuxième "Null Output" de la liste.
      • Retour en boucle du moniteur de sortie nulle (1): votre casque.
      • Retour en boucle du moniteur de sortie nulle (2): Sortie nulle 2. Ce sera la deuxième "Sortie nulle" de la liste.
22
Jake Thompson

juste pour ne pas être confondu avec la "sortie null", 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
11
MikWind

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 eu 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 que cela fonctionne, j'ai compilé mes résultats de recherche (script, liens de documentation, explications) dans un git repo .

Je ne sais pas s'il est suffisamment clair pour être utile à qui que ce soit d'autre que moi, mais j'aimerais trouver ce genre de documentation lorsque je faisais mes propres recherches. Je recommanderais donc à quiconque d'essayer de faire le même genre de choses regarde.

1
toadjaune