Questão Compartilhe um fluxo de reprodução de áudio por meio de uma conversa ao vivo de áudio (vídeo), como o Skype


Em conversas usando o Skype, muitas vezes eu quero compartilhar saída de som (por exemplo, de um vídeo do Youtube) com outras pessoas que eu estou falando.

Então, eu estou procurando uma maneira de direcionar a saída para a entrada de gravação (para que os outros membros ouçam a saída de som), mas eu ainda posso ouvir a saída. Além disso, ainda quero poder falar com eles enquanto compartilho a saída de som com eles.

Como eu faria isso? Eu ficaria muito agradecido!

Parte da minha pergunta foi respondida aqui: Como passar / gravar saída de áudio como um dispositivo de entrada? (mas só permite configurar o fluxo de saída como entrada, sem sobrepor o microfone real)


4
2018-02-14 22:03


origem




Respostas:


  1. Verifique id's

    $ pactl list short sources
    0   alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor    module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    1   alsa_output.pci-0000_00_1b.0.analog-stereo.monitor  module-alsa-card.c  s16le 2ch 44100Hz   IDLE
    2   alsa_input.pci-0000_00_1b.0.analog-stereo   module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    3   combined.monitor    module-combine-sink.c   s16le 2ch 44100Hz   SUSPENDED
    
    $ pactl list short sinks
    0   alsa_output.pci-0000_01_00.1.hdmi-stereo    module-alsa-card.c  s16le 2ch 44100Hz   RUNNING
    1   alsa_output.pci-0000_00_1b.0.analog-stereo  module-alsa-card.c  s16le 2ch 48000Hz   RUNNING
    2   combined    module-combine-sink.c   s16le 2ch 44100Hz   IDLE
    
  2. Faça 2 sumidouros virtuais, (Virtual1 mic + musica, Virtual2 música)

    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
    
  3. Loopback mic para Virtual1

    pactl load-module module-loopback latency_msec=1 sink=Virtual1
    
  4. Loopback Virtual2.monitor para Virtual1

    pactl load-module module-loopback latency_msec=1 sink=Virtual1 source=Virtual2.monitor
    
  5. Loopback Virtual2.monitor para estéreo analógico (no meu caso)

    pactl load-module module-loopback latency_msec=1 sink=1 source=Virtual2.monitor
    
  6. Então abra pavucontrol:

    • Dispositivo de entrada: definir fallback para Virtual1.monitor ou usando o CLI:

      pactl set-default-source Virtual1.monitor
      
    • Dispositivos de saída: defina o padrão como Estéreo analógico (no meu caso) ou usando o CLI:

      pactl set-default-sink 1
      
    • Gravação: confirme o Skype de Virtual1.monitor ou usando o CLI (removo algumas linhas dos resultados, avconv como exemplo):

      $ pactl list short clients
      23  protocol-native.c   chromium-browser
      24  protocol-native.c   chromium-browser
      45  protocol-native.c   pavucontrol
      237 protocol-native.c   avconv
      239 protocol-native.c   pactl
      
      $ pactl list short source-outputs
      35  0   45  protocol-native.c   float32le 1ch 25Hz
      36  1   45  protocol-native.c   float32le 1ch 25Hz
      37  2   45  protocol-native.c   float32le 1ch 25Hz
      38  3   45  protocol-native.c   float32le 1ch 25Hz
      39  4   45  protocol-native.c   float32le 1ch 25Hz
      41  0   45  protocol-native.c   float32le 1ch 25Hz
      42  1   45  protocol-native.c   float32le 1ch 25Hz
      52  1   45  protocol-native.c   float32le 1ch 25Hz
      54  1   237 protocol-native.c   s16le 2ch 48000Hz
      
      $ pactl move-source-output 54 Virtual1.monitor
      
    • Reprodução: defina o reprodutor de música para Virtual2 (2º dispositivo nulo) e confirme o Skype em estéreo analógico. ou através do CLI (chromium como exemplo, veja o anterior pactl list short clients):

      $ pactl list short sink-inputs
      17  3   24  protocol-native.c   s16le 2ch 44100Hz
      58  0   -   module-combine-sink.c   s16le 2ch 44009Hz
      59  1   -   module-combine-sink.c   s16le 2ch 44100Hz
      
      $ pactl move-sink-input 17 Virtual2       
      

Diagrama Simples (/,\ loopbacks da esquerda para a direita):

            Microphone      ---
                               \                   
            Virtual1.mon    ------  Virtual1    >   Skype
                               /  
    VLC   > Virtual2.mon    ------  Virtual2
                               \
    Skype > AnalogSt.mon    ------  AnalogSt    >   Headset

Para voltar (uso normal), veja Pulseaudio loopback descarrega dispositivos de saída de áudio

  • Verifique o ID do módulo:

    pactl list short modules
    
  • Descarregar um único módulo (ou um por um)

    pactl unload-module id
    
  • Ou (recarregue com os módulos padrão):

    pulseaudio -k
    

Notas:

  • Eu uso pia id (Por exemplo: 1) mas se você quiser fazer um script, é melhor usar nomes. (Eu evitei isso aqui porque eles são longos).

  • Como faço para alternar para outro coletor de saída de áudio no XFCE? contém um bom script para obter stream id do nome para ser usado com move-sink-input e move-source-output.

  • Eu tenho usado latency_msec=1 o que pode levar a um alto uso da CPU. Em conversas de áudio, você pode não se importar com o atraso entre a música e o microfone. Você pode removê-lo ou aumentá-lo. Mas para gravar mix, você pode procurar por um atraso muito pequeno entre música e microfone.

    Como eu testei, o atraso é de quase meio a um segundo.

  • Eu acho que algumas vezes é difícil descobrir o que está acontecendo com as ferramentas do Jack. Ficará claro com o mapa gráfico:

enter image description here


4
2018-02-15 00:44



Muito obrigado pela resposta. Mas estou tendo problemas: Primeiro de tudo no pavucontrol ele só diz "Monitor of Null Output". Em segundo lugar, as pessoas com quem estou conversando reclamam de ouvir seu próprio eco. Eu poderia colocar na lista negra a saída do skype para o redirecionamento de som? - GEO
Ok, desculpe, eu sinto falta disso, eu atualizei a resposta, agora ele mostra nomes de coletores como descrição no pavucontrol. pulseaudio -k para redefinir todas as alterações e começar de novo. deve ser fácil agora - user.dz
Por padrão, ele faz o loop do microhpone, mas você pode testá-lo.pactl load-module module-loopback source=2 latency_msec=1 sink=1, você deve ouvir o microfone no fone de ouvido. então pactl unload-module 30 (30 é o id mostrado quando você carrega o módulo. - user.dz
Sneethser: Desculpe por não ser claro: Obrigado tudo funciona, como você instruiu, mas Como eu poderia substituir os passos no pavucontrol com linha de comando? - GEO
Sneethsher: Nevermind, eu adicionei pactl unload-module module-loopback - GEO