5. objecto(s)
Como objecto material, trata-se de um suporte multimédia, de base tecnológica como resposta a uma necessidade de gerar interactividade em tempo real. O projecto é, predominantemente artístico, procurando combinar a arte com tecnologia. Como objecto imaterial, consideramos toda a informação relacionada com o projecto. Como registo/memória do mesmo, decidimos criar um site/blog para depósito/divulgação pública do projecto. Sempre que existir uma apresentação pública do projecto, esta terá suportes gráficos próprios criados pelo grupo, acompanhada marcas das instituições associadas.
Esquema de funcionamento do projecto
Neste possível cenário, a interacção não se restringe apenas a uma pessoa e ao ambiente gerado pelo suporte multimédia mas sim a uma interacção entre duas pessoas em dois espaços distintos.
Descriçao técnica de execução do projecto em MAX/MSP+jitter.
Max/MSP is a graphical environment for music, audio, and multimedia.
In use worldwide for over fifteen years by performers, composers, artists, teachers, and students, Max/MSP is the way to make your computer do things that reflect your individual ideas and dreams. Max/MSP is a true cross-platform system compatible with both Mac OS X and Windows XP. Max/MSP is a graphical programming environment, which means you create your own software using a visual toolkit of objects, and connect them together with patch cords. The basic environment that includes MIDI, control, user interface, and timing objects is called Max. Built on top of Max are hundreds of objects, including two powerful collections from Cycling ‘74.
A escolha do programa
O Max/MSP foi escolhido porque nos pareceu o que melhor se adequava à produção de uma interacção num ambiente controlado. Por outro lado é um programa com um bom suporte de ajudas, que ia ser essencial para uma rápida compreensão do funcionamento deste, já que o prazo para a realização do trabalho de grupo não era muito extenso.
O Max e o Windows
Desde logo o nosso grupo optou pela versão Windows do MAX/MSP por ser este o sistema operativo usado por todos os elementos do grupo. Tomada esta decisão surgiu o primeiro problema, a detecção de movimento.
O Projecto
No que concerne ao MAX/MSP a nossa intenção era fazer em Windows o que já se faz em Mac OS X recorrendo à aplicação VNS, a detecção de movimento. Além disso para a interacção que queríamos criar era necessário que o movimento fosse detectado por zonas. A interacção consiste em que uma pessoa em frente a uma câmara web conseguisse despoletar uma série de sons, consoante a posição que ocupasse em frente à câmara. Assim, quando o “patch” é iniciado, o primeiro de quatro ficheiros wav começa a tocar. Mal a câmara detecte movimento o segundo ficheiro wav arranca. De seguida entra a detecção de movimento por zonas. Quando detectado movimento na zona mais à direita, definida por um rectângulo, é accionado o terceiro ficheiro wav. Finalmente, quando detectado movimento na zona mais à esquerda, definida também por um rectângulo, é accionado o último ficheiro wav. Tirando o primeiro ficheiro wav, os restantes três apenas serão reproduzidos enquanto for detectado movimento na respectiva zona.
O patch de MAX/MSP também teria que transmitir para uma aplicação flash o número de músicas que estaria a reproduzir, para que a aplicação reproduzisse o efeito de aumentar ou diminuir o número de bailarinas a dançar.
A captura de movimento por zonas
Para a captura de movimento usamos um patch disponibilizado pelo colega deste Mestrado, Rui Dias. Esse patch estava preparado para funcionar em Mac OS X, pelo que não funcionou em Windows. Este primeiro problema foi resolvido usando a função “jit.dx.grab”, que utiliza o DirectX na captura de vídeo no lugar do QuickTime. A função “cv.jit.centroids” apenas assinalava o centro de massa de todo o movimento detectado, o que não servia as nossas expectativas. Assim passámos a usar a função “cv.jit.blobs.centroids” que assinala todas as coordenadas em que detecta movimento. Assim este módulo efectua a captura de imagem da câmara (jit.dx.grab) e identifica com a cor branca os pixéis onde há movimento. A identificação do movimento é efectuada subtraindo os pixéis iguais entre uma matriz de pixéis e a que está imediatamente anterior. A função cv.jit.blobs.centroids vai identificar as coordenadas do centro das várias manchas brancas resultantes da detecção de movimento.
As coordenadas do movimento
Este módulo é o cv.jit.centroids.draw sem nenhuma alteração. Está a ser utilizado para extrair as coordenadas de cada uma das manchas localizadas e identificadas como movimento. Esta função desenha cruzes vermelhas de centro nas coordenadas calculadas atrás, bem como uma circunferência em seu torno, maior quanto maior for a mancha de movimento. Vão sair 3 valores. O primeiro escolhido ao acaso que é a coordenada da parte inferior do eixo vertical da cruz. A segunda que é a da parte esquerda do círculo em torno da cruz. A terceira que é da parte direita do círculo em torno da cruz.
As zonas
As zonas que iriam despoletar o respectivo som foram definidas através de ciclos if, como se pode ver na imagem que também contém o buffer. O primeiro ciclo define como zona o rectângulo formado pelos primeiros 100 pixéis de largura e toda a altura. O segundo ciclo define como zona todo o lcd (o segundo ficheiro wav arranca mal seja detectado algum movimento pela câmara). O terceiro ciclo define como zona para o terceiro ficheiro wav o rectângulo formado pelos últimos 100 pixéis na largura e toda a altura. O quarto ficheiro wav está sempre a tocar.
O Buffer
Neste módulo entram as 3 coordenadas. No conjunto mais à esquerda entra a 2ª coordenada (da parte esquerda do círculo em torno da cruz) e é verificado se ela se encontra nos primeiros 100 pixéis (medindo numa linha horizontal). Caso se verifique a condição sai um número 127 pela saída da esquerda que acciona o som respectivo. Caso contrário sai o número 1 pela saída da direita e é activado um buffer que analisa e conta a quantidade de uns que lhe estão a chegar. Até 5 uns seguidos o buffer emite o número 127 que acciona o som. A partir daí emite o número 0 que corta o som. O processo é semelhante para os outros dois conjuntos.
O Som
Neste módulo entram os valores 0 ou 127 que controlam o volume de cada um dos ficheiros wav que estão sempre a ser reproduzidos em loop. Foi necessário que o controle fosse efectuado apenas sobre o volume dos ficheiros para que existisse sempre sincronismo entre eles, de modo a que o resultado sonoro seja melodioso.
A variável para o Flash

Neste módulo é calculado o número de ficheiros wav que estão a tocar em simultâneo. Este valor será enviado para uma aplicação flash.
Flash Server

Neste módulo é activado um servidor flash. A sua descrição é feita no capítulo seguinte.
Flash
O FlashServer
Uma das características interessantes do MAX/MSP é a possibilidade de interagir com outros programas difundindo e recebendo valores numa rede. Neste trabalho exploramos a difusão de variáveis através da rede.
Para difundir variáveis é necessário instalar no directório do MAX, 2 ficheiros que estão disponíveis na Internet. O seu descarregamento é simples e gratuito.
A pasta vem acompanhada de uma tutorial que refere os ficheiros a copiar para o directório de instalação do Max.
A passagem de variáveis pode ser feita de duas maneiras distintas: Utilizando um servidor local, que pode ser a máquina onde corre o MAX/MSP ou remotamente, difundindo o sinal do MAX numa rede. No nosso trabalho testamos ambas as hipóteses. Na primeira, utilizamos um servidor de apache e por http corremos o ficheiro flash. O ficheiro Max não tem de correr em http.
Na segunda hipótese, criamos uma rede sem fios, entre duas máquinas com dois sistemas operativos diferentes, Windows XP e Windows Vista. A diferença neste tipo de comunicação está apenas na chamada à máquina que corre o MAX/MSP. Se no primeiro caso chamamos o “localhost” no segundo exemplo foi necessário identificar a máquina que corria o MAX/MSP. Outra diferença é que no caso de duas máquinas distintas o ficheiro swf não tem de correr em nenhuma directoria específica.
A configuração do Max
Para difundir as variáveis no MAX é necessário criar um Bloco composto por algumas instruções. A figura seguinte é o exemplo de um possível esquema de ligações. 
A captura de variáveis Max no Flash
Enquanto o Max a envia os dados para a rede, alguma entidade terá de os capturar. Como o grupo pretendia criar uma animação com a quantidade de movimento obtida no MAX escolheu o programa ideal para o fazer: O Flash da Adobe.

Do Max/MSP ao Flash
Depois de termos o MAX a captar movimento, a controlar o som por zonas de detecção e, a passar variáveis para o Flash animar um Movieclip, surgiu-nos uma questão! Seria o Flash capaz de adquirir imagem (detectar movimento)? Se isso fosse possível, então poderíamos dar uma portabilidade ao nosso trabalho ainda não experimentada. Desenvolver todo o sistema de interacção em Flash, e publicá-lo na Web.
De facto conseguimos, criamos um programa todo em Flash, que está publicado em http://www.onrelease.info/lm2/ e que difere em termos de interacção no facto de a quantidade de movimento não ter uma zona específica de detecção. No MAX temos 3 zonas de detecção de movimento, apesar de no Flash ser possível criar também várias zonas de detecção de movimento diferentes, como pode ser visto em http://www.onrelease.info/lm3/.
Conclusão
No final da experiência, o grupo considera que o MAX/MSP é uma ferramenta útil para projectos que utilizem interactividade em tempo real. A sua interface é imediata, lógica mas complexa. É capaz de produzir resultados visiveis mesmo para quem ainda esteja a iniciar o seu estudo. Tem um sistema de ajuda muito bom e também eiste uma grande comunidade a desenvolver código para MAX, se bem que, talvez devido à origem do programa, a maioria dos scripts disponíveis na rede não sejam para o sistema operativo Windows.
A possibilidade do Max difundir e receber variáveis numa rede, é uma mais valia muito vantajosa, porque como ficou demonstrado no nosso projecto, podemos trabalhar a informação que o max processa noutras aplicações e devolver novamente valores ao MAX.
Como foi demonstrado no nosso projecto ligamos o max ao flash mas também utilizamos o Flash como ferramenta capaz de adquirir sinais através da Webcam. Em relação ao flash podemos dizer que é muito mais complicado criar interacção em tempo real utilizando uma webcam ou um microfone. Programar no Flash, em Actionscript é muito diferente de programar em MAX/MSP. Para pessoas que tenham uma larga experiência em AS, podemos dizer que vale a pena tentar. Caso contrário, aceitem o MAX/MSP como uma ferramenta explorável capaz de produzir resultados entusiasmantes.
Nota importante:
Apesar de termos investigado e programado muito em flash, achamos que não era relevante para este trabalho fazer uma exposição detalhada. O objecto de estudo era a interacção e não a animação produzida no Flash.



No comments yet
Jump to comment form | comments rss [?] | trackback uri [?]