Como posso usar fluxos de áudio virtuais PulseAudio para reproduzir músicas pelo Skype?

20

Estou tentando ouvir a saída de áudio de um processo específico (A) e outro processo (B) enquanto redireciona a saída de áudio de A para a entrada de áudio de B. Isso seria o equivalente a tocar música no Skype enquanto você escuta a música e seu amigo e faz com que ele seja capaz de ouvi-lo.

Eu tentei seguir o tutorial no openSUSE (Google "Procurando (talvez) por mixer de áudio para uso com o Pulse Audio") sobre isso e até assisti o vídeo várias vezes. Eu já havia experimentado o JACK apenas para descobrir que ele não reconhecerá meu fone de ouvido, o Logitech G35.

Eu sou capaz de tocar música, ter meu amigo e eu a ouço, mas não consigo enviar minha voz ao mesmo tempo. É a minha voz ou a música que meu amigo ouve. Como também posso enviar minha voz?

Algumas fotos da minha configuração (usando uma saída nula):

Guia Reprodução: insira a descrição da imagem aqui

Guia Gravação: insira a descrição da imagem aqui

Jake Thompson
fonte

Respostas:

23

Depois de muitas horas de conserto, finalmente consegui!

Criei duas saídas nulas e criei dois loopbacks para o primeiro e um loopback para o segundo.

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

Em seguida, abri o controle de volume PulseAudio (pavucontrol)

Estas são as minhas configurações. Digitei-os na ordem em que aparecem. Os números vão de cima para baixo.

  • Guia Gravação:

    • Aplicações:
      • Todos os aplicativos devem ser inseridos pelo fone de ouvido / microfone.
      • Exceto que os aplicativos para os quais você deseja enviar o áudio devem estar definidos para um dos seguintes. Se você SOMENTE deseja enviar o áudio: Monitor de Saída Nula 1. Será a primeira "Saída Nula" da lista. Se você deseja enviar o áudio e a sua voz: Monitor de Saída Nula 2. Será a segunda "Saída Nula" da lista.
    • Fluxos virtuais:
      • Loopback para saída nula (1): seu fone de ouvido / microfone
      • Loopback para o fone de ouvido / microfone: Saída nula 1. Será o primeiro "Saída nula" da lista.
      • Loopback para Saída Nula: Saída Nula 1. Será o primeiro "Saída Nula" da lista.
  • Guia Reprodução:

    • Aplicações:
      • Todos os aplicativos devem ser enviados para o fone de ouvido / alto-falante.
      • Exceto que os aplicativos que você deseja gravar / enviar pelo Skype / stream devem estar definidos como Saída nula 1. Será o primeiro "Saída nula" da lista.
    • Fluxos virtuais:
      • Loopback do seu fone de ouvido: Saída Nula 2. Será o segundo "Saída Nula" da lista.
      • Loopback do Monitor de Saída Nula (1): Seu fone de ouvido.
      • Loopback do Monitor de Saída Nula (2): Saída Nula 2. Será a segunda "Saída Nula" da lista.
Jake Thompson
fonte
11

só para não se confundir com a "Saída nula", basta especificar os nomes como este:

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
fonte
1

É possível ir além da melhoria proposta pelo @MikWind e configurar as fontes dos dispositivos de loopback no momento da criação.

Finalmente recebi um script bash para configurar tudo o que é constante:

#!/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

Tendo me esforçado várias horas antes de entender o suficiente para fazê-lo funcionar, compilei meu resultado de pesquisa (script, links de documentação, explicações) em um repositório git .

Não tenho certeza se é claro o suficiente para ser útil a alguém que não seja eu, mas gostaria de encontrar esse tipo de documentação quando fiz minha própria pesquisa, por isso recomendo que alguém tente fazer o mesmo tipo de coisa para dar uma olhada.

toadjaune
fonte