Transmitindo audio do desktop pelo Discord no Linux! (Pelo PipeWire)

O Discord é uma rede social muito popular nos últimos tempos. Ele surgiu lá em 2015 com o intuito de dar uma experiência consideravelmente superior ao que tinhamos no Skype e TeamSpeak, com o foco no público Gamer, embora tenha aberto ao público geral nos últimos anos. O client para desktops se trata de uma aplicação em Electron, engine essa baseada no Chromium. Por se tratar de um client em Electron, isso possibilitou que o client tivesse versões nativas para as principais plataformas, uma delas sendo o Linux por meio de pacotes .deb e .tar.gz, além de uma distribuição oficial em Flatpak.

O Discord no Linux é incompleto!

A versão de Linux não conta com várias das funções de sua versão para Windows, uma delas sendo o compartilhamento de áudio do desktop em chamadas de vídeo. Outra delas é a falta de suporte ao PipeWire para partilhamento de tela em sessões Wayland, necessitando usar a versão Web do Discord para partilhamento de tela em Wayland atravéz do PipeWire.

Mas há uma maneira!

Mas para tudo existe uma solução! O mesmo PipeWire que é usado para partilhamento de tela na versão Web do Discord, também pode ser usado como abstração para aplicações que usam a API de áudio JACK, além do tradicional PulseAudio. Com isso em mente, é possível direcionar o áudio de aplicações em específico para a entrada de microfone do Discord, assim, seus amigos no Discord podem aproveitar não somente de sua live no Discord, como também do áudio. E é bem simples de fazer isso:

  1. Primeiro garanta que o pacote pipewire-jack ou pipewire-libjack esteja instalado em sua distro. Veja a forma de instalação de pacotes para a sua distro em específico para saber como fazer isso;

  2. Instale alguma interface JACK. Para esse tutorial, vou usar o Catia. Ele pode ser instalado direto dos repositórios de sua distribuição ou do site do KX Studio como parte do bundle Cadence;

  3. Execute o comando pw-jack no Terminal. O comando só precisa ser executado uma vez, então é possível definí-lo para auto execução durante o login, caso saiba como fazê-lo;

  4. Entre em uma chamada de voz no Discord e abra a aplicação Catia. Note que a chamada de voz do Discord está identificado como WEBRTC Voice Engine no momento que o Catia é aberto:

O que interessa para nós aqui são os input_FL e input_FR, que apontam para o lado Esquerdo e Direito do som Stereo respectivamente.

  1. No meu exemplo, vou direcionar uma música que está tocando no VLC, mas isso pode ser feito com qualquer aplicação. Note que o Catia já identificou o VLC:

Agora basta arrastar o output_FL e output_FR do VLC media player para o input_FL e input_FR, respectivamente, do WEBRTC VoiceEngine.

E voilá! Agora está transmitindo o áudio de uma aplicação do seu computador para sua chamada de voz no Discord.

Para melhor qualidade de áudio, é recomendável desativar as opções de cancelamento de Echo e ruído nas configurações de áudio do Discord. E agora é só aproveitar!

10 curtidas

No pulseaudio é facinho de fazer também, eu só crio 6 módulos: 2 null-sinks, 3 loopbacks e um remap-source.

Nisso, eu jogo o áudio para a null-sink (1) criada, que pelo loopback redireciona o áudio do programa para outra null-sink (2) e pra minha saída de fone. Meu microfone também é redirecionado por loopback para a null-sink (2). A null-sink (2) é a master do remap-source, e quando eu quero transmitir áudio de qualquer coisa, eu jogo o áudio pra null-sink (1), e coloco o microfone da remap-source no Discord :slight_smile:

Aqui o esquema do que eu tou falando:

PS: “Porque eu não pego o áudio do app direto na null sink e só redireciono pro auto falante sem a null sink (1)?”

Não tem como, pulseaudio não funciona assim, a não ser que eu faça um script pra isso :frowning:

Aliás, vocês sabiam que seria possível sim capturar o áudio dos aplicativos pelo pulseaudio? O problema é que ninguém quer se aprofundar para fazer isso, muito menos o pessoal do Chromium. O pulseaudio tem essa capacidade, senão o Soundux não funcionaria como funciona hoje no Linux (isso pode ser tema de outro post). então pedir compartilhamento de áudio no Discord ao compartilhar tela não é culpa do Discord, é culpa do pessoal do Chromium (corrijam se estiver errado).

Grato, bom te rever em algum lugar na net, @ryu_ketsueki !

Inky

1 curtida

A idéia do meu tópico era mostrar como fazer isso de forma gráfica, sem depender de scripts para o pulseaudio. Outra coisa é que o script para o pulseaudio não funciona em sessão Wayland por necessitar do PipeWire, mesmo que ele tenha abstração para aplicações que usem o pulseaudio. Acredite, as sinks e loopbacks pararam de funcionar. Então esse meu tutorial é um futureproof para essa finalidade sem precisar passar scripts.

2 curtidas

excelente trabalho. parabéns.

Também é válido, mas pelo que um amigo com mania de coisas novas (e não minto, o maluco tem essa qualidade pessoal exageradamente boa) testou o Wayland e o pipewire, os loopbacks parecem não funcionar muito bem…

Você deve estar usando faz um tempinho, já consertaram? Ou não aconteceu contigo?

Boa! fiz minha versão do mesmo tutorial, porém usando o Helvum:

Acontece que Pulseaudio não é executado nativamente quando PipeWire está ativo. As aplicações que parecem interagir com Pulse, na verdade estão interagindo com o PipeWire atravéz de compatibilidade, então é possível que esses comandos do pulse para criar as sinks e loopbacks, vão ter de ser reescritos para PipeWire em específico ou usar o JACK com as GUI, o que é muito mais fácil para o usuário final do que ter de aprender comandos do pulse. Eu não vejo isso sendo resolvido tão cedo, já que JACK é preferível para o lado profissional e PipeWire está recebendo mais atenção por ser mais seguro e resolver não só áudio em Wayland mas partilhamento de vídeo também. O Fedora é a maior influência em trazer o Wayland, PipeWire e Flatpaks para as distros ultimamente então isso só tende a melhorar com o tempo.

Migrei para a sessão Wayland do KDE Plasma já faz um bom tempo e, honestamente, não sinto falta de nada da sessão X11. Só algumas coisas cosméticas mas o Plasma já é muito bonito do jeito que os devs entregam ele. Falta só a revitalização dos ícones para ficar perfeito e dar trabalho para o GNOME (hehe).

2 curtidas

Show de bola! Eu não manjo muito de JACK e só agora fui conhecer um pouco mais o PipeWire, então eu fui seguindo o tutorial que eu vi, que usava o Catia. Legal que tem como usar o PipeWire diretamente sem passar pelo JACK

1 curtida

@ryu_ketsueki do céuuuuuuuu, você e o povo aqui não vão acreditar, mas o Discord faz uma baita sacanagem de não atualizar o electron. Não só dá a oportunidade de compartilhar áudio com janela (via milagrosos xdg portals), mas tbm manda pro inferno todas as vulnerabilidades do Electron velho.

Fonte: A Letter to Discord for not Supporting the Linux Desktop | TheEvilSkeleton

PS: http://tauri.studio/ ferramenta nova, leve, igualzinha quase ao electron, merece uma atenção, né Discord? Quando ficar melhor, acho q funcionará muito melhor.

1 curtida