quinta-feira, 25 de fevereiro de 2010

MIDI e OSC: Interconexão de Sistemas de Controle de Áudio - Parte 2

Espalhando sinais MIDI

Roteadores Virtuais

Uma necessidade comum para quem trabalha com áudio no computador é a utilização do MIDI para controle de aplicativos. Geralmente utiliza-se teclados controladores MIDI ligados ao computador via USB ou DIN-5. Mas as vezes precisamos trocar dados MIDI ENTRE aplicativos de áudio. Para esses casos, entram em acao os "Roteadores Virtuais".

MIDI Yoke eh um pequeno aplicativo gratuito para Windows que permite o envio e recebimento de sinais MIDI entre aplicações distintas. Ao ser instado ele cria 8 portas virtuais de entrada e saída no sistema operacional, acessíveis como um dispositivo MIDI real pelas aplicações.

Como exemplo: para enviar dados MIDI do programa A para a programa B, basta abrir com Output no programa A o MIDI Yoke 1 e no programa B abrir como input o MIDI Yoke 1. Para envio de dados no sentido contrario, basta inverter a ordem, mas UTILIZANDO UMA OUTRA PORTA. Então teremos o MIDI Yoke 2 sendo aberto como Output na aplicação B e o como Input na apliação A.


Aplicação A: Pure Data


Aplicação B: Ableton Live



MIDI-OX é um utilitário MIDI dos mesmos criadores do MIDI Yoke. Serve como ferramenta de diagnóstico MIDI (para verificar se um dispositivo MIDI está enviado os sinais corretamente para o computador) e como re-arranjador de conexões MIDI, dentro de outras funções mais complexas. Em conjunto com o MIDI Yoke torna possível o compartilhamento de um único dispositivo MIDI (Real ou virtual) entre diversas aplicações, tanto para entrada como saída.

Como exemplo vamos descrever uma utilizacão - Compartilhamento de uma instância MIDI entre aplicações: Inicie o MIDI-OX. No menu "Options"->"MIDI Devices.." escolha o dispositivo MIDI que queira compartilhar, selecionando na parte de "Input" e escolha o MIDI Yoke 1 como "Output". Em cada uma das aplicações que se quera acessar o dispositivo compartilhado, selecione o MIDI Yoke 1 como Input. O contrario também pode ser feito, ou seja, compartilhar uma única saída MIDI entre vários aplicativos. Varias conexoes podem ser realizadas, com diversos conjuntos de entrada e saída, bastando para isso clicar na porta desejada e arrastar um cabo virtual entre elas. Lembrando que o MIDI-OX deve ficar rodando durante todo o tempo.

No exemplo abaixo estamos compartilhando o dispositivo real "Kx Uart" na porta de saida "MIDI Yoke 1" e "MIDI Yoke 2" simultaneamente.



No Mac OS X o papel do de roteador virtual é provido nativamente pelo próprio sistema operacional, pelo Driver IAC. Ele está presente na guia "Configuração Áudio e MIDI" do menu Utilitários. Com o configurador rodando, basta clicar no menu "Janela" -> "Mostrar Janela de MIDI" para que a configuração especifica de MIDI apareça.

Por padrão apenas um driver está adcionado. Clicando-se no botão "Adcionar e remover portas" podemos criar varias portas virtuais, que estarão disponíveis para intercomunicação entre aplicativos. Na imagem abaixo foram adcionadas seis portas IAC.


Na imagem abaixo vemos as portas virtuais IAC presentes no Ableton Live:


Podemos então configurar a troca de dados MIDI de forma semelhante ao feito no Windows com o MIDI Yoke. Para enviar dados MIDI do programa A para a programa B, basta abrir com Output no programa A o Driver IAC "Bus IAC 1" e no programa B abrir como input esse mesmo Bus. Para envio de dados no sentido contrario, basta inverter a ordem, mas UTILIZANDO UMA OUTRA PORTA. Então teremos o "Bus IAC 2" sendo aberto como Output na aplicação B e o como Input na aplicação A.

Como exemplo temos o PureData se comunicando via MIDI com o Ableton Live utilizando o conceito descrito acima, demostrado na configuração a seguir:


Para fazer o papel do MIDI OX no MacOSX temos duas aplicações gratuitas. O MIDI Monitor, mostrado abaixo com as portas IAC:


E o
MIDI Patchbay, que permite o redirecionamento de entradas e saídas reais e virtuais de forma similar a disponibilizada pelo MIDI OX no Windows:




Transmitindo MIDI via rede TCP-UDP/IP

Mesmo com o aumento da adoção do OSC como alternativa para transmissão de dados de controle, a grande maioria dos aplicativos somente trabalha com MIDI (como é o caso do Ableton Live, Cakewalk Sonar, Nuendo, Logic Pro, Pro Tools, Reason, entre outros). E o OSC ainda possui limitações, como a falta de definição do protocolo para o envio de notas originadas por um teclado controlador, por exemplo

Mas, como descrito na parte 1 desse artigo, o MIDI possui uma limitação no que diz respeito às possibilidades de interconeão. São definidas apenas duas formas padrões de interconexão: via cabo DIN-5 e via USB. Mas esse aspecto permite apenas a conexão de um hardware a um computador. A interconexão entre computadores via MIDI nao é possível via USB, restando apenas a conexão via DIN-5, que exige interfaces dedidacas em cada uma das máquinas para a troca de informação.

Existem softwares que possibilitam a troca de informações MIDI através de uma rede TCP-UDP/IP, como o EternetMIDI, o ipMIDI. Mas essas soluções ou são pagas ou funcionam apenas em um sistema operacional. Ou seja, uma verdadeira solução para comunicação de dados MIDI via rede entre sistemas operacionais distintos ainda não existe, até que seja homologada a modificação do protocolo com o RTP-MIDI.

Por necessitar de uma solução de transmissão MIDI entre sistemas operacionais distintos (Mac, Linux e Windows), acabei desenvolvendo, utilizando a ferramenta PureData, um patch extremamente simples mas funcional, que recebe e transmite dados MIDI em redes TCP-UPD/IP, utilizando o OSC como protocolo de encapsulamento. O ambiente de progamacão modular PureData é a versão open-source do Max/MSP, e permite a construção de pequenos programas (patches) que realizam desde síntese sonora à interpretação e conversão de sinais de controle MIDI e OSC. Por rodar tanto em Mac, Linux e Windows, foi a opção ideal para se construir um mecanismo de intercomunicação de dados MIDI, para situações na qual o OSC puro não é possível.

O patch, utilizado em conjunto do MIDI Yoke (no Windows) ou do Driver IAC (Mac OS X) permite que uma aplicação envie dados MIDI via rede para uma aplicação presente em outro computador, rodando até mesmo um sistema operacional diferente. Pode-se compartilhar também controladores MIDI entre máquinas distintas, cada uma rodando um conjunto de softwares diferente.

O ambiente PureData pode ser baixado, em sua versão completa "pd-extended", em:
http://puredata.info/downloads

Apos o Download (de acordo com o sistema operacional), instala-se o software em ambas as máquinas que se deseja realizar a troca de dados MIDI via rede e abra o patch anexo a esse
post.

Para o envio de dados MIDI de uma máquina A (com IP de exemplo 192.168.0.1) para uma máquina B (com IP de exemplo 192.168.0.2), abrimos uma instância do patch em cada uma das máquinas. Lembrando que ambas devem estar com as redes configuradas, interligadas em um mesmo Hub ou Switch de rede via cabo de rede CAT-5 (como descrito no artigo anterior), ou dentro de uma mesma rede sem fio. Pode-se usar um
cabo cruzado para ligação direta entre placas de rede. Talvez seja preciso desligar o firewall das máquinas. Anote os IPs de cada uma das máquinas (disponível na configuração de rede de cada uma das máquinas), pois serão utilizados na configuração do patch do PureData.

Na máquina A, preenchemos o campo "connect IP PORT" com os valores da máquina B, ou seja "send 192.168.0.2 5002". Na máquina B, preenchemos os valores com os dados da máquina A - "connect 192.168.0.1 5001"

Também na máquina A, preenchemos os valores do campo "dump 5001". Na máquina B os valores seriam "dump 5002".

Máquina A: PD rodando em Mac OS X


máquina B: PD rodando em Windows




Na configuração MIDI do PureData de cada máquina, escolhemos como MIDI IN um dispositivo MIDI Yoke (Windows) ou IAC (MacOS X) que queremos enviar os dados para a máquina B. E como MIDI OUT o dispositivo que receberá os dados MIDI vindos da máquina B. O mesmo deve ser feito na máquina B.

O Patch deve ficar rodando durante todo o tempo que se deseja transmitir dados MIDI via rede.


Em conjunto do MIDI-OX (no Windows) ou o MIDI Patchbay (Mac) podemos ter algumas situações de uso do patch de MIDI via rede, como:
- Compartilhamento de teclados MIDI e controladores entre softwares locais E entre duas máquinas em rede SIMULTANEAMENTE;
- Envio de dados MIDI de vários softwares de uma máquina para outra máquina dedicada, rodando sintetizadores mais pesados;
- Troca de informações MIDI entre softwares musicais e visuais (como Processing, OpenFrameworks) rodando em máquinas separadas;
- Troca de dados MIDI entre máquinas situadas a mais de 100 metros de distancia, possível pela tecnologia das rede CAT-5 e hubs/switches (o USB tem limite de 5m e o MIDI DIN-5 tem limite de 10m).


1 comentários:

Francisco disse...

Caro André, que tal postar algo sobre o KX Project aproveitando seus conhecimentos em informática e audio baseados em computador? Ainda há muitos usuários das Live! e Audigy no Brasil que não sabem explorar todo o potencial dessas placas.
Obrigado e abraços.