sexta-feira, 2 de outubro de 2009

Interconexão de Sistemas de Controle de Áudio

Nesse artigo iniciaremos a discussão sobre as formas de interconectar dispositivos de controle de Áudio e as novas formas de interconectar computadores para troca de mensagens de controle.


O que é MIDI


O protocolo MIDI (Musical Instrument Digital Interface) foi proposto no inicio dos anos 80 e possibilita a interconexão e troca de mensagens musicais e de controle entre instrumentos musicais eletrônicos, sintetizadores, computadores, bateria eletrônicas, e outros dispositivos de áudio. MIDI não trasmite áudio - transmite apenas "mensagens de eventos" como tonalidade e intensidade de notas tocada, sinais de controle de parâmetros como volume, vibrato e pan, sinais de "clock" para sincronismo de tempo entre dispositivos. Também é utilizado para troca de dados de controle de sistemas de iluminação em shows e eventos.


Na sua concepção original a conexão de equipamentos por MIDI era feita via cabos com conectores DIN-5 (o mesmo conector usado nos antigos teclados de computador, antes da adoção do padrão PS/2 de pinagem).



Conector DIN-5

Vários equipamentos MIDI podem ser interconectados em em uma estrutura de conexão conhecida como "anel", na qual o INPUT de um equipamento era conectado ao OUTPUT do próximo. No caso de computadores operando sinais MIDI essa estrutura requeria a presença de uma interface MIDI no mesmo. A limitação dessa forma de conexão está no fato de que vários dispositivos MIDI podem ser controlados a partir de um dispositivo (1 MIDI out controla varios MIDI in via ligação em anel) mas vários dispositivos não podem controlar ao mesmo tempo um único dispositivo. Cada dispositivo de controle necessita de uma entrada IN exclusiva no dispositivo controlado.


Conector USB tipo A - Foto: Andreas Frank - Creative Commons

Com a adoção atual das conexões USB nos equipamentos MIDI (que engloba tanto o IN quanto o OUT de sinais MIDI), simplificaram-se as conexões, pois o computador tornou-se o centro de controle principal. Mas para a interconexão de computadores via MIDI, a conexão via cabos USB não é possível. E as placas de som mais simples não possuem conectores MIDI do tipo DIN-5.


Conector DB15 presente em algumas placa de som,
também utilizado para conexão MIDI

Mensagens MIDI podem ser agrupadas e armazenadas em um arquivo de computador, popularmente conhecido como "Arquivo MIDI". Com extensão do tipo ".mid" esse arquivo, também conhecido como "Standard MIDI File (SMF)", se tornaram muito populares recentemente em telefones celulares, como ringtones. Na marioria das vezes esses arquivos contem as informações das notas tocadas, intensidade e duração, e que para serem ouvidas necessitam de um software ou hardware chamado de sintetizador. Nos celulares está presente um tipo simples de hardware sintetizador, com timbres simples de instrumentos diversos. Nos computadores é comum a presença de um sintetizador em software embutido no sistema operacional ou na placa de som, com simulação de timbres simples de instrumentos.

Via conexão MIDI é possível conectar o PC a um sintetizador em hardware, geralmente na forma de teclados sintetizadores, que possuem bancos de sons com timbres mais realistas. Recentemente também se tornou popular a utilização de sintetizadores em software no formato de plug-in (principalmente no formato VST), que possibilitam tanto a execução de informações MIDI presentes nos arquivos SMF quanto a interpretação de sinais MIDI vindo de controladores no formato de teclados, baterias eletrônicas e similares.

Esses aplicativos que permitem a interpretação e edição de sinais MIDI são conhecidos como Sequenciadores. Os mais conhecidos são o Cakewalk Sonar, Cubase, Reason e Ableton Live.

É possível a interconexão MIDI de dois aplicativos sequenciadores rodando na mesma máquina por meio de um software que simula um HUB MIDI. O MIDIYoke cria entradas e saídas virtuais, permitindo o envio de sinais MIDI de um programa para outro.

O futuro do MIDI

Existe também um esforço para atualizar o padrão MIDI e possibilitar a troca de mesagens via rede, possibilitando maior velocidade e flexibilidade de interconexões. O RTP-MIDI (Real Time Protocol) foi disponibilizado ao publico no final de 2006 pelo IETF (Internet Engineering Task Force, que controla as padronizações da Internet). Mas a Apple disponibilizou uma versão modificada do protocolo em seu sistema operacional OS X. Está disponivel para qualquer aplicação que rode nesse sistema e parace que será adotado em breve como padrão de MIDI sobre Rede pelo comitê gestor do protocolo (MIDI Manufacturers Association).

Um driver para Windows foi lançado pela empresa Kiss para um de seus produtos - justamente um dispositivo de trasformacão de conexões MIDI via cabo DIN para cabos CAT-5, (os populares cabos de rede Ethernet), que funciona com o protocolo RTP-MIDI. Esse driver permite a troca de informações MIDI entre dois computadores interligados pelo aparelho KISS BOX, criando em cada um deles uma porta MIDI virtual, acessível a todos os programas que rodam MIDI.

A partir do inicio de 2011 a implementacao proposta pela Apple para comunicacao de MIDI via rede TCP-UDP/IP (Ethernet ou WI-FI, por exemplo) se tornou de facto a versao geral adotada por diversos outros drivers, em varios sistemas operacionais como Linux, Windows, iOS e Android. Essas drivers sao gratuitos e possibilitam a troca de informações MIDI através de uma rede TCP-UDP/IP entre diversos sistemas operacionais e entre varias maquinas simultaneamente.

A Apple apresenta no OS X um driver nativo do protocolo RTP-MIDI.

No windows temos o rtpMIDI, criado por Tobias Erichsen.

No Linux temos o multimidicast.



O que é OSC

Open Sound Control (OSC) eh um protocolo de comunicação entre computadores, sintetizadores e outros dispositivos de mulimídia, otimizado para as tecnologias modernas de comunicação via rede. Permite que instrumentos musicais eletrônicos como sintetizadores, computadores e outros dispositivos multimídia compartilhem dados musicais e de controle em tempo real via rede. Exatamente por ser um protocolo de comunicação via rede, permite a troca de dados por uma conexão de rede comum, como a rede Ethernet (via hubs e switches), Wi-Fi ou mesmo a Internet - ou seja, qualquer meio de transmissão que implemente o protocolo TCP/IP e UDP . Opera em velocidades de banda larga (acima de 1Mbps), possibilitando um tráfego maior de dados em suas mensagens e menor atraso entre pacotes, permitindo novos tipos de interação em tempo real que não eram possíveis no protocolo MIDI (que em sua especificação original usa conexões seriais de 31kbps ou 0,03Mbps e possui um atraso, ou "lag" muito grande). Alem disso, o OSC permite uma flexibilidade maior dos tipos de dados que podem ser enviados, possibilitando novos tipos de aplicação alem dos possíveis com MIDI (que possui um cojunto mais restrito de dados).

É exatamente na forma de conexão que o OSC se mostra útil, pois elimina a necessidade de dispositivos específicos para interconexão de equipamentos, como ocorre na comunicação MIDI (via conector DIN de 5 pinos ou USB - que só permite comunicação entre 2 equipamentos). Basta uma conexão que trafegue UDP/IP - como uma placa de rede Ethernet ou rede Wi-Fi, com uma velocidade maior do que 1Mbps para se criar um link OSC entre dois dispositivos. No caso de conexão via placa de rede, basta um hub ou switch para conectar vários computadores ao mesmo tempo, trocando mensagens OSC entre si.





Cabo de rede Etherner CAT-5 e conector RJ45 - o popular "cabo de rede"

O protocolo OSC funciona em uma estrutura conhecida como Cliente/Servidor. Um cliente OSC envia dados para um servidor OSC, que recebe e interpreta esses dados de controle. Aplicações que recebem e enviam dados de controle possuem ambos o Cliente e o Servidor do protocolo. Sendo um protocolo orientado a rede, a identificação de um dispositivo é feita por um numero de IP (que identifica o computador na rede) e de um par de "Portas de Conexão" virtual, uma para recepção de dados (na qual os clientes se conectam) e uma para o envio. O diagrama abaixo ilustra o processo:




As mensagens do protocolo OSC são compostas por simples linhas de texto, que codificam o controle de destino a ser modificado e o novo valor para esse controle. Uma mensagem do tipo:

/dispositivo1/controle01 0.500000

indica que o controle01 presente no dispositivo1 conectado via OSC deve ter ser valor mudado para 0.500000.

Por serem mensagens de texto, os comandos do protocolo OSC permitem uma grande variedade de dados de controle a ser enviado, como também um refinamento maior quanto aos valores numéricos enviados, que podem conter números inteiros ou com casas decimais.

OSC - Aplicações

Já existem vários softwares que utilizam o protocolo OSC, além do MIDI, para troca de informações de controle. Entre eles:

- Usine
- Plogue Bidule

Existem também hardwares compatíveis com o protocolo OSC:
- Lemur
- Monome
- iPhone e iPod touch rodando aplicativos de controle OSC (TouchOSC, OSCemote, Mrmr, OSCRemote, MSA Remote, entre outros)

Uma lista completa de softwares e hardwares que utilizam OSC pode ser obtida em http://opensoundcontrol.org/implementations

A adoção em larga escala do OSC, apesar da sua flexibilidade, ainda não ocorreu. Especula-se que essa adoção pode acontecer assim que um grande fabricante de hardware ou software incluir o protocolo em um de seus produtos, assim com aconteceu com o MIDI no começo dos anos 80.

O protocolo não é mantido por nenhuma instituição e também não está padronizado (ao contrario do MIDI, que foi padronizado no inicio dos anos 80). No estado atual, cada aplicação define os nomes das mensagens trocadas, o que pode gerar uma confusão em um futuro próximo. Também não estão padronizadas as informações que correspondem ao envio de notas musicais, como as presentes no MIDI. Essa fato limita um pouco o uso do protocolo com um substituto do MIDI nas aplicações que envolvem controle de notas em sintetizadores, como ocorre em teclados. Também não foi definido um arquivo OSC semelhante ao arquivo MIDI SMF. Um esforço de padronização está em processo, sob o nome de OSC-SYN.



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

quinta-feira, 9 de outubro de 2008

Compartilhando Audio pela Rede - Wormhole2 VST

Uma excelente forma de transmitir áudio entre computadores está disponível, agora de forma gratuita. O plug-in Wormhole2 (disponível em AU e VST para MacOSX e VST para Windows) permite a distribuição de áudio entre computadores ligados em uma rede.

A gama de possibilidades é enorme. Com um simples cabo de rede padrão (um cabo de rede do tipo CROSSOVER ligado direto entre duas maquinas ou entre varias maquinas ligadas a um hub/switch), uma rede via Firewire ou uma rede sem fio (Wi-Fi) é possível transmitir áudio entre aplicações diferentes localizadas em diferentes computadores, em tempo real, como se fossem conexões de áudio analógicas feitas por cabos, pela placa de som. A flexibilidade é ainda maior, como demonstrarei no estudos de casos abaixo.


Segundo o site do fabricante (
http://plasq.com/wormhole) é possível:
  • Transmitir áudio sobre TCP/IP
  • Latência super baixa em rede local
  • Um canal mono de 44.1kHz necessita de apenas 0,175MBit/sec (uma rede Ethernet possibilita ate 100Mbit/sec)
  • Funciona com qualquer tipo de rede que trafegue TCP/IP (Ethernet, Firewire, Airport, Wi-Fi)
  • Funciona com qualquer programa que aceite plug-ins VST e/ou Audio Units (MacOSX): Logic, Garageband, Cubase, Ableton Live, Digital Performer, Soundtrack, Metro, ...
  • Pode ser usada em uma única maquina para envio de áudio entre aplicativos ou para envio de áudio entre múltiplos computadores, rodando aplicativos diferentes.

Instalando o Wormhole2


Baixe o Wormhole2 do site do fabricante no Google Code (
http://code.google.com/p/wormhole2/downloads/list), na versão de seu sistema operacional. O plug-in era pago, agora virou Open-Source e é distribuído de forma gratuita.

O manual de instruções que acompanha o plug-in é bastante ilustrativo e detalhado. Vou apresentar aqui um resumo do processo e das funcionalidades.


A instalação é simples, como a da maioria dos plug-ins VST.


No Windows

Descompacte o arquivo zip e copie o arquivo Wormhole2.dll para a pasta de plug-ins VST do seu sistema.

Macintosh
Descompacte o arquivo e copie Wormhole2.component para a pasta Library/Audio/Plug-Ins/Components (para a versao AU)
e/ou
Copie o arquivo Wormhole2.vst para a pasta Library/Audio/Plug-Ins/VST (para a versao VST).

Certifique-se que vc consegue se conectar às portas UDP de numero 48100 e 48200 das maquinas na qual o plug-in vai ser usado. Talvez seja preciso reconfigurar o firewall (caso o mesmo esteja rodando) das maquinas, para permitir o envio e recebimento de conexões nessas portas.


Verifique também a conexão de rede antes da configuração. Quase sempre os problemas de comunicação entre maquinas ocorrem por problemas no cabo de rede - para o caso de conexões via Ethernet - ou via "placa de rede", como é mais conhecida.


No caso de conexões via rede sem fio (mais conhecida como Wi-Fi), é necesssário um Acess Point (ou roteador de rede sem fio) para a conexão entre mais de 2 maquinas. É possível transformar uma delas em Acess Point, como descrito nesse
TUTORIAL.

Situações:


Para todas as situações abaixo, abra a sua aplicação que aceite plug-ins VST(Windows/MacOSX) ou AU (MacOSX). No exemplos abaixo, estarei usando o Ableton Live.


Conexão direta
- Essa forma de conexão envia o áudio de um dos canais de uma maquina para outra, de forma direta:


1 - insira o Wormhole em um canal, no aplicativo de uma das maquinas. Essa maquina será a "fonte" do áudio
2 - renomeie esse canal como "Teste", clicando na caixa de texto na parte de cima do plug-in

3 - clique no botão "Start" da parte "direct" do Wormhole" fazendo dessa máquina o ponto de inicio da conexão, ou a "fonte"



4 - insira o Wormhole em um canal do aplicativo na maquina que será o "destino"
5 - clicando no triângulo, a conexão "Teste - end" proveniente da maquina fonte aparecerá na lista de conexões disponíveis. Se não aparecer, existe algum problema na conexão de rede entre as duas maquina. Revise a conexão como descrito anteriormente.

6 - com a conexão entre os dois Wormholes feita, ajuste o Buffer para reduzir a latência entre as conexões. Isso torna o áudio mais próximo a uma operação de tempo real, que seria realizada com cabos analógicos.



A aplicação de conexão direta é a mais simples e poderia ser substituída por uma conexão com cabos de áudio. Mas um dos benefícios da utilização desse plug-in é o fato de que o áudio trocado entre as maquinas não está sujeito às interferências dos cabos analógicos (principalmente nos cabos desbalanceados).

As situações a seguir são mais interessantes do que anterior, e demonstram o potencial e a flexibilidade do plug-in:


Loop Insert
- Essa forma permite a utilização de uma outra maquina como processadora de efeitos.


1 - Insira um plug-in qualquer em um canal do computador fonte. Nesse caso um Reverb2 - Coloque um Wormhole ANTES do Reverb. Coloque o nome de RoomReverb
3 - Escolha o modo "before" na parte "Insert Chain" desse Wormhole

4 - insira um outro Wormhole DEPOIS do Reverb . Escolha a opção "RoomReverb-after" no triângulo "Chooser"




5 - na outra máquina, insira o Wormhole em um canal e selecine a opção "RoomReverb-insert" no triângulo "Chooser"
6 - clique na opção "Auto" para que o Wormhole ajuste a melhor latência entre as maquinas



Conexão Multi-Canal
- Permite o envio de vários canais simultaneamente entre 2 computadores. É uma extensão do modo direto.


1 - insira o Wormhole em um canal, colocando o nome de "Channel -1"
2 - insira outras instâncias do plug-in nos demais canais. Eles serão renomeados automaticamente de "Channel -2" em diante

3 - ative o "Sync" de todos os canais

4 - lembre de ativar a opção "Play through" para que o áudio do canal saia pelo software. Com esse controle desativado o áudio não sai pelo software, sendo somente enviado pela rede.




5 - Insira o plug-in em um canal do software da máquina destino e escolha a opção "Channel -1 - end" no "Chooser"
6 - Adcione o Wormhole nos demais canais. Eles automaticamente serão configurados como "Channel -2 - end", "Channel -3 - end"....

7 - Ative o "Sync" de todos os canais



Wormhole Farm
- "Farm" (em português "Fazenda") são conjuntos de maquinas cujo propósito é apenas processar dados, liberando o processamento da maquina local para outras tarefas. É muito usado em computação gráfica, na qual uma "Fazenda" de maquinas faz o processamento final ou render de uma cena. No Wormhole, esse modo permite configurar uma maquina que servira apenas como processadora de efeitos. Uma vez configurado esse modo, os efeitos dessa maquina podem ser acessados por qualquer maquina que esteja rodando uma instância do Wormhole em um determinado canal.

Basta criar vários canais no software da maquina "fonte' e em cada um deles reproduzir a configuração "
Loop Insert". Nas maquinas de destino, basta acessar esse canais da mesma forma descrita nessa seção.

Referências:

http://en.wikipedia.org/wiki/Ethernet_crossover_cable

http://plasq.com/wormhole

segunda-feira, 6 de outubro de 2008

ASIO4ALL - Áudio de baixa latência para todos

O primeiro passo para a utilização de um computador (ou notebook) como ferramenta de criação/geração/manipulação de áudio em tempo real é uma interface de áudio ou placa de som que possua baixa "latência".


A latência, numa placa de som, refere-se ao atraso entre a conversão do sinal digital produzido pelo computador e a saída ou entrada do som pela placa de som.
Por exemplo, quando se usa um computador como sintetizador controlado via teclado MIDI, o tempo que leva para se ouvir o som de uma nota após tocada no teclado é a latência. Ou quando utilizamos o computador como ferramenta de manipulação do áudio vindo de um microfone conectado à placa de som. A latência então pode ser percebida como a diferença do tempo entre a captação do áudio no microfone e o resultado do áudio manipulado pelo computador.


Latências inferiores a 7ms (milissegundos ou 0,007s) são consideradas de "tempo real". Acima desse valor já é possível ouvir um atraso entre a execução de uma nota e o seu som.


O áudio no Windows sempre sofreu com problemas de latência, pois os drivers padrão da plataforma (WDM, DirectSound e o antigo MME dos Windows 95/98/ME) não foram desenvolvidos para aplicações de tempo real.


Uma forma de driblar essa deficiência foi proposta pela Steinberg (desenvolvedora do Cubase e Nuendo - softwares sequenciadoes e de gravação de áudio multicanal) com o ASIO (Audio Stream Input/Output), que "pula" as camadas e os drivers padrão da plataforma e conecta os sinais de áudio vindo dos softwares direto com o hardware da placa de som, permitindo o trabalho com o áudio em tempo real.


O problema é que o ASIO só está disponível para placas de som profissionais. Para quem começa no mundo do áudio, nem sempre é possível adquirir tais placas e a única alternativa é utilizar as interfaces "on-board" presentes nos computadores e notebooks.


O ASIO4ALL contorna esse problema, fornecendo interface ASIO para qualquer placa de som que possua driver no padrão WDM (Windows XP/2000 ou superior).


O driver pode ser baixado de www.asio4all.com


Instalando


A instalação é simples, bastando tomar cuidado apenas na tela abaixo. Marque as opções como demonstrado na figura:

Configurando


Ao clicar no ícone que o instalador colocou no desktop "ASIO4ALL Off-line Settings" a seguinte interface aparece. Se a placa de som eh compatível com o ASIO4ALL, ela aparecerá na lista, marcada em azul no ícone da esquerda, ao lado da seta e do nome da interface. O modo de configuração padrão permite apenas a escolha do tamanho do buffer ASIO.



O tamanho do buffer (medido em samples) eh quem define a latência do áudio, em operações de áudio em tempo real. Quanto menor o valor em samples da latência, maior o processamento necessário para a reprodução do áudio. Na configuração abaixo para a minha placa de som (uma simples SoudBlaster Live CT4870) utilizei um buffer de 256 samples, que me possibilitou uma latência de aproximadamente 7ms, no limite do aceitável.
Um indicativo de que a latência possa estar baixa demais e sobrecarregando a CPU é a reprodução de "plocs" no áudio, ou interrupções intermitentes no som, como se o áudio estivesse "pulando" ou "pipocando".
O ideal eh descobrir um ajuste que possibilite baixa latência e ao mesmo tempo um uso com relativa folga da CPU. Um uso intenso da CPU por um determinado software ou plug-in também pode causar falhas no áudio.


Clicando no botão Advanced da configuração (com a figura da chave) temos mais opções de sintonia fina da configuração. Nessa opção podemos habilitar a interface ASIO4ALL para as entradas e saídas individuais da placa (para placas de som com mais de 1 entrada e mais de 2 saídas). Na configuração abaixo pode-se ver que minha placa de som possui 4 pares de saídas e que apenas habilitei as saídas 0/1. Se quisesse habilitar as demais, bastava clicar na saída presente na lista "WDM Device List" e clicar no botão ao lado da seta e do nome de cada uma das saídas da interface (com o desenho de um pequeno "Power"). Cada saída ou entrada habilitada aparece no software a ser utilizado (Ex: Ableton Live) como uma saída ou entrada ASIO. Não esquecendo de ajustar o tamanho do buffer no controle "ASIO Buffer Size", que abaixo foi ajustado em 256 samples.


Lembrando que a interface de configuração deve ser sempre fechada após os ajustes e antes de se iniciar o software a ser usado.


Essa configuração deve também ser acessada de dentro do software de áudio. Geralmente os softwares de áudio possuem uma interface de escolha de driver de áudio a ser utilizada. Na figura abaixo esta demonstrada a interface de configuração de áudio do software Ableton Live.



O tipo de driver ("Driver Type") foi selecionado como "ASIO". Na guia "Audio Device" está marcado a interface "ASIO4ALL v2". A configuração dessa interface pode ser acessada pela opção "Hardware Setup". Verifique também o tamanho da latência para um buffer de 256 samples: 7.28ms.


Abaixo a configuração do Usine:


Abaixo a configuração do Reason:



Qualquer software compatível com ASIO pode ser usado para o teste de latência da interface. Entre eles:


- Ableton Live
- Plogue Bidule
- Usine
- Cakewalk Sonar
- Cubase
- Reason


Mas o ASIO4ALL não serve apenas para interfaces "on-board" mais baratas. Pode ser utilizado como substituto do drive ASIO presente em interfaces profissionais e muitas vezes com desempenho superior ao driver fornecido pelo fabricante. Tive experiência em utilizar o drive ASIO4ALL substituindo com sucesso e com melhor latência o drive fornecido pela M-Audio em um de seus modelos de interface de som USB.



Alguns outros artigos desse blog, que podem ser uteis:


Interconectando Aplicativos de Áudio - JACK Audio Connection Kit
Utilizando JACK no Processing
Interconexão de Sistemas de Controle de Áudio - Parte 1
MIDI e OSC: Interconexão de Sistemas de Controle de Áudio - Parte 2


Referências:
http://www.asio4all.com/
http://en.wikipedia.org/wiki/Audio_Stream_Input/Output
http://en.wikipedia.org/wiki/Latency_(audio)