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/