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)