A todos que acessam esse blog:
Fiquei um pouco afastado dele nos ultimos 2 anos, mas vou voltar em breve com mais frequencia, atualizando os artigos antigos - que tem um bom acesso - e com artigos novos.
Dá bastante trabalho escrever os artigos como os que estao nesse blog (com a didática e nível de explanação que acho necessários), por isso meu afastamento por esse tempo dado minha falta de disponibilidade. Mas já estava escrevendo a atualização de alguns artigos (principalmente os ligados ao MIDI via rede, já que tivemos novidades em software que trouxeram uma nova perspectiva do processo) e em breve comeco a publicá-los.
Como tambem vou tentar responder às perguntas que os leitores tem feito, na medida do possivel.
Agradeco a atenção de todos!
Software Bending
Extrapolando os limites dos softwares - Áudio no computador - Áudio em dispositivos móveis - Programação de áudio - Informações sobre Áudio digital.
terça-feira, 2 de outubro de 2012
sexta-feira, 16 de julho de 2010
O novo 1984
Nao eh de hj que a Apple estah se tornando aquilo que ela mesmo lutava contra em seu inicio - uma versao real do mundo distopico imortalizado por George Orwell no l
ivro "1984", que a propria Apple usou como imagem no comercial de lancamento do Mac - na epoca o grande irmao era a IBM, na visao da Apple.
A empresa hj utiliza-se das taticas do Big Brother, tao cond
enadas por ela mesma no passado: controle, centralizacao e distorcao de informacoes, monopolio, etc. Tudo isso imortalizado na figura messianica de Jobs, o autentico Big Brother real, que em suas apresentacoes hipnotiza a plateia e leva seus seguidores a desejarem como nunca qualquer que seja a nova buginganga lancada por eles, num fenomeno jah batizado de "Campo de Distorcao da Realizade", capaz de vender ateh agua com se fosse vinho.
As ultimas cartadas da empresa sao bem decepcionantes, e comecam a abalar a feh de seus mais fieis consumidores (como o pessoal do blog TUAW - especializado em Apple desde os primordios da internet comercial no fim dos anos 90).

Eu especialmente fui uma vitima recente do "Apple Way": meu iPod touch de 1a geracao nao eh mais suportado pela empresa, jah que a versao 4 do iOS, sistema operacional que roda no iPhone, iPads e iPod touch, nao funciona na versao do meu iPod. Matou um produto com menos de 2 anos de existencia, numa demonstracao simples mas funebre do modelo de negocio do capialismo atual, ou "Consumismo" - use e jogue fora, ou mero guardanapo tecnologico. O aparelho ainda funciona e me serve bem, mas estarah congelado no tempo por mera petulancia de seu fabricante, mesmo ainda possuindo capacidade tecnica para segur o "trem do software" por mais dois anos.
Os problemas do iPhone 4 jah se espalharam pela imprensa especializada (problemas de sinal de recepcao, bugs no OS, etc) , que comecou a dar notas negativas para o produto em algumas avaliacoes.
Logo em seguida, a Apple comecou a aplicar a sua politica de Grande Irmao, e controlar a informacao negativa apagando os posts que repercutiam a analise do site Consumer Reports
Como jah dizia o livro mencionado antes: "Quem controla o passado controla o presente e o futuro".
O artigo do TUAW menciona o fato e tb questiona as atitudes "1984" da Apple
Citando o artigo:
"... Eh dificil de imaginar o que a Apple espera ganhar fazendo isso. Ao inves de ter uma noticia negativa agora tem duas: nao so o Consumer Reports saiu e disse que nao recomenda a compra do iPhone 4, mas agora a Apple parece estar impedindo que as pessoas discutam sobre o artigo em suas listas de discussao de suporte..."
A recente guerra da Apple contra a Adobe e o Flash demonstra que a Apple quer realmente deter o controle do futuro, do seu modo. O modelo de negocio de musicas pelo iTunes, a loja de aplicativo App Store (e seu processo obscuro de aprovacao de aplicacoes disponibilizadas, que desde o inicio recebe criticas dos desenvolvedores), sao exemplos da forma de controle que a Apple quer exercer tb no conteudo que se consome.
Se uma empresa vestiu a carapuca deixada por Bill Gates e a Microsoft no quesito "antipatia" essa empressa agora eh a Apple.
The Apple way or the highway - estou escolhendo o highway.
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:

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.
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".
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.
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:
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).
sexta-feira, 2 de outubro de 2009
Interconexão de Sistemas de Controle de Áudio - Parte 1
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).
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.
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.
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.
Uma outra alternativa foi lançada recentemente. Trata-se do EthernetMIDI, uma aplicação gratuita e OpenSource que permite o tráfego MIDI entre dois computadores rodando Windows utilizando uma rede convencional (de preferência com fio). O aplicativo é executado e deve ficar rodando nos dois computadores. Recomenda-se a utilização do MIDI Yoke para a interconexão do EthernetMIDI.
Uma outra alternativa foi lançada recentemente. Trata-se do EthernetMIDI, uma aplicação gratuita e OpenSource que permite o tráfego MIDI entre dois computadores rodando Windows utilizando uma rede convencional (de preferência com fio). O aplicativo é executado e deve ficar rodando nos dois computadores. Recomenda-se a utilização do MIDI Yoke para a interconexão do EthernetMIDI.
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.
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
- Usine
- Plogue Bidule
- Max/MSP
- 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.
A 2a parte do artigo pode ser lida em: http://softwarebending.blogspot.com/2009/10/interconexao-de-sistemas-de-controle-de.html
Referências:
http://en.wikipedia.org/wiki/OpenSound_Control
http://en.wikipedia.org/wiki/OpenSound_Control
http://opensoundcontrol.org/
http://www.cs.berkeley.edu/~lazzaro/rtpmidi/
http://en.wikipedia.org/wiki/MIDI
http://en.wikipedia.org/wiki/MIDI_usage_and_applications
http://www.cs.berkeley.edu/~lazzaro/rtpmidi/
http://en.wikipedia.org/wiki/MIDI
http://en.wikipedia.org/wiki/MIDI_usage_and_applications
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.





Referências:
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:
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 (com o icone abaixo):

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
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á:
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.
- 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:
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 Reverb
2 - 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
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:
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"
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.
2 - 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"
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.
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.
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
Assinar:
Postagens (Atom)