domingo, 26 de setembro de 2021

Gravando Áudio Facilmente no PCLinuxOS



Capturar áudio e vídeo no PClinuxOS (e em qualquer Linux, diga-se de passagem) pode ser uma tarefa frustrante. Ou as aplicações não funcionam direito com o software de captura de áudio / vídeo, ou, o servidor de som não é compatível com o aplicativo de captura (ou vice-versa, um aplicativo de captura que requer um servidor de som que não é o padrão da instalação).
Aplicações em Java, por exemplo, acessam o DSP diretamente, e, não são tão flexíveis, quanto ao roteamento do áudio, como aplicações nativas do PCLinuxOS.

Alsa é mais poderoso do que parece

Ocorre que o sistema de som do Linux é muito mais poderoso do que aparenta, a uma primeira vista.
E, há mais coisas abaixo da superfície do que a gente pensa. Alsa é muito vasto, completo e incrivelmente flexível.

O modulo snd-aloop, magia invisível, disponível no kernel Linux

Da definição, no site Matrix Alsa: Module-aloop - Este driver fornece um par de dispositivos conectados em cruz, formando uma placa de som loopback full-duplex. Cada dispositivo pode ter até 8 subgrupos, o que significa que você pode ter até 8 conexões de loopback independentes. A primeira aplicação abrindo um dispositivo, forçará a segunda aplicação, tentando abrir o outro dispositivo, a usar seus parâmetros estabelecidos. Portanto, nenhuma conversão de taxa, formato ou número de canal é feita.
Em outras palavras, o módulo snd-aloop cria uma placa de som virtual, com dois dispositivos de áudio, Loopback 1 e Loopback 2.
Esses dois dispositivos virtuais, um deles é um alto-falante - um dispositivo para o qual você pode escrever - e o outro é um microfone - um dispositivo do qual você pode ler - e ambos estão conectados, para que o que você escrever no dispositivo do alto-falante possa ser lido a partir do dispositivo do microfone. Podemos chamar isto de um par de microfones e alto-falantes conectados. A ALSA nos fornece 8 pares desse tipo, com o driver do kernel snd-aloop.

Por que o módulo snd-aloop é tão importante ?

Bem, eu precisei de uma solução, para gravar o áudio de um bom e velho IBM Thinkpad, que não possui muitas saídas de áudio. Eu estava arrancando meus cabelos, como capturaria o som desse notebook ? E, procurando soluções, encontrei o módulo snd-aloop.
Realmente funciona, pois eu já testei e confirmei seus recursos. Suas vantagens podem ser listadas abaixo:
    • Independente do servidor de som
    • Alsa puro e presente em todos os kernels Linux
    • Consome muito menos recursos da máquina, do que qualquer outra solução para capturar áudio (Jack, pulseaudio, etc).

Desvantagens ? Não vi(ouvi) nenhuma…

Como fazer então ?

Basicamente, em linhas simples, nós vamos inserir o módulo snd-aloop e criar  um arquivo asoundrc que vai rotear uma cópia do áudio para a placa de som virtual de captura, e, depois, vamos indicar para o programa de captura “ouvir” o que vier da placa de som virtual de captura. Ok ?

Então, mãos à obra!

1º Passo, como root, digitar modprobe snd_aloop pcm_substreams=1, como na figura abaixo



2º Passo: Agora, com o driver da placa de som virtual inserido no kernel, testamos para verificar se temos mais uma placa de som no sistema, com cat /proc /asound /cards, como na figura abaixo


3º Passo: Agora, vamos criar um aquivo .asoundrc com o conteúdo abaixo
--------------------------------------------------------------------------------------
pcm.!default {
  type asym
  playback.pcm "LoopAndReal"
  #capture.pcm "looprec"
  capture.pcm "hw:0,0"
}

pcm.looprec {
    type hw
    card "Loopback"
    device 1
    subdevice 0
}

pcm.LoopAndReal {
  type plug
  slave.pcm mdev
  route_policy "duplicate"
}

pcm.mdev {
  type multi
  slaves.a.pcm pcm.MixReale
  slaves.a.channels 2
  slaves.b.pcm pcm.MixLoopback
  slaves.b.channels 2
  bindings.0.slave a
  bindings.0.channel 0
  bindings.1.slave a
  bindings.1.channel 1
  bindings.2.slave b
  bindings.2.channel 0
  bindings.3.slave b
  bindings.3.channel 1
}

pcm.MixReale {
  type dmix
  ipc_key 1024
  slave {
    pcm "hw:0,0"
    rate 48000
    #rate 44100
    periods 128
    period_time 0
    period_size 1024 # must be power of 2
    buffer_size 8192
  }
}

pcm.MixLoopback {
  type dmix
  ipc_key 1025
  slave {
    pcm "hw:Loopback,0,0"
    rate 48000
    #rate 44100
    periods 128
    period_time 0
    period_size 1024 # must be power of 2
    buffer_size 8192
  }
}
--------------------------------------------------------------------------------------
As linhas pontilhadas são apenas para separar o conteúdo do arquivo .asoundrc do resto do texto.

Bem, já temos todo o lado do sistema operacional pronto, agora, vamos configurar o software de captura. No caso, vou capturar um programa em Java, no PCLinuxOS, com o Simple Screen Recorder (mas, o conceito vale para qualquer software de captura de tela / áudio / screen recorder).

Configurando o software de captura

1º Abra o SSR (ou o seu software de captura preferido, com exceção do VokoScreenNG, que não permite o uso do server Alsa sozinho)

2º Na seção Áudio, clique em grave o áudio, Backend Alsa e fonte: ‎[hw:1,1] Loopback: Loopback PCM‎
Lembre-se: O dispositivo de captura será sempre o segundo dispositivo da placa de som virtual snd-aloop, Ok ?
Configure como a figura abaixo



E, prossiga nas configurações do software de captura. No caso do SSR, depois de todo configurado, é só clicar em começar a gravação e gravar a tela do seu computador / notebook, com áudio e vídeo, sem complicações.

Quando você tiver terminado, remova a placa snd-aloop com o comando (como root) modprobe -r  snd_aloop

E renomeie o .asoundrc, para asoundrc.bak, por exemplo, para que não interfira no resto do áudio do computador.

Ok ? Espero que tenham gostado dessa dica simples, mas, muito poderosa, para conseguir gravações muito boas, com qualquer hardware de som.
Um grande abraço e até um próximo artigo.

Se quiser ler mais, estes artigos me ajudaram a escrever a dica:
https://www.alsa-project.org/main/index.php/Matrix:Module-aloop
https://noisybox.net/blog/2016/01/alsa_recording_of_device_output
https://lichtmetzger.de/en/2014/11/29/simplescreenrecorder-record-audio-with-alsa-only-no-pulseaudio-no-jack/







quarta-feira, 22 de setembro de 2021