segunda-feira, 12 de janeiro de 2009

Utilizando JACK no Processing


Introdução

Processing é um ambiente de desenvolvimento e uma linguagem de programação de aplicações visuais e interativas. É gratuita e disponível para Linux, MacOSX e Windows. 

Uma das possibilidades do Processing é a utilização de áudio como dados de entrada para as aplicações visuais criadas nele. 

Minim


Minim é a principal biblioteca de audio utilizada no ambiente Processing, permitindo acesso aos dispositivos de audio do computador e a manupulação de arquivos de áudio. Já vem pré-instalada nas distribuições mais recentes do Processing (a partir da versão 1.0). Exemplos de utilização podem ser obtidos em: http://code.compartmental.net/tools/minim/

Alguns exemplos de utilização estão presentes no Processing, acessando o menu "File->Exemples->Libraries->Minim(Sound)"


JJack

JJack é um driver de audio para a plataforma Java compatível com o servidor de audio JACK. Com ele é possivel desenvolver programas Java que se comunicam utilizando o JACK (que foi apresentado nesse post anterior)


O que se propõe nesse artigo é a utilização da biblioteca Minim em conjunto com o JJack, permitindo que aplicações que acessem audio em Processing possam se comunicar com o servidor de audio JACK, permitindo uma maior flexibilidade na utilização do Processing como ferramenta que responde a eventos de audio.
Com essa configuração é possível, por exemplo, conectar a entrada de audio do Processing (via Minim) a outros programas rodando no mesmo computador, pois o Minim somente permite o acesso a entrada de linha da interface de audio do computador.

Como a biblioteca JJack está disponível apenas em Linux e MacOSX, o artigo apresentará inicialmente sua utilização no Processing deste sistema operacional.

Instalação - MacOSX

Baixe o pacote do JJack em 
http://download.berlios.de/jjack/jjack-0.3.tar.gz . O pacote contem o arquivo lib/jjack.jar que será utilizado no Processing.

Descompacte o conteúdo do arquivo (utilizando o StuffIt Expander no Mac).

Dentro da pasta criada com o processo de descompactação existe uma pasta "lib".

Para instalação no MacOSX, acesse a pasta "macos". Dentro dessa pasta está localizado o arquivo "libjjack.jnilib". Acessando o Terminal (em Applications->Utilities->Terminal no Finder), acesse a pasta do JJack com o seguinte comando:

cd ~/Desktop/jjack-0.3/lib/macos/

caso o pacote do JJack tenha sido descompactado no Desktop, sobre a pasta "jjack-0.3". Caso o diretório e a pasta sejam diferentes, basta modificar o caminho.

Ainda no Terminal, rode o seguinte comando:

sudo cp libjjack.jnilib  /usr/lib/java/

A senha do usuário será solicitada, pois essa operação copia um arquivo novo , o "libjjack.jnilib" para a pasta de sistema "/usr/lib/java/", que requer autenticação de usuário com permissões de Administrador.

A biblioteca já está instalada. Para a sua utilização agora devemos modificar o projeto do Processing que se deseja usar o JACK, com o procedimento abaixo:

Exemplo

Ao se iniciar o Processing uma área de trabalho em branco (denominada de "Sketch") será aberta.

Para esse exemplo, foi utilizado a demonstração do Minim chamada de "GetLineIn" e acessível pelo menu "File->Exemples->Libraries->Minim(Sound)". Esse exemplo simplesmente captura o audio que entra pela porta "LineIn" da interface de audio presente e mostra um gráfico com a forma de onda do audio que está sendo recebido. mas é suficiente para testarmos a utilização do JJack no Processing.

O ambiente do Processing abrirá o exemplo em uma nova janela. Selecione todos o código desse exemplo e cole no Sketch em branco aberto ao se iniciar o Processing. Esse procedimento é necessário pois o Processing não permite a edição do código dos exemplos embutidos na sua instalação.

A janela abaixo mostra o código do exemplo "GetLineIn" colado em um novo Sketch. Para a utilização do JJack é necessário a adição da seguinte linha ao campo de declarações de bibliotecas:

import de.gulden.framework.jjack.*;

Essa linha instrue o Processing da utilização do JJack.
Em seguida é preciso importar o pacote da biblioteca para o projeto, segundo a figura abaixo:
Acesse a pasta na qual o JJack foi descompactado e inclua o arquivo "jjack.jar" ao projeto do Processing.
Após a importação, rode o projeto, clicando no botao "Play" abaixo do menu "File". A janela abaixo se abrirá, mostrando a área de analise de entrada de audio, que corresponde ao código do exemplo "GetLineIn". As duas linhas representam os canais L e R da entrada, que no caso não apresenta nenhum audio.
Em seguida inicie o JACK rondando a aplicação JACKPilot (como demonstrado nesse post). A janela abaixo será aberta. Nesse exemplo estamos utilizando o programa GuitarRig2 como fonte do audio que será conectado ao Processing via o JJack.
Pare o projeto do Processing (apertando o botão "Stop" abaixo do menu "File") e inicie novamente, apertando o "Play" ao lado.
Veja que agora o JJack aparece na lista de interconexões do JACKPilot. Ou seja, agora podemos conectar o GuitarRig2 (ou qualquer outra aplicação que gere audio) ao Processing via JJack. A forma de conexão também está descrita no post sobre o JACK.
Depois que a interconexão foi feita no painel de controle do JACK, vamos iniciar a reprodução do audio no GuitarRig2 e observar se o audio chega ao Processing. A janela abaixo mostra a execução de um MP3.
E a janela abaixo mostra que o Processing está recebendo o audio, pois a saída gráfica do exemplo "GetLineIn" está desenhando a forma de onda do audio vindo em MP3 vindo do GuitarRig2!
Lembrando que qualquer programa que gere audio pode ser conectado ao Processing via JJack. Esse truque transforma o Processing em um aplicativo totalmente compatível com o JACK e flexibiliza a utilização do Processing no processamento de audio.
Um outro truque que pode ser utilizado é o recebimento de audio pelo Processing de outros computadores conectados em rede via o plugin Wormhole2 (analisado nesse post) em conjunto do JACK.

Referências:

0 comentários: