terça-feira, 11 de novembro de 2008

Interconectando Aplicativos de Áudio - JACK Audio Connection Kit

JACK (JACK Audio Connection Kit) é um servidor de som que proporciona conexão de baixa latência entre aplicações "jackeadas", tanto para áudio quanto para MIDI. Licenciada sobre a GNU GPL, é portanto uma aplicação de código aberto e gratuita.

JACK roda sobre ALSA, PortAudio, CoreAudio (MacOSX), FreeBoB, FFADO como servidor de som de baixo nível. Na sua versão atual roda sobre Linux, FreeBSD e MacOSX. Existe uma versão experimental, mas funcional, rodando em Windows (JACKDMP), utilizando o driver ASIO para acesso à interface de áudio.


Aplicações


A interconexão entre programas de audio e MIDI é a principal função do JACK. Com ele é possível, por exemplo, conectar a saída de áudio de um software a entrada de outros ou vários simultaneamente.


Existem vários programas (especialmente para Linux e MacOSX) que possuem suporte nativo para JACK. Mas algumas aplicações podem ser "jackeadas" por meio de configurações variadas.


Exemplos de Instalação
Demonstrarei abaixo exemplos de instalação, configuração e uso nos sistemas operacionais MacOSX e Windows (2000/XP ou superior).

MacOSX


Componentes do JACK no MacOSX:


• O servidor JACK;


• O Roteador JACK "JackRouter": o drive que permite que qualquer aplicação que use o driver CoreAudio se torne um cliente JACK;


• Os plug-ins VST/AU;


• A aplicacao JACKPilot, que permite o controle do servidor JACK e a configuracao das interconexoes entre as aplicacaoes.


Instalando

A instalação no MacOSX é bem simples. Depois de descompactar o pacote, clique 2 vezes no instalador. A seguinte tela aprecerá:

Basta seguir os passos indicados pelo instalador. Depois, abra o JackPilot:



O JackPilot é a central de controle do JACK. Nele são feitas as configurações da interface de áudio utilizadas e dos roteamentos das aplicações. Clicando no botao "Start", o JACK inicia sua operação.


No menu "Preferences" temos acesso a configuração a seguir:



Nesse caso, estamos usando o CoreAudio como driver, e o dispositivo "UCA200 Agregate" como interface de áudio. Lembrando que os usuários de interface de áudio rodando a versão Intel do MacOSX devem configurar a interface de áudio como "agregada" na configuração de "Audio MIDI Setup", como demonstrado nas duas telas abaixo:


Depois de configurado, o JACK está pronto para ser usado.


Ao clicar no botão "Routing", temos acesso à interface de conexão de aplicações abaixo:


Como exemplo, vamos realizar a interligação de duas aplicações diferentes com o JACK. No exemplo, usaremos o software GuitarRig2 (modelador virtual de amplificadores de guitarra) e o host de plug-ins VST pMix.

No GuitarRig2, basta escolher o "JackRouter" como dispositivo de saída (Output Device) do aplicativo.


E no pMix, escolhemos o "CoreAudio JackRouter" como Driver e o "JackRouter" como "Input Device". A configuração varia de software para software, mas é feita basicamente dessa forma.

Depois de configuradas as aplicações, elas aparecem na lista do JackRouter. O gestor de conexões é dividido em 3 partes: na primeira vemos as SAÍDAS dos aplicativos, na aba do meio estao as ENTRADAS dos aplicativos e na 3a aba vemos a conexao para cada uma das entradas ou saídas selecionadas. Todos os programas possuem entradas e saidas selecionáveis e essa interconexão FLEXÍVEL entre essas entradas e saidas é a característica principal do JACK.

As portas nomeadas como "System" ficam sempre presentes no gerenciador de conexão. Elas representam as entradas e saídas físicas da interface de áudio. Para que o áudio saia pela placa de som, é preciso que sempre tenhamos um aplicatico com suas "Send Ports" conectadas ao "system-playback_1" ou "system-playback_2. Lembrando que a quantidade de dispositivos que aparecem na aba system depende da quantidade de saídas da interface de áudio utilizada.


Para fazer uma conexão, basta selecionar com um clique único um dispositivo na lista "Send Ports" e efetuar um clique duplo na porta desesaja na lista "Receive Ports. As conexões ativas ficam marcadas em vermelho.


Lembrando que essas configurações de interconexão pode ser salvas para uso posterior.


Uma dica importante: no MacOSX é possível que todas os aplicativos de áudio do sistema sejam interconectados via JACK, até mesmo o iTunes. Para isso basta definir o JACK como dispositivo de áudio padrão do sistema, ao invés do CoreAudio, na configuração "Audio MIDI Setup" do menu "Utilities".


O Jack disponibiliza ainda o plugin VST/AU "Jack-Insert". Com esse plug-in é possivel fazer conexões interna entre programas que utilizem plug-ins VST. Por exemplo, podemos mandar a saída de um canal de áudio de um programa para outro, que realizaria um tipo de processamento, e retornar esse áudio processado para o primeiro programa.

No exemplo abaixo, inserimos o plugin "Jack-Insert" dentro de um canal do software pMix. Veja que agora as portas "VSTsend1" e VSTreturn1" aparacem na listagem de entradas e saídas do gerenciador de conexão.




Windows


O uso de JACK no ambiente Windows ainda é experimental e foi adcionado por meio do projeto JACKDMP, que é uma versao do JACK otimizada para uso em computadores multiprocessados (como os "Dual Core" da Intel ou os X2 da AMD, ou máquinas com dois processadores individuais, como em servidores), mas que tambem roda em maquinas uniprocessadas.


O painel de controle Qjackctl também foi portado para Windows.


Na versão para Windows, o JACK roda atrelado a interface ASIO disponível no sistema. Para quem não possui interface de som com driver ASIO uma dica é utilizar o ASIO4All que habilita essa interface de baixa latência para qualquer placa de som que possua drive do tipo WDM (o driver padrão de audio para interfaces de som rodando sobre Windows XP/2000 ou superior), e que foi comentada nesse post anterior. Funciona até mesmo em placas on-board de notebooks e desktops.


Instalação


A última versão dos pacotes de instalação pode ser encontrada em www.grame.fr/~letz/jackdmp.html


Descompacte o arquivo Zip e crie uma pasta na raiz do sistema (Ex C:\jack), copiando para essa pasta o conteúdo da pasta "bin\windows" do arquivo descompactado.


Baixe a versão para Windows do painel de controle Qjackctl em www.grame.fr/~letz/qjackctl_CVS.zip


Descompacte o arquivo qjackctl_CVS.zip


- Copie os arquivos qjackctl.exe e todos os arquivos do tipo "dll" para a mesma pasta na qual o jackdmp foi instalado (C:\jack como sugerido anteriormente).


- Execute o aplicativo qjackctl.exe e configure da seguinte maneira, clicando com o botão direito do mouse no icone presente na barra de tarefa do Windows e escolhendo a opcão "Setup..."





1 - Na aba "Settings", use a opção "jackdmp -S" no "Server Path". ALERTA: o parâmetro "-S" (maiúsculo) é obrigatório no Windows


2 - Ainda na aba "Settings" use "portaudio" no ítem "Driver"





3 - Na aba "Misc", marque a opção "Start JACK audio server at application startup", como demonstrado na figura abaixo:





- Com o botao direito do mouse no icone do Qjackctl, escolha a opcão "Quit" para finalizar a aplicacao e a inicie novamente.



Iniciar o servidor JACK utilizando uma outra interface de áudio instalada na máquina (como uma interface com o driver ASIO) ainda não pode ser feito diretamente pela interface qjackctl.


A inicialização do servidor deve ser feita por meio de um terminal como demonstrado no exemplo abaixo:


- Acesse o menu Iniciar do Windows e localize a opção "Executar...". Uma caixa de diálogo aparecera. Digite "cmd" e depois clique em "OK" para abrir o terminal do Windows;


- No terminal, digitando o comando "jackdmp -d portaudio -l" as interfaces de áudio disponíveis na máquina são apresentadas. No exemplo abaixo foi localizada a interface "ASIO4ALL v2". A palavra que denomina a interface varia de máquina pra máquina, dependendo da interface de áudio utilizada. Essa interface será então utilizada pelo servidor JACK.










- Selecione com o mouse o nome da interface (como no exemplo acima) e com o botão direito do mouse sobre o terminal escolha a opção "Copiar";


- Então inicie o servidor JACK nesse mesmo terminal, usando como parâmetro de entrada do comando o nome da interface copiada no exemplo acima. Ex:


jackdmp -R -S -d portaudio -d "ASIO4ALL v2"


- NAO FECHE A JANELA DO TERMINAL. Deixe esse terminal sempre rodando enquanto o JACK for exuecutado.





- Inicie novamente a aplicação qjackctl.exe


É possível criar um arquivo de inicialização automática do servidor JACK, eliminando a necessidade de se abrir um terminal para isso. Crie um arquivo "IniciaJACKASIO.bat". Para isso basta clicar com o botão direito do mouse na pasta do JACK instalada (descrito no processo de configuração no início dessa seção) e escolha a opção "Novo" e em seguir "Documento de texto". Renomeie esse arquivo para "inicieJACK.bat". Abra o aquivo e cole o seguinte conteúdo:


cd C:\jack

jackdmp -R -S -d portaudio -d "ASIO4ALL v2"

Lembrando de trocar o texto "ASIO4ALL v2" pelo texto da sua interface de áudio, como demonstrado anteriormente, e sempre entre aspas. Salve o arquivo e feche o editor de texto.


Esse arquivo pode ser rodado diretamente, bastando apenas um clique duplo sobre o mesmo. Essa ação inicia o servidor JACK.


Feche e abra novamente aplicacão qjackctl.exe, caso ela esteja rodando. Vamos passar agora para as configurações.


Configurando





1 - Acessa o painel de conexões do JACK. A imagem abaixo mostra a aparência do painel assim que o JACK e o qjackctl.exe sao iniciados. Veja que não existe nenhuma conexao entre aplicativos realizada. Apenas estão visíveis as entradas e saídas da interface de áudio.




2 - Acessa o Patchbay, aonde configurações de conexões do JACK podem ser salvas para facilitar o uso de múltiplas situações.



3 - Acesso ao menu de configurações do JACK




4 - Inicia e para o servidor JACK. Não é utilizado em caso de interfaces ASIO.


Exemplo:


Nesse exemplo foi executado o arquivo "inicieJACK.bat" criado anterirmente. O terminal abaixo aparecerá. Ele demonstra que o servidor JACK está funcionando.


Rode então o qjackctl.exe e acesse o painel de conexões do JACK.





Nesse exemplo utilizei o Ableton Live como um dos aplicativos a ser interconectados via JACK. Na configuração do aplicativo deve-se escolher o "JackRouter" como interface de áudio do mesmo. Lembrando que essa configuração deve ser feita depois que o servidor JACK estiver rodando.





Utilizaremos o Usine como segunda aplicação a ser interconectada pelo JACK. Devemos configurá-lo da mesma forma que fizemos com o Ableton Live, escolhendo o JackRouter como dispositivo de áudio, como na imagem abaixo:





Depois que os dois aplicativos foram configurados para utilizarem o JackAudio como interface de áudio, ambos aparecem na lista de conexões do painel JACK.


Nesse exemplo, demonstrado pela figura abaixo, conectei a entrada de áudio da interface à entrada de áudio do Usine. Depois conectei a saída de áudio do Usine à entrada de áudio do Ableton Live. Então conectei a saída do Live à saida da interface de áudio.


A janela de configuração é dividida em dois lados. No lado esquerdo estão as "Portas de Saída" e na direita as "Portas de Entrada". Para realizar uma conexão, basta selecionar um dos dispositivos na lista da esquerda (com um clique único do mouse) e um dos dispotitivos na lista da direita e clicar no botão "Connect" na parte inferior da interface.


Para desconectar, basta selecionar um dos dispositivos em qualquer dos lados e clicar no botão "Disconnect".


A linha do sinal de áudio ficou assim:


Entrada da interface -> Usine -> Ableton Live -> Saída da interface


Qualquer áudio gerado no Usine vai direto para a entrada do Live, aonde pode ser manipulado antes de ir para a saída da interface de áudio.


A cadeia de sinal pode ter uma extensão bem maior do que a demonstrada aqui, bastando adcionar mais programas e interconectá-los via o painel acima.


Referências:

http://en.wikipedia.org/wiki/JACK_Audio_Connection_Kit
http://jackaudio.org/
http://www.grame.fr/~letz/jackdmp.html