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

segunda-feira, 2 de agosto de 2021

Streamando do PCLinuxOS para sua Smart TV




Assistir DVD’s hoje em dia se tornou um exercício de paciência. Ou as novas TV’s smart já não têm mais as entradas de vídeo composto, ou os aparelhos de DVD estão estragados, e, muitas vezes, nem compensa mandar consertar. Mas, para quem tem uma coleção de DVD’s de tamanho razoável (como eu tenho), não vale a pena se desfazer deles, afinal, são como livros, peças físicas de conteúdo artístico que pertencem a você. Sim, ainda vou escrever sobre a guerra contra as mídias físicas, mas, nesse meio tempo, vou dar uma dica de como você pode assistir toda a sua coleção de DVD’s na sua TV Smart, com a ajuda do PCLinuxOS.

Vamos então aos ingredientes


Para fazer essa dica funcionar,  você vai precisar dos seguintes programas:
    • Darkhttpd
    • Handbrake
 

No lado do PCLinuxOS. No lado da TV Smart, ela deve ser capaz de instalar um navegador Web derivado do Firefox.

 


Eu queria assistir um DVD na minha TV Smart…



Sim, minha necessidade é que me moveu para conseguir uma solução para esse problema.
Eu já tinha tentado o PS3 media server, o Universal Media Server (UMS), sem sucesso.
Então, me lembrei que o Firefox e seus derivados podem executar arquivos de mídia, de um servidor web sem fazer o download do arquivo de mídia. Esse detalhe se tornou a solução para mim.



Carreguei o DVD no meu PC de mesa com o PCLinuxOS


Agora, depois de ter carregado o DVD no seu computador, o próximo passo é executar o Handbrake.


Handbrake está na seção Video do menu de programas


Ao executar o Handbrake, escolha Abrir fonte, navegue até o drive de DVD e indique o disco de DVD como a fonte que será transcodificada.



Depois de abrir o DVD, o programa fará uma análise da estrutura do DVD, e, mostrará um preview do disco a ser ripado 



A partir daí, o funcionamento é semi-automático. Eu apenas escolhi, na ABA vídeo, que os FPS seriam os mesmos da fonte, e, na aba de legendas, eu escolhi sobrepor as legendas no vídeo resultante (cada caso será diferente, por causa da variedade de DVD’s existentes). As trilhas de áudio poderão ser escolhidas na aba áudio, e, assim por diante.
O Formato do vídeo deve ser ajustado para MP4, para garantir a melhor compatibilidade com o navegador Web.



E, depois de convertido, o arquivo de vídeo MP4 ficará na pasta Vídeos.
Bem, a primeira parte está pronta. Agora, vamos iniciar o servidor Web Darkhttpd.

Segunda parte

Agora, como root, digite: darkhttpd /home/your_user/Videos
E, o servidor Web vai começar a funcionar


Darkhttpd funcionando


Agora, vamos na TV Smart, tocar o arquivo de vídeo MP4 convertido.

Eu instalei nessa TV o IceCat Mobile, o derivado livre do Firefox, feito pela FSF.
E, depois de abrir o IceCat e apontar para o endereço do meu computador rodando o servidor WEB, a tela fica assim:



E, clicando no arquivo de vídeo, o resultado é o que queríamos: tocar na TV smart um arquivo de vídeo, originário de um DVD.

 Com essa dica, eu consegui tocar arquivos de DVD’s convertidos sem problemas, e, como não há decodificação envolvida, já que o Darkhttpd só envia o arquivo pela rede, o limite será a sua largura de banda, para poder executar arquivos de resoluções maiores, como Blu Rays e até outras mídias. Eu não testei com mais de uma TV ao mesmo tempo, mas, em teoria seria possível. E, com um servidor Web, você pode streamar até para celulares, tablets, e outros dispositivos móveis.
Ok ? Espero que tenham gostado dessa dica rápida, e, que vocês possam assistir suas coleções de DVD’s sem problemas, em suas TV’s smart pela casa. 

 

E aqui, um vídeo demonstrando todo o processo, passo a passo: