Está en la página 1de 43

Disseny i implementació

d'un sistema interactiu


sonor

Fabià Serra Arrizabalaga

Gener 2010
Treball de Recerca de 2n de Batxillerat de l'IES el Sui de Cardedeu

Tutora: Mª Antonia Morató


2010

Esta obra está bajo una licencia Reconocimiento 3.0 España de Creative
Commons. Para ver una copia de esta licencia, visite
http://creativecommons.org/licenses/by/3.0/es/ o envie una carta a Creative
Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.

II
Índex
Agraïments .................................................................................................................................... V
Capítol 1: Introducció .................................................................................................................... 1
Motivació personal.................................................................................................................... 1
Treballs relacionats ................................................................................................................... 2
Escriptoris 3D: Bumptop i My Real Desktop ......................................................................... 2
Jocs interactius: Rythm Heaven, Otocky, Electroplankton i Los Sims .................................. 3
Mons Virtuals: Home i Second Life ....................................................................................... 3
Objectius i metodologia ............................................................................................................ 4
Breu descripció del contingut del treball .................................................................................. 4
Capítol 2: Eines Utilitzades ............................................................................................................ 6
Processing ................................................................................................................................. 6
Ess r2 ..................................................................................................................................... 7
Pphys2D................................................................................................................................. 7
Física ...................................................................................................................................... 7
Wrj4P5 ................................................................................................................................... 8
Freesound.org ........................................................................................................................... 8
OpenProcessing.org .................................................................................................................. 8
Adobe Photoshop CS4 ............................................................................................................... 9
Programes d'edició d'àudio - Audacity, Adobe Soundbooth CS4 , Sony Sound Forge ............. 9
Gravadora de so - Sony PCM-D50 ............................................................................................. 9
Estudi d'Enregistrament ............................................................................................................ 9
Wii Remote.............................................................................................................................. 10
Bluetooth................................................................................................................................. 11
Capítol 3: Treball Realitzat .......................................................................................................... 12
Estada al MTG ..................................................................................................................... 12
Programació amb Processing .............................................................................................. 12
Enregistrament de sons....................................................................................................... 13
Programació de les interaccions ......................................................................................... 14
Programació del Wii Remote .............................................................................................. 20
Disseny de la interfície ........................................................................................................ 24
Capítol 4: Presentació de l'Aplicació Boxound ............................................................................ 26
Informació general de l'aplicació ............................................................................................ 26

III
Descripció de la interfície ........................................................................................................ 27
Controladors d'interacció ........................................................................................................ 27
Funcionament amb el ratolí ................................................................................................ 27
Funcionament amb el teclat ............................................................................................... 28
Funcionament amb el WiiRemote ...................................................................................... 28
Capítol 5: Conclusions i treball futur ........................................................................................... 29
Referències .................................................................................................................................. 31
Annex 1: Codi del Programa ........................................................................................................ 32
Annex 2: Construcció de la Barra Sensora .................................................................................. 37
Material necessari: .................................................................................................................. 37
Construcció:............................................................................................................................. 37

IV
Agraïments
Voldria agrair les persones que m'han ajudat en la realització d'aquest treball. Vull donar les
gràcies especialment a Ricard Marxer, Jose Lozano i Xavier Serra, membres del Grup de
Recerca en Tecnologia Musical de la UPF. A Ricard Marxer voldria agrair-li haver-me introduït
al llenguatge Processing i haver estat sempre al meu costat quan m'ha estat necessari, resolent
problemes de programació. A Jose Lozano voldria agrair-li haver-me ensenyat la forma
adequada d'enregistrar sons i deixar-me utilitzar l'estudi de gravació per tot el que em va fer
falta. A Xavier Serra voldria agrair-li haver-me ofert l'estada al seu grup de recerca i ajudar-me
en tot moment en el desenvolupament del projecte. També voldria agrair a tots els altres
investigadors del MTG pel seu suport i per fer-me sentir part del grup durant el temps que vaig
ser-hi.

Vull donar les gràcies a Pere Planell i Marc Junyent, dos companys que em van ajudar tant en
la gravació dels sons com en certs aspectes de programació.

També vull agrair el suport de la comunitat que existeix al voltant de Processing, per
desenvolupar i mantenir aquest llenguatge fantàstic, pel seu suport sempre que ho he
necessitat i especialment vull agrair a Classiclll per ajudar-me en la instal·lació de la seva
llibreria i per recolzar-me en seguir endavant.

Finalment vull agrair a la professora Mª Antonia Morató per acceptar ser la tutora del treball,
per haver cregut en la idea que li vaig presentar i per haver-me recolzat en tot el procés de la
realització del treball.

V
Capítol 2: Eines Utilitzades

Capítol 1: Introducció
El so és un fenomen gairebé imprescindible a la nostra vida. No existiria la comunicació verbal,
no tindríem capacitat de distingir, d'endevinar o de percebre algú que estigues fora del nostre
camp visual, no hi hauria música, no existiria la ràdio, viuríem en silenci... En definitiva, els dies
se'ns farien simples, avorrits, quotidians, tristos, apagats...

Així doncs, la importància del fenomen sonor en la nostra interacció amb el món serà el tema
central d’aquest treball.

Vaig tenir la possibilitat de participar en un projecte que es feia al Grup de Recerca en


Tecnologia Musical (MTG) de la universitat Pompeu Fabra de Barcelona. Un projecte d'un mes
de durada que faria juntament amb dos altres estudiants de batxillerat: Pere Planell i Marc
Junyent. L’idea del projecte era poder demostrar la hipòtesis que el so és un element molt
important per percebre adequadament la nostra interacció amb la realitat física i ho havíem de
realitzar fent una simulació informàtica.

Vaig decidir que el projecte realitzat i l'aplicació informàtica desenvolupada, serien la base pel
Treball de Recerca, ampliant diversos aspectes que no vaig poder acabar durant l’estada. Un
dels aspectes amb els que he dedicat més temps des de llavors ha estat incorporar la
possibilitat de control utilitzant el comandament de la consola Wii dins l'aplicació.

Motivació personal
Els jocs sempre m'han apassionat des de ben petit i si d’alguna cosa me n'he adonat és que el
que manca a molts, no és tant la qualitat gràfica sinó la realitat sonora. Hi ha jocs que estan
molt ben fets, que són molt reals, però que els falta sons per simular més bé allò que intenten
representar. És veritat que cada dia s'investiga per a millorar aquests aspectes, però moltes
vegades els nous desenvolupaments no es centren tant en l'apartat sonor sinó que en el gràfic,
i potser s'hauria de investigar més en l'aspecte del so.

Vaig creure que seria bo poder demostrar que el so és una cosa molt necessària en les nostres
vides. Per aquesta raó volia crear una aplicació informàtica en la qual es simulés alguna
interacció real i comparar utilitzant-la amb i sense so. D'aquesta manera el que volia seria
demostrar que en l'aplicació sense so no tenim la sensació de que s'ha produït, per exemple,
un impacte o un fregament; sinó que només amb la sola imatge del que estem fent, els
objectes perden gran part de la seva “vida” i en conseqüència, perdem el realisme del que es
pretén mostrar. Així doncs, després volia que amb el so afegit, es demostrés i ens adonéssim
ràpidament, comparant amb l’experiment sense so, de la rellevància que té aquest en la
interacció, de la sensació de vivesa que provoca en els materials i de ser el principal causant de
que les coses que veiem siguin i existeixin, o que si més no, ens doni la sensació de que ho fan.

Fent aquest treball he après moltes coses que segurament són difícils de descriure amb
paraules. Tot i així, sí que n’hi ha moltes que puc dir que he après i n'estic molt orgullós
d'haver fet. Una d'elles, segurament la més important i que més valoro, és la programació, ja
que he après el llenguatge Processing. Sense tenir cap coneixement previ vaig aprendre

1
Capítol 2: Eines Utilitzades

algunes de les coses més bàsiques però importants de la informàtica, i estic segur que em
seran útils en un futur.

A l'estada a la UPF vaig tenir la gran oportunitat de ser tractat com un investigador més d'un
grup de recerca. Vaig veure i comprendre els avantatges i desavantatges que existeixen en
aquesta professió i em va servir, si més no, per madurar intel·lectualment una mica més
gràcies a tenir una experiència laboral seriosa que mai no havia tingut. També he après moltes
coses en relació al so i sobre les eines que s'utilitzen per a treballar en els temes de la
tecnologia musical.

He tingut també l'experiència de poder treballar en equip, tant quan estava en el grup de
recerca com més endavant amb la comunitat que existeix a nivell internacional al voltant de
Processing, de programari lliure i de Creative Commons. M'he sentit part d'una comunitat.

Com a conseqüència d’aquest procés, tot el que he fet està disponible amb llicències Creative
Commons, tant el document escrit, com els sons enregistrats, el codi i l'aplicació final
realitzada, Boxound.

Treballs relacionats
En el procés de fer el projecte he identificat una sèrie de treballs previs, molts d'ells
comercials, ja fets, que es relacionen d'una manera o altre amb el que havia de fer. M'han
servit de referència i aquí vull mencionar-los breument:

Escriptoris 3D: Bumptop i My Real Desktop


Existeixen un tipus d'escriptoris d'ordinador en tres dimensions on podem veure l'escriptori
com si es tractés d'una sala on els diferents arxius i documents que tenim en l'escriptori són
objectes gràfics, intentant simular una taula d'escriptori real. Aquests objectes els podem
moure per l'espai com si es tractessin d'elements independents, és a dir, que existeix una
interacció a temps real amb ells.

Bumptop1 és d’aquests el més conegut. Els diferents documents i arxius que tenim al escriptori
al moure's impacten entre ells d'una manera força realista i produeixen un so. Aquest so, però
és molt bàsic, general i igual per a tots els impactes que es produeixen. Tampoc quan movem
els arxius pel terra i d'aquesta manera produïm un fregament, no s'escolta cap mena de so.

My Real desktop és un altre escriptori 3D que existeix. A diferència del primer, aquest ha afegit
una opció amb la que pots deixar anar l'arxiu seleccionat des d'una certa alçada i provocar així
un impacte contra el terra, encara que igual que abans, el so és sempre el mateix, sense cap
mena de diferencia en l'alçada des de la qual és llençat. Com Bumptop, existeix interacció física
entre els arxius, però no s'ha implementat cap mena de so pel fregament, cosa que fa que
ambdós siguin divertits i originals, però mai del tot reals. Alguns vídeos d'exemple els podem
veure aquí:

 http://www.youtube.com/watch?v=ap8S5xRhMRw
 http://www.youtube.com/watch?v=u5l4SAgC82c&feature=related

1
http://bumptop.com

2
Capítol 2: Eines Utilitzades

Jocs interactius: Rythm Heaven, Otocky, Electroplankton i Los Sims

Nintendo DS (Rythm Heaven, Otocky, Electroplankton)


Hi ha alguns jocs, especialment per a la Nintendo DS, que han implementat interaccions a
temps real que produeixen sons diversos, ja sigui per a crear cançons i ritmes o per a similar
realisme.

Rythm Heaven2 és un d'aquests jocs. És un joc pensat per a divertir-se a la vegada que
aprofundeixes en el coneixement sobre el ritme (Aaron Marks 2008). Aquest joc té varis mini
jocs en els quals al interactuar amb alguna cosa produeixen sons que caracteritzen l'acció
produïda. Un d'aquests mini jocs és especialment important, ja que és el primer que he trobat,
i segurament dels pocs, en el que s'ha implementat un so de fregament a temps real amb el
qual podem interactuar. Podem veure un vídeo d'exemple d’aquest mini joc aquí:
http://www.youtube.com/watch?v=ofNcgobCTbc

Toshio Iwai3 és un japonès que ha estat sempre molt ficat en el disseny de sistemes interactius
de so i música, especialment en la creació de videojocs musicals per a nens petits. Alguns dels
jocs que ha creat i que són força significatius són:

 Otocky, és el primer joc que es va fer amb música interactiva


(http://www.youtube.com/ watch?v=Yi284fg_hQs&feature=related)
 ElectroPlankton és més nou i segueix amb la idea d'interactuar fent música
(http://www.youtube.com/ watch?v=vmyLuIYGT9o)

Los Sims
Es tracta d'un joc conegut arreu del món pel seu concepte de simulació social i estratègia. El seu objectiu
és el de controlar la vida d'uns personatges que crees tu mateix i anar evolucionant en relació a la
manera de vida i estatus social. Es tracta d'un entorn en 3D i té opcions com modificar la casa en la que
viuen els personatges. Aquesta és força real però no ofereix cap mena de so al moviment, impacte o
fregament dels objectes i és un clar exemple de la mancança de so que existeix en la majoria de
videojocs.

Mons Virtuals: Home i Second Life

Home PS3
Home PS34 és en l'actualitat el món virtual més avançat i el que per tant, millor ha
implementat el so en els seus espais. A Home, podem fer infinitat de coses, ja sigui jugar al
billar, als escacs, a carreres de cotxes, d'avió, jugar a bitlles, al pòquer... i moltes més coses.
Cadascuna d’aquestes té sons reals incorporats que intenten augmentar la sensació de
realisme, aquests però són tots d’automàtica reproducció al produir-se una certa acció, és a
dir, que no tenen la possibilitat de fer un so o altre depenent de la interacció, a temps real.
Una cosa però que si que és a temps real, és el fet de modificar la sala que tot usuari té, en la
qual aquest la pot modificar al seu aire i incorpora certs avanços sonors interactius. Podem per
exemple agafar, deixar anar, arrossegar i col·locar els mobles i objectes que tinguem allà on
vulguem en 3 dimensions (exemple d’això en el minut 7:12 de http://www.youtube.com/

2
http://www.rhythmheaven.com
3
http://en.wikipedia.org/wiki/Toshio_Iwai
4
http://es.playstation.com/psn/pshome/

3
Capítol 2: Eines Utilitzades

watch?v=UCWYG2syuhI). L’avanç principal és doncs, que en la interacció dels mobles, i en


concret si el deixem anar des de més o menys alçada, el so és diferent, fent relació a la força
amb la qual és impactat contra el terra. El problema però, és que el so no és diferent si
l’impacte és contra fusta, contra un metall o contra una catifa, sinó que són sons bàsics que si
que simulen un impacte, però que mai ho fan d’una forma del tot real. Una altra vegada aquí,
tot i ser una aplicació recent, podem veure com tampoc han implementat cap mena de so de
fregament quan arrosseguem els objectes per la sala.

Second Life
Second Life és un altre dels mons virtuals més populars que existeixen a Internet. Aquest és un
dels primers que hi va haver i el que més usuaris registrats té d'arreu del món. Podem fer
infinitat de coses que ens fan sentir com si tinguéssim una altra vida. Aquest món però, té
moltíssimes mancances en relació al seu realisme, tant a nivell sonor com gràfic. Això es degut
a la dificultat grandiosa que existeix en el processament de tot i la reproducció a temps real de
tots els sons que hi hauria d’haver en les diferents interaccions possibles que existeixen en un
món virtual (Richard Bartle 2003).

Objectius i metodologia
Els objectius principals que em vaig plantejar en la realització d'aquest treball de recerca van
ser:
 Aprendre a fer recerca en l'àmbit de l'enginyeria informàtica
 Aprendre a utilitzar les eines per enregistrar so tant dins com fora de l'estudi
d'enregistrament
 Entendre les propietats del so i aprendre a treballar-lo amb eines informàtiques
 Aprendre a programar amb un llenguatge informàtic
 Aprendre a dissenyar i implementar una aplicació informàtica amb uns requeriments
específics
 Dissenyar i implementar un sistema interactiu sonor, senzill però el més similar
possible a la realitat
 Poder demostrar com el so millora la interacció a temps real en els entorns virtuals

Per a assolir aquests objectius primer vaig aprendre a enregistrar i entendre el fenomen sonor
i paral·lelament vaig aprendre a programar amb un llenguatge informàtic, Processing. Els
aspectes fonamentals del treball els vaig anar desenvolupant a mida que anava implementant
el sistema informàtic que he realitzat, Boxound. Programant l'aplicació he anat trobant
problemes i buscant solucions utilitzant les eines que he après.

Un cop implementat el programa informàtic he pogut demostrar la rellevància del so en els


mons virtuals, objectiu principal d'aquest projecte.

Breu descripció del contingut del treball


Aquest document està estructurat en cinc capítols i dos annexos. El primer capítol és aquesta
mateixa introducció, on he presentat la meva motivació pel treball i que explicat alguns
treballs previs que m'han servit de referència. En el segon capítol descric i introdueixo les eines
que he utilitzat, tan de programari com de maquinari. En el capítol tres descric la feina més
important que he fet en aquest treball, especialment a nivell tècnic. En el capítol quatre

4
Capítol 2: Eines Utilitzades

presento Boxound i el seu funcionament des del punt de vista de l'usuari. En el darrer capítol,
el cinc, resumeixo el treball realitzat i els problemes que he tingut, proposant també què
m'agradaria fer si pogués seguir treballant en aquest tema.

Després dels capítols he inclòs un apartat de referències i dos annexos. En el primer annex
descric breument algunes parts del codi que he escrit i que considero més rellevants.
Finalment, en el segon annex, incloc els passos que he seguit per a construir un dispositiu, la
barra sensora, que faig servir al treball.

5
Capítol 2: Eines Utilitzades

Capítol 2: Eines Utilitzades


En aquest capítol presentaré les eines utilitzades per a la realització d'aquest treball, tant a
nivell de programari com de maquinari.

Processing
Un dels aspectes fonamentals del treball ha estat el de dissenyar i escriure un programa
informàtic. Programar és comunicar-se amb l'ordinador, donar-li instruccions per a que faci les
feines que se li demanen. Aquest codi/instruccions s'han d'escriure amb una sintaxis
determinada (diferent amb cada llenguatge) per a què la màquina ho entengui.

L'entorn de programació que he utilitzat en el treball ha estat Processing5, que està basat en el
llenguatge Java. Aquest entorn ha estat creat bàsicament per a programar aplicacions que
utilitzen imatges, animació i so. Processing està enfocat a l'ús de la programació amb finalitats
artístiques i de disseny. També és molt útil per aprendre a programar ja que la simplicitat de la
interfície facilita la utilització del codi. Una breu explicació de Processing la podem trobar a la
seva web:

"Processing is an open project initiated by Ben Fry and Casey Reas. It evolved
from ideas explored in the Aesthetics and Computation Group at the MIT Media
Lab. The project is currently improved and maintained by a small team of
volunteers."

6 7
"Processing és un projecte obert que va ser iniciat per Ben Fry i Casey Reas . Va
sorgir de les idees explorades al Aesthetics and Computation Group del MIT
Media Lab. El projecte és actualment millorat i mantingut per un petit grup de
8
voluntaris ." (Traducció literal)

En realitat, Processing és Java i per tant el que faré és explicar una mica què és això de Java.
Java és un llenguatge informàtic que fou dissenyat per James Gosling i els seus companys a Sun
Microsystems9 l'any 1990. Des del seu naixement fou pensat com un llenguatge orientat a
objectes, és a dir, que segueix la filosofia de programar mòduls senzills. Aquests mòduls o
objectes, són un tipus abstracte de dades que encapsula tant les dades necessàries com les
funcions per accedir-hi. Per a trobar més informació sobre Java hi ha molts llibres però un dels
mes recomanats és el llibre de John S. Dean (2009).

Processing és doncs un entorn de programació que utilitza Java i que fa servir llibreries per a
facilitar la programació d'aplicacions complexes. Una llibreria és una col·lecció de classes
escrites en Java que realitza tasques concretes i que poden ser útils per a desenvolupar
programes concrets. Per a més informació sobre Processing, el llibre més recomanat és el que
han escrit els mateixos desenvolupadors inicials de Processing: Ben Fry i Casey Reas (2007).

5
http://www.processing.org/
6
http://benfry.com/
7
http://reas.com/
8
http://processing.org/about/people.html
9
http://www.sun.com/

6
Capítol 2: Eines Utilitzades

Fig 1: Interficié de l'entorn de programació Processing.

Les llibreries, com tot Processing, han estat desenvolupades per gent d'arreu del món que
voluntàriament ha contribuït en aquest projecte. Així doncs, Processing és un projecte que
s'actualitza i es desenvolupa de forma voluntària per la gent que l'utilitza. És programari lliure i
segueix la filosofia oberta d'aquest tipus de programari.

Algunes de les llibreries utilitzades en la programació que vaig realitzar pel treball són:

Ess r2
Ess r210 és una llibreria de so desenvolupada per Krister Olsson que permet carregar un so
mostrejat a l'aplicació i modificar-lo. Permet tractar sons amb format WAV, AIFF, MP3, AU i
altres formats estàndard. Actualment és la llibreria més especialitzada i complexa en l'àmbit
del so dins de Processing.

Pphys2D
Pphys2D11 és una llibreria desenvolupada per Jean-Maxime Couillard que implementa un
sistema de física molt potent i que combina funcions de dibuix eficients. Permet
aplicar efectes físics a objectes gràfics d 'una manera força senzilla i ràpida.

Física
Física12 és una llibreria basada en la llibreria Pphys2D i desenvolupada per Ricard Marxer,
investigador del grup de recerca en el que vaig treballar per iniciar aquest projecte. Va ser

10
http://www.tree-axis.com/Ess/
11
http:/pphys2d.jmcouillard.com/
12
http://www.ricardmarxer.com/

7
Capítol 2: Eines Utilitzades

creada amb una concepció diferent dels elements físics que disposa Pphys2D, amb més
opcions i informació en relació a impactes.

Wrj4P5
Wrj4P513 és una llibreria desenvolupada per Classiclll14 que permet comunicar-se amb el
comandament de la Wii a través d'un dispositiu Bluetooth.

Les aplicacions creades amb Processing s'anomenen Sketches. Dins d'aquests podem trobar
diverses pestanyes que formen part del mateix Sketch i que l'única funció que tenen és la
d'ordenar i organitzar-lo, de manera que sigui més entenedor i fàcil de manipular (mirar fig.1).
Quan exportem el Sketch, aquest ja no s'acostuma a dir així, sinó que passa a ser una aplicació,
que podem obrir i manipular de manera automàtica sense la necessitat de tenir les llibreries
que havíem utilitzat en la creació prèvia del Sketch.

Freesound.org
Freesound15 és una comunitat web per al intercanvi de sons basat en llicencies Creative
Commons. Aquesta web permet als usuaris carregar, escoltar i compartir sons. Va ser creat al
grup de recerca de la Universitat Pompeu Fabra (MTG - Music Technology Group16).

Creative Commons és un conjunt d'especificacions legals que permeten als creadors de


continguts, text, imatges, música,... protegir la seva autoria. Al voltant de Creative Commons
s'ha creat una organització dedicada a facilitar que les persones comparteixin i construeixin
sobre la feina d'altres, fent-ho legalment. Es posa èmfasis en llicencies lliures que permeten
compartir, remesclar, utilitzar comercialment o qualsevol combinació d'això. Per a entendre la
filosofia o el pensament que hi ha darrera de Creative Commons es pot llegir un dels llibres del
creador de Creative Commons, Lawrence Lessig (2004).

Freesound.org actualment està recolzada per una comunitat de més d'un milió d'usuaris i
conté més de 88.000 sons, que han estat aportats per gent d'arreu del món.

He fet servir Freesound per guardar tots els sons que he enregistrat.

OpenProcessing.org
OpenProcessing17 és una comunitat web per al intercanvi de Sketches i codi de programació
basat en llicencies Creative Commons. Aquesta web permet als usuaris carregar, veure,
interactuar, compartir i agafar Sketches creats amb Processing d’altres usuaris de forma lliure i
legal.

He fet servir OpenProcessing per a guardar el codi i el programa que he desenvolupat,


Boxound.

13
http://es.sourceforge.jp/projects/wrj4p5/wiki/EnglishHere
14
http://www.geocities.jp/classiclll_newweb/
15
http://www.freesound.org/
16
http://mtg.upf.edu
17
http://openprocessing.org/

8
Capítol 2: Eines Utilitzades

Adobe Photoshop CS4


Adobe Photoshop18 és una aplicació que serveix per a la creació, edició i retoc d'imatges.
Desenvolupat per la companyia Adobe Systems és un dels programes més reconeguts per
l'edició d'imatges i el més utilitzat arreu del món. Per a trobar més informació sobre com
funciona Adobe Photoshop es pot mirar el llibre de Adobe Creative Team (2009).

He fet servir Photoshop per a crear i editar les imatges i elements gràfics de l’entorn de
Boxound.

Programes d'edició d'àudio - Audacity, Adobe Soundbooth CS4 , Sony Sound


Forge
Aquests són els diversos programes utilitzats per a l'edició de so, cadascun amb
característiques específiques que el fan més útil en una tasca o altra, per exemple:

Audacity19 és un programa lliure que l'he utilitzat per a modificar el ritme, la velocitat, el
volum... i algunes altres característiques dels sons que he enregistrat. És dels més senzills i
fàcils d'utilitzar i és programari lliure.

Adobe Soundbooth20 m'ha servit per a retallar el so, millorar la seva qualitat i etiquetar-lo per
a després identificar-lo fàcilment. La seva semblança amb Adobe Photoshop CS4 i de
funcionament típic en els programes de la empresa Adobe, va facilitar-me molt el seu us.

Sony Sound Forge21 em va servir per a la modificació del to i també del ritme, velocitat i volum
d'una forma més precisa i professional. És un programa molt útil i força famós en relació a la
edició de so, bàsicament per què ofereix una gran varietat de funcions i filtres, encara que
d'una forma bastant complexa i difícil d'entendre.

Gravadora de so - Sony PCM-D50


Aquesta és la gravadora que vaig fer servir per enregistrar tots els sons fora de l'estudi
d'enregistrament. Sony PCM - D5022 és una gravadora de so que permet enregistrar
professionalment fins a una velocitat de mostreig de 96 KHz i una resolució de 24 bits. Té 4 GB
de memòria interna flash i dos micròfons incorporats que tenen la possibilitat de ser orientats
de diferents maneres. La gravadora PCM - D50 és una gravadora professional que permet
treballar tant dins l'estudi d'enregistrament com al carrer.

Estudi d'Enregistrament
Un estudi d'enregistrament és un espai dissenyat per a poder enregistrar i treballar amb el so
amb qualitat professional.

L'estudi que vaig fer servir és el del Institut Universitari de l'Audiovisual, un centre de la
Universitat Pompeu Fabra de Barcelona que té al seu abast quatre sales dedicades a l'estudi i

18
http://www.adobe.com
19
http://audacity.sourceforge.net/?lang=es
20
http://www.adobe.com
21
http://www.sonycreativesoftware.com/soundforge
22
http://pro.sony.com/bbsc/ssr/product-PCMD50/

9
Capítol 2: Eines Utilitzades

enregistrament del so: la sala de gravació, la de control, la de postproducció i el laboratori de


música interactiva.

Les sales que vam fer servir més però,


van ser la de control i la de gravació,
que estan comunicades entre elles per
unes portes metàl·liques molt
gruixudes que eviten que el so passi
d'una sala a l'altra. La sala de control
disposa d'una taula de mescles que
permet el control de l'enregistrament
dels diferents micròfons situats a la
sala de gravació. Permet la modificació
de certs valors de la gravació, com el
volum d'entrada, sortida o la
comunicació entre les dos sales.
Fig 2: Sala de control i de gravació de l'estudi d'enregistrament

Wii Remote
Wii Remote23, també conegut amb el nom de WiiMote, és el controlador i comandament a
distància de la videoconsola Wii. Aquest comandament disposa d'un sensor que detecta els
moviments que els jugadors fan amb ell i els
trasllada a l'acció del joc, provocant una millor
sensació de realitat i intervenció en aquest. El Wii
Remote disposa d'un acceleròmetre que detecta
els canvis en la velocitat dels tres eixos (x, y i z).
Aquest mètode però, no ofereix gaire precisió, ja
que solament permet moviments en línia recta: ja
sigui saludar, empènyer o llençar, però no pot
identificar, per exemple, l'angle d'inclinació del
comandament.

El Wii Remote es pot utilitzar independentment de


la videoconsola, fent-lo servir com un controlador
Fig 3: Comandament Wii Remote amb la representeció genèric. Per exemple a Processing existeixen
dels diferents moviments que pot captar
algunes llibreries que permeten el seu ús en els
Sketches. La llibreria utilitzada en el meu Sketch ha
estat la Wrj4P5, que he mencionat abans. Aquesta llibreria permet mitjançant Bluetooth i
alguns programes concrets, utilitzar el Wii Remote.

El Wii Remote també disposa d'un sensor que detecta la llum infraroja. Aquest tipus de llum
s'emet des d'un accessori de la videoconsola i és molt útil si volem més precisió en la
manipulació del Wii Remote. A aquest accessori se l'anomena barra sensora i està connectada
a la Wii mitjançant un cable. Per aquest cable l'únic que circula és corrent elèctric, cap tipus
d'informació, com a primera vista pot semblar, és a dir, que la barra sensora no dóna ni rep

23
http://www.nintendo.es

10
Capítol 2: Eines Utilitzades

informació de cap tipus, sinó que sols té un conjunt de Leds que emeten llum infraroja que pot
ser detectada per el Wii Remote i fer els càlculs necessaris.

L'ús d'aquesta barra sensora permet al Wii Remote ser utilitzat com a un dispositiu molt més
precís (fins a 5 metres de distància de la barra). A partir d'uns càlculs de triangulació es pot
saber la distància a la que es troba el Wii Remote de la barra i per tant, també del televisor o
pantalla, com, i cap a on s'està movent el Wii Remote segons el moviment captat dels llums
infrarojos, i finalment també, a partir de l'angle format entre aquestes llums, és possible
calcular la rotació.

El fet de que el Wii Remote utilitzi, en part, les llums infraroges per a funcionar, fa que puguin
haver problemes si hi ha altres elements que emetin llums infraroges pel voltant, ja siguin
espelmes, llanternes o llums incandescents.

Un gran avantatge és que al ser la barra sensora solament un conjunt de Leds infrarojos,
podem construir-ne una nosaltres mateixos, sense necessitat d'haver-la de comprar. Tota la
informació respecte la construcció de la barra sensora es pot trobar a l'Annex 2: Construcció
barra sensora, on s'explica com s'ha construït la barra sensora que he utilitzat.

Bluetooth
Bluetooth és una especificació industrial que possibilita la transmissió de dades entre diferents
dispositius, amb l'objectiu d'eliminar cables i connectors i oferir la possibilitat de crear petites
xarxes inalàmbriques i facilitar la sincronització de dades entre dispositius.

Hi ha dispositius de Bluetooth amb connector USB, de manera que si un ordinador no disposa


d'aquesta tecnologia però si d'una entrada USB, podem comprar un dispositiu Bluetooth i
incorporar-lo a l'ordinador.

En el nostre cas el Bluetooth és molt necessari en la incorporació del WiiRemote en l'aplicació.


El Wii Remote emet informació per Bluetooth de tots els sensors que té i per tant, aquesta
informació només pot ser captada amb l'ordinador mitjançant la tecnologia Bluetooth.
Sincronitzant els dos dispositius, podem utilitzar el WiiRemote en l'aplicació de l'ordinador.

Disposo de dos dispositius diferents Bluetooth amb connector USB per a sincronitzar el
WiiRemote amb l'ordinador: Trust - Ultra Small Bluetooth 2.1 USB Adapter24 i Belkin- Mini
bluetooth adapter25. El primer no semblava compatible amb la llibreria Wrj4P5 i per això vaig
haver de comprar el segon. Finalment, vaig veure que no era problema dels USB, sinó del
sistema operatiu instal·lat al ordinador. Al fer servir un sistema operatiu molt recent, Windows
7, i estar aquest encara en fase de prova, molts programes, aplicacions i dispositius encara no
funcionen bé. És per això, que m'he vist obligat a utilitzar un altre ordinador amb un sistema
operatiu anterior per al funcionament del meu Sketch.

Disposo d'un ordinador prestat per el MTG, un portàtil de la marca Lenovo amb Windows XP
de 32 bits com a sistema operatiu. En aquest ordinador tot ha estat més ràpid i fàcil, ja que no
hi ha hagut problemes d'incompatibilitat.

24
http://www.trust.com/products/product.aspx?artnr=16008
25
http://catalog.belkin.com/IWCatProductPage.process?Product_Id=398674

11
Capítol 3: Treball Realitzat

Capítol 3: Treball Realitzat


En aquest capítol explico el treball que he fet i el procés que he seguit per a realitzar-lo.
Començaré explicant primer l'estada al grup de recerca (MTG) ja que és el inici de tot el treball,
i després, detallaré els diferents aspectes en que he anat treballant.

Estada al MTG
Donat que la idea del treball i una part important d'aquest va sorgir de la meva estada durant
el mes de Juliol del 2009 al MTG de la UPF, en aquesta secció descric el que vaig fer allà.

La idea inicial del treball a realitzar durant l'estada era la d'estudiar com el so millora la
interacció a temps real en entorns virtuals i per això, havia de dissenyar i programar un entorn
interactiu sonor senzill amb Processing.

L'estada la vaig fer, com ja he esmentat, amb dos companys més. Cadascú havia de fer un
projecte diferent i jo vaig decidir centrar-me en representar la realitat concreta de la
manipulació d'objectes geomètrics senzills i els diversos sons que podem arribar a generar
col·lisionant aquests. El principal objectiu però, era el de produir la màxima sensació de
realitat, fent creure al usuari que allò que està veient és una representació acurada d'aquesta.
En definitiva, el meu propòsit era representar una realitat, una realitat de col·lisions i
manipulacions d'objectes.

L'estada la vam començar el 25 de Juny del 2009, treballant cada dia de la setmana des de les 9
hores del mati fins les 13 hores, i va durar fins el 26 de Juliol. Durant el temps que vaig estar
allà, vaig anar desenvolupant el projecte amb la fita de que al darrer dia de l'estada, havíem de
fer una presentació davant del grup de recerca explicant el que havíem fet fins llavors.

Programació amb Processing


Com que una gran part del treball es basa en la programació utilitzant el llenguatge Processing,
primer de tot vaig haver d'aprendre a programar el necessari per a fer el què volia.
Segurament va ser una de les parts més complicades, ja que vaig haver d'aprendre des de zero.
Per fer-ho doncs, em vaig dedicar a llegir, estudiar i realitzar una sèrie de tutorials disponibles
a Internet i a aplicar els coneixements que anava obtenint creant simples programes. Els
tutorials que vaig seguir van ser els següents:

 Tutorial de Joan Soler-Adillon de la UPF: http://joan.cat/processing/


 Tutorial de Josh Nimoy: http://www.jtnimoy.net/itp/p5/workshop/
 Tutorial a la web de Processing: http://processing.org/learning/
 Tutorial de Macarena Moreno:
http://www3.uclm.es/profesorado/symolina/index.php/cm/66-instalaciones-
interactivas

Apart d'això, vaig tenir l'ajuda de Ricard Marxer, investigador del MTG, que va ser el primer en
introduir-me a Processing i a ensenyar-me la seva filosofia i funcionament: les coses més
bàsiques i alguns dels trucs més efectius i necessaris a l'hora de treballar. També vaig tenir el
suport de Pere Planell i Marc Junyent, els companys amb els que vaig compartir l'estada al

12
Capítol 3: Treball Realitzat

MTG, que ja havien programat anteriorment amb altres llenguatges i els hi podia preguntar
quasi qualsevol dubte.

Per augmentar els coneixements de programació i en concret de Processing, existeix un llibre


molt bo de Daniel Shiffman (2008).

Enregistrament de sons
Una part important del treball ha estat l'enregistrament dels sons dels objectes a representar a
Boxound, per tant he hagut d'aprendre sobre enregistrament de sons.

Per conèixer les propietats del so, com es comporta en determinades circumstàncies, les
diferents maneres de captar-lo i com descriure'l d'una manera entenedora i eficient, vaig haver
de gravar diversos sons per després editar-los i modificar-los. D'aquesta manera, vaig entendre
què s'ha de fer per gravar un so amb bona qualitat i com s'han de gravar en determinades
situacions; com quan per exemple hi ha vent que impedeix que s'escolti bé, o simplement
sorolls exteriors que no desitgem escoltar. Diversos sons que vaig enregistrar per entendre tot
aquest procés estan penjats a la web de Freesound: http://www.freesound.org/
packsViewSingle.php?id=5251.

Després d'entendre com es graven els sons i com es comporten, vaig haver d'enregistrar els
sons que veritablement m'importaven, ja que després em servirien per l'aplicació que volia
crear. Per això, abans de tot vaig haver de pensar què és el que volia representar, les
possibilitats de sons diferents que hi ha en fregar o impactar dos objectes i com fer-ho per a
reproduir aquets sons d'una manera fidel a la realitat.

Així doncs, vaig decidir quins serien els materials que utilitzaria en l'aplicació i vaig creure que
la fusta i el metall serien els més adequats; són dos materials que poden oferir una gran
varietat de sons i a més tenen una textura suficientment comú com perquè la gent la pugui
reconèixer. És a dir, que no és el mateix representar un bloc de plàstic que un bloc de fusta, ja
que aquest segon té una textura única, diferent i pròpia del material que a simple vista
reconeixem què és, i en canvi, un bloc de plàstic pot tenir una infinitat de textures, molt
diferents i poc pròpies del material, ja que hi ha de molts tipus i colors.

Després d'això vaig pensar en totes les interaccions possibles que hi ha entre dos objectes, en
concret, dos cubs i una superfície (taula). Vaig tenir com a base que tots els sons produïts en
les diferents interaccions havien de ser pròpies d'aquestes, sent un so únic i diferent dels
altres, i vaig pensar en les següents interaccions:

 Impacte d'un cub contra una taula amb la cara plana


 Impacte d'un cub contra una taula amb la cantonada del cub
 Impacte d'un cub contra un altre cub
 Impacte d'un cub contra un altre cub amb la cantonada d'un dels cubs
 Fregament d'un cub sobre una taula amb la cara plana del cub
 Fregament d'un cub sobre una taula amb la cantonada del cub
 Fregament d'un cub sobre l'altre cub amb les dos cares dels cubs planes
 Fregament d'un cub sobre l'altre cub amb la cantonada d'un d'ells

13
Capítol 3: Treball Realitzat

Un cop determinades les interaccions possibles vaig haver de gravar-les; escollint els objectes
que utilitzaria per a produir els sons. Vaig buscar uns objectes que fossin representatius
d'aquell material, que la gent al escoltar les seves interaccions els pogués reconèixer, ja que no
és el mateix fer impactar dos cubs petits que dos de molt grans, un de molt pesat, o un de buit
per dins.

D'aquesta proposició vaig arribar a la següent conclusió: No és tant important que el so que
gravis per a reproduir els sons sigui el real, sinó que ho sembli. És a dir, que si nosaltres estem
representant un so d'un impacte entre un bloc de fusta i una taula de metall, no és tan
necessari fer que el so produït sigui el de la interacció entre aquests mateixos materials, sinó
que sembli que ho sigui.

Les gravacions es van fer a l'estudi d'enregistrament del Institut Universitari de l'Audiovisual de
la Universitat Pompeu Fabra. Vaig haver de gravar, apart de totes les possibles interaccions, les
diferents forces amb les que es podien produir cadascuna d'elles, és a dir del so més fort al
més fluix.

Tots els sons enregistrats, un total de 150, estan disponibles a Freesound.org, adequadament
etiquetats, explicats i ordenats: http://www.freesound.org/usersViewSingle.php?id=1147362.

Programació de les interaccions


Una de les parts més difícils en la creació d'un programa informàtic interactiu és saber què
posar perquè la interacció generada per l'usuari a temps real produeixi l'efecte desitjat. És per
aquesta raó que en aquest apartat explicaré alguns dels passos seguits per a programar les
diferents funcions de l'aplicació creada i alguns dels problemes trobats al llarg d'aquest procés.
En l'annex 1 "Codi del Programa" he reproduït el codi d'algunes de les funcions més útils del
Sketch i també les que durant aquest apartat explicaré.

Creació de l'entorn
Primer de tot vaig haver de crear l'entorn en el qual es reproduirien les interaccions i els
objectes amb els quals es farien aquestes. Per a crear-ho vaig utilitzar la llibreria Pphys2D, que
em permetia distingir cada un dels objectes i així possibilitar els impactes, ja que sinó, es
traspassarien i no xocarien mai.

Aquesta llibreria permet donar certs valors als objectes de manera que els hi podem
augmentar el pes, el fregament que ofereixen vers altres objectes, la resistència que oposen
amb l'aire... i molts altres factors que produeixen una major sensació de realitat, encara que
no és fàcil trobar sempre els valors adequats.

Un cop acabat l'entorn en si, necessitava donar-li vida als objectes, donar a l'usuari la
possibilitat de poder interactuar amb ells. Vaig decidir provar de fer la interacció utilitzant el
teclat de l'ordinador, afegint una força determinada en la direcció que correspon a cadascuna
de les fletxes del teclat (amunt, avall, dreta i esquerra).

14
Capítol 3: Treball Realitzat

Fig 4: Imatge de l'entorn gràfic de l'aplicació.

Ara podia afegir ja els sons, però vaig decidir programar alguns dels diferents botons bàsics
que hi hauria en l'entorn perquè l'usuari pogués controlar algunes accions dels cubs. Vaig crear
un botó per augmentar el nombre de cubs, un altre botó per a poder canviar el material del
primer cub i, si existia, també del segon, i un botó per canviar el material de la superfície (mirar
fig.4). En definitiva, vaig crear un esbós del programa sense incloure l'àudio, de manera que
podia apreciar perfectament la necessitat d'afegir so per a simular la realitat.

La creació dels botons va ser fàcil, encara que molt lenta. La idea que vaig tenir per a fer uns
botons que em permetessin accionar certs aspectes del programa va ser la de crear quadrats
amb una imatge d'un botó assignada per a cada un d'ells, de manera que quan pressionaves
sobre un dels "quadrats" amb el ratolí, la imatge d'aquest canviava a la vegada que accionava
el que designava el botó, i quan deixaves de pressionar, la imatge tornava al seu estat inicial.

Els canvis d'imatge no eren necessaris, però li donaven més professionalitat al programa. El
procés va ser lent com ja he dit, però no sols per haver de crear totes les imatges dels botons
amb el programa Photoshop, sinó que també per la necessitat de trobar els valors de posició
de cadascun dels botons en l'entorn gràfic. És a dir, fer uns petits càlculs per determinar el
rang d'ocupació dels botons en la pantalla per així quan pressionàvem a sobre del botó
s'accionés aquest i no un altre, i si pressionàvem una mica fora del botó, aquest ja no
s'accionés.

Els sons dels impactes contra la superfície


Per afegir els diferents sons, primer havia de pensar la forma en què quan l'objecte impactés
contra la superfície es reproduís un so i a més es reproduís aquell que representava la força
amb la qual s'havia impactat, la manera com s'havia impactat i els objectes que s'estaven
impactant.

15
Capítol 3: Treball Realitzat

El primer que volia era simplement que quan el cub impactés contra la superfície sonés un so
d'un impacte que vaig triar al atzar. La primera idea que se'm va ocórrer, força lògica, va ser la
d'utilitzar una funció que té la llibreria Pphys2D que et dona la informació de si l'objecte està
tocant o no a un altre en concret. D'aquesta manera vaig especificar que quan l'objecte toqués
la superfície em reproduís el so, i ho feia, si, però no parava de sonar. El so es reproduïa
constantment sense parar fins que no finalitzaves el programa, la qual cosa era bastant lògica,
perquè simplement havia dit que el so es reproduís quan toqués la superfície i en cap moment,
havia dit quan havia de parar.

Així doncs, necessitava parar el so i ho vaig aconseguir seguint aquesta mateixa funció. Vaig
posar que si no estava tocant la superfície, el so parés. El so parava, però ho feia just en el
moment en que el cub deixava de tocar la superfície, ja que mentre la tocava, el so s'anava
reproduint sense parar.

El que havia de fer doncs, era que el programa detectés que el cub havia començat a tocar la
superfície i que mentre aquest l'estava tocant, no s'havia de reproduir el so, sinó que es
reproduís solament una vegada: quan passava de "no està tocant" a "està tocant"; quan el cub
no estava tocant la superfície estava en estat "no està tocant", quan tocava passava al estat
"està tocant", i quan deixava de tocar tornava al estat "no està tocant".

Per a fer això vaig haver de crear una nova classe que afegís una funció que apliqués els
anteriors aspectes. Podem veure la creació de la nova classe a l'annex 1: Codi del Programa, en
l'apartat creació de la nova classe per detectar els impactes.

Ara ja, utilitzant aquesta nova classe el so es reproduïa d'allò més bé, però em faltava distingir
la força amb la qual impactava contra el terra per així determinar els sons adequats per
acompanyar la força. Vaig pensar si modificar el volum o simplement canviar el so. Vaig arribar
a la conclusió, mitjançant algunes proves amb objectes, que el so és força diferent quan
impactem dos objectes amb una força gran o petita, que no és solament si baixem el volum o
el pugem depenent de la força; així que si el que volia era el major realisme, era lògic gravar
varis sons fets amb diferents forces i posar un o un altre depenent de la força que es produïa
en l’impacte.

Vaig decidir provar amb una funció de la llibreria Pphys2D que calcula la velocitat, dient que
m'escrivís a la consola (mirar fig.1) els valors de la velocitat Y just en l'instant en què l'objecte
tocava la superfície. Els valors eren diversos i vaig anar provant amb diverses forces (mantenint
més o menys temps les fletxes del teclat i començant el moviment del cub des de més amunt o
més avall) quins valors em donava i els vaig anar apuntant. De manera que al final, tenia uns
certs intervals de velocitats que els definiria amb un so determinat depenent de la força que
indicava aquell interval de velocitats.

Però també em calia distingir si el impacte del cub es feia amb la cara plana o amb la
cantonada. Per això vaig haver de pensar-hi molt i al final, se'm va acudir que la distància del
centre de l'objecte respecte el terra quan està tocant a la superfície no és la mateixa si
l'objecte està inclinat, que si no ho està (mirar fig.5).

16
Capítol 3: Treball Realitzat

Fig 5: Imatge mostrant la diferència de distància entre el centre del cub i la superfície en un cub pla i un inclinat

Utilitzant aquesta idea i una funció que t'obté la posició del centre del cub en l'entorn, l'únic
que vaig fer va ser calcular aquesta posició en l'instant en què impactava contra la superfície, i
si estava entre uns valors prèviament calculats, significava que impactava amb la cara plana,
però si superaven un límit que vaig determinar, significava que estava impactant amb la
cantonada.

Ja només em quedava distingir els materials que s'estaven utilitzant en els impactes. I el que
vaig fer va ser crear una variable booleana que es deia "fusta", que era certa quan el material
del primer cub era de fusta, i falsa quan pressionàvem el botó de canvi de material del primer
cub, que llavors s'utilitzava el metall. Per a distingir el material del segon cub vaig fer el mateix,
però en comptes de "fusta", vaig posar-li el nom de "fusta2", i canviava de cert a fals quan
pressionàvem ara sobre el botó de canvi de material del segon cub. Encara faltava distingir la
superfície, i ho vaig fer utilitzant el mateix procediment, però ara amb el nom de "platejat",
que era cert sempre i quan la superfície era la de metall.

Fetes totes les combinacions, vaig començar a fer les funcions que determinarien quins sons
reproduir en cada cas, com per exemple dient: si fusta=cert, platejat=fals, velocitatY<720,
velocitatY>650 i posicióY<480 reproduir el so del bloc de fusta que impacta contra la taula de
fusta amb la cara plana i una força de 680 unitats aproximadament. Al final vaig escriure un
total de 150 funcions diferents pels sons dels possibles impactes contra la taula.

Els sons dels impactes cub contra cub


Per afegir i crear els sons que es produeixen en impactar un cub contra l'altre va ser un
problema més difícil i complicat de solucionar. Abans, en els impactes d'un cub contra la
superfície era més fàcil que en el que ara em disposava a fer; la superfície en els altres està
sempre fixa, a diferència que en els cubs, que es mouen quasi sempre, disposen de quatre
cares cadascun d'ells (no només una com la superfície) i la velocitat d'un d'ells no és
significativa de la força que fa, ja que els dos tenen velocitats independents.

Per aquestes raons, necessitava algunes coses que la llibreria Pphys2D no m'oferia, així que
vaig decidir canviar de llibreria. Em disposava ara doncs a utilitzar la llibreria Física de Ricard
Marxer, desenvolupada a partir de la Pphys2D, però més centrada en els impactes i amb més
funcions incorporades. Si hagués utilitzat des de bon principi aquesta llibreria, no m'hauria
sigut necessària la creació d'una nova classe per a distingir els impactes i reproduir un únic so,

17
Capítol 3: Treball Realitzat

però simplement ho vaig haver de fer perquè la llibreria en aquells moments no estava encara
finalitzada i no era clar que en Ricard la finalitzés abans d'acabar el projecte.

En aquesta llibreria existeix una funció que determina quan es produeix un impacte entre dos
objectes concrets. El que vaig fer doncs va ser utilitzar aquesta funció i dir que quan es produís
un impacte entre els dos cubs, calculés la força normal del impacte, sent aquesta un vector
format per les velocitats en eix X i eix Y dels dos cubs en valor absolut.

La funció anterior no va ser fàcil i van caldre nombroses proves abans d'arribar-hi. Ara només
calia distingir els valors calculats i fer els intervals necessaris per a col·locar els sons gravats de
les diferents forces produïdes. Vaig crear fins a deu intervals diferents que anaven del impacte
amb la força més petita que es podia produir fins a la màxima.

Com he dit abans, també havia distingit com un altre apartat a gravar els sons dels impactes
d'un cub contra un altre cub amb la cantonada d'un d'aquests cubs, però la dificultat que això
proposava i la no gran diferència respecte els sons que produïen uns i els altres, vaig decidir al
final de no fer-ho. Tot i així, els sons es van gravar igualment i podem comprovar la semblança
que hi ha entre ells aquí:

 Impacte amb la cantonada d'un cub contra la cara plana d'un altre cub:
http://www.freesound.org/samplesViewSingle.php?id=77984
 Impacte cub amb cara plana contra un altre també amb cara plana:
http://www.freesound.org/samplesViewSingle.php?id=77954

El so de fregament
El so de fregament és un dels més ignorats per no dir el que més en l'àmbit d'interacció
d'objectes en els entorns virtuals que existeixen. El fregament és una acció molt difícil de
realitzar o simular, ja que no és una acció que genera un so curt, ràpid i constant, en el sentit
de que és sempre igual, sinó tot el contrari.

Per fer-ho doncs, vaig tenir forces problemes, les primeres funcions que creava reproduïen el
so, però al igual que en els inicis dels impactes contra la superfície, el so s'anava reproduint i
reproduint, acumulant-se d'una manera successiva fins que el cub no deixava de tocar.
Utilitzava una funció que determina si un objecte està tocant a un altre, de la llibreria Física.

Una altra prova va ser regular el volum segons la velocitat, però no calculava la velocitat en
cada punt que l'objecte es movia, és a dir, que no hi havia una degradació del so a mida que
anava disminuint la seva velocitat, sinó que es començava a reproduir el so amb el volum
segons la velocitat inicial i quan la velocitat era 0, deixava de sonar, sent el volum en el just
instant anterior igual al del principi del moviment.

Per a solucionar això vaig tenir una idea, que el so no parés mai de reproduir-se. Però per a
què no parés mai de reproduir calia que el so fos un so en forma de "loop", és a dir, un so que
reproduït sense parar no es notés ni el seu inici ni el seu final. Així doncs, utilitzant el Adobe
Sound Forge vaig aconseguir l'efecte desitjat en els sons de fregament. Ara en l'aplicació, el
que vaig fer va ser fer una funció que regulés el volum del so de fregament que es reproduïa
constantment només quan tocava la superfície i segons la velocitat en valor absolut que es
movia l'objecte, i va funcionar! La dificultat de càlcul que existeix però en haver de captar la

18
Capítol 3: Treball Realitzat

velocitat en cada un dels instants del moviment del cub provoca certa lentitud en alguns
moments de molta interacció. Al igual que en els impactes, també vaig distingir el fregament si
es feia amb la cara plana o amb la cantonada seguint el mateix procés de la posició del centre
en l'entorn.

Al acabar, vaig modificar també la resistivitat que oposaven els materials contra la superfície,
sent més difícil de lliscar el cub sobre la fusta que sobre el metall, i el mateix pels diferents
cubs. D'aquesta manera augmentava la sensació de realitat en l'aplicació, tot i sent un fet poc
significatiu i difícil de percebre. Amb això vaig arribar a la conclusió de que: els petits detalls,
per molt petits que siguin, afegeixen molta sensació de realitat i credibilitat quan són
percebuts per la persona que interactua amb l'aplicació.

Interacció amb el ratolí


Un cop fets tots els impactes, vaig adonar-me que a la interacció li faltava alguna cosa, un pèl
més de realisme, no en aspectes gràfics ni sonors, sinó en relació a la llibertat de control de
l'objecte. Podia controlar els cubs amb el teclat però quasi no tenia llibertat, ja que solament
podia moure cap amunt i avall, a la dreta i a l'esquerra i a les conseqüents diagonals sumant
dos dels anteriors moviments. Per aquesta raó, vaig decidir començar a pensar la manera de
com utilitzar el ratolí com a element per a interactuar en l'aplicació, ja que m’oferiria un gran
ventall més de moviments possibles a fer amb els objectes.

Ricard Marxer em va comentar l'existència d'una funció que creava una mena de corda
invisible amb la qual podies controlar objectes a partir del ratolí. Per això, va implementar
primer ell aquesta funció a la seva llibreria Física i després em va explicar el seu funcionament,
podent ajustar la tensió de la "corda" o la seva longitud depenent de la finalitat.

Així doncs, vaig aplicar aquesta funció de manera que just allà on clicaves del cub es creava la
"corda", i amb aquesta podies maniobrar el cub com si es tractés d'un titella que té un extrem
en el punt clicat i l'altre en la fletxa del ratolí. Una vegada creada la funció, vaig anar ajustant
els diferents valors de la funció fins que em va agradar el seu resultat.

Últims retocs i noves funcions


L'aplicació estava ja quasi finalitzada, només calien alguns últims retocs. Per a fer-ho,
simplement vaig estar provant el programa en busca d'errors i a mida que sorgien els anava
arreglant. És possible segurament encara trobar algun error, ja que al haver un munt de
possibilitats en les interaccions, fa que hi hagi algunes coses que encara no les hagi arribat a
provar.

Alguns dels retocs últims que vaig fer van ser la creació del control del segon cub amb el teclat
(abans sols es podia controlar el primer) o una actualització dels impactes dels cubs amb la
cantonada contra la superfície, ja que com he comentat anteriorment aquesta interacció
funciona a partir de l'alçada a la que es troba el centre del cub respecte la superfície. Al haver
fet alguns retocs estètics i un d'ells, haver augmentat l'alçada de l'entorn del programa, havia
provocat sense adonar-me que ara tots els impactes que es produïen eren solament amb sons
dels cubs amb la cara plana, fet que va provocar la necessitat d'haver d'actualitzar de nou,
totes les funcions que anaven a través de distàncies respecte elements de l'entorn.

19
Capítol 3: Treball Realitzat

Al llarg de la creació de l'aplicació vaig tenir molts dubtes en quan a la manipulació que havia
de crear per als objectes. Aquests dubtes estaven relacionats en la necessitat de simular el fet
de deixar anar un objecte, per això, vaig decidir al final crear dos botons que representessin
aquesta acció: un botó que indiqués el fet de tenir agafat un cub i un altre que indiqués l'acció
de deixar-lo anar. Quan pressionaves el botó de deixar-lo anar l'únic que feia era augmentar la
gravetat de l'entorn i l'objecte queia en sec contra la superfície, simulant l'acció representada.

Després de provar-ho vaig decidir fer el botó d'una manera "intermitent", en el sentit que
només funcionava quan l'estaves pressionant amb el ratolí, i que quan el deixaves de
pressionar ja deixava de funcionar. Ho vaig fer simplement pel fet de que abans quan l'acció de
"deixat anar" estava activa encara podies controlar l'objecte, tot i que d'una manera molt
dificultosa degut a la gravetat. Això era totalment contradictori i no llògic, estava dient que
havies deixat anar el cub però en canvi, el podies seguir controlant. Per això vaig decidir fer el
botó d'aquesta manera, ja que així era impossible controlar el cub mentre el botó estava
pressionat, perquè per apretar el botó, havies de deixar primer el cub.

Una vegada implementat el botó, vaig afegir un altre petit detall: que els cubs rebotessin més
o menys al xocar contra el terra depenent de si eren de fusta o de metall, sent menor el rebot
de la fusta que el del metall, que és més gran.

Programació del Wii Remote


Al igual que en l'apartat anterior, aquí es van haver de programar moltes funcions diferents
característiques de la llibreria Wrj4P5. Aquesta llibreria no està gaire ben documentada i és
segurament aquesta la principal raó per la qual m'ha costat tant fer aquest apartat.

Primer de tot vaig instal·lar la llibreria i tots aquells elements necessaris per a què funcionés,
fet que em va portar molts problemes i vaig haver de, fins i tot, contactar amb l'autor de la
llibreria per a trobar la solució. Després de molts missatges intercanviats26 i molts intents
seguia sense trobar la solució. Per aquesta raó, vaig decidir provar de contactar també amb
una altra persona, una professora de la Universitat Politècnica de Catalunya, Lali Barrière27. Lali
és una professora de matemàtiques que ofereix classes de programació als seus alumnes
mitjançant el llenguatge Processing. Al haver treballat amb alumnes que han implementat la
Wii en els seus Sketches vaig intercanviar varis e-mails amb ella amb la finalitat de solucionar
els meus dubtes i problemes. Fet això però, encara seguia sense funcionar. Finalment, davant
l’impossibilitat a la que em trobava, vaig demanar prestat un ordinador amb un altre sistema
operatiu diferent al meu i en aquest, va funcionar. Així doncs vaig deixar informat a la
comunitat Processing de que si volia utilitzar aquella llibreria no ho fes amb el nou sistema
operatiu de Windows, el Windows 7.

Una vegada tot instal·lat i comprovat el seu funcionament, vaig buscar diferents Sketches per
Internet que utilitzessin aquesta mateixa llibreria. També vaig demanar-li a Lali Barrière si em
podia donar algun dels codis creats pels seus alumnes amb la intenció de trobar-ne un que fos
similar al que jo volia fer: un moviment mitjanament precís en el qual controlessis la rotació i la
posició utilitzant una cosa similar a la barra sensora de la consòla Wii.

26
http://processing.org/discourse/yabb2/YaBB.pl?num=1186928645/195
27
http://www-ma4.upc.edu/~lali/

20
Capítol 3: Treball Realitzat

La intenció de la cerca d'un Sketch similar era la de facilitar la feina, però no ho va fer massa ja
que no en vaig trobar cap de similar, així que em vaig trobar novament amb una situació de no
poder avançar. Degut això vaig decidir contactar de nou amb l'autor, que em va dir que encara
no s'havia creat una forma per control d'objectes mitjançant la llum infraroja en Processing.
Em va ensenyar però, algunes coses útils, com un Sketch que havia fet ell que detectava la llum
infraroja i la dibuixava i un vídeo d'un noi que havia creat una manera molt precisa del control
del Wii Remote mitjançant quatre punts de llum infraroja28. Aquest últim però, no s'havia creat
mitjançant Processing, era molt difícil d'entendre i conseqüentment, d'aplicar i no era gaire
convenient de fer-ho seguint aquest mètode, així que no em va ser massa útil.

Gràcies al Sketch de les llums infraroges però, vaig poder imaginar que no seria gaire dificultós
fer que un objecte seguís la llum detectada pel programa, així que m'hi vaig posar a fer-ho.
Abans de tot, vaig consultar de nou al autor per saber què n'opinava i em va comentar que si
que seria possible segurament però que creia que tindria una forta limitació. Així doncs, vaig
decidir provar-ho ni que fos per afirmar la seva limitació o potser, el seu bon funcionament i
mètode.

Vaig dissenyar i construir una barra sensora (mirar Annex 2: Construcció de barra sensora).
Aquesta barra sensora consta de quatre punts de llum alineats, i així doncs, amb la informació
d'aquests punts, necessitava fer moure un objecte determinat. Abans de tot sabia que seria
força difícil, ja que què faria quan no detectés alguna de les llums infraroges? Aquestes no
eren sempre captades pel Wii Remote, sinó que molt poc, ja que aquest té un cert angle de
detecció que fa que si el mous una mica més d'aquest angle només veus tres, dos, un o cap
dels quatre llums que hi ha a la barra i per tant, perdem molta de la informació inicial.

Així doncs abans de tot vaig decidir provar-ho. La primera idea va ser la de calcular el centre
dels dos extrems de llum tant en l'eix X i l'eix Y per determinar la posició. Al no tenir informació
respecte cadascun dels leds independentment, sinó que solament sabia les posicions que
determinen les llums que detecta, vaig tenir forces problemes. El que feia doncs era agafar el
valor més gran i el més petit dels valors captats respecte l'eix X i el mateix per l'eix Y, els
sumava i després, els dividia entre dos. D'aquesta forma obtenia la meitat exacte entre
aquests dos punts extrems, just el que volia.

Funcionava molt bé si no movia massa el Wii Remote, però quan el movia una mica, l'objecte
es desplaçava de cop uns centímetres perquè una o més llums deixava de ser detectada. Això
però, certificava la seva limitació per culpa de la pèrdua de detecció d'algun dels leds, ja que al
no detectar un d'ells el valor màxim o mínim que corresponia al led desaparegut passava a ser
el led del seu costat i per tant, el punt mig també canviava i provocava un brusc moviment en
l'objecte controlat.

Així doncs, vaig pensar que dos dels quatre leds eren inútils, ja que segons la idea que estava
utilitzant de fer un càlcul de la posició central entre dos extrems, no calia res més que dos leds
una mica separats. D'aquesta manera a més, no passava de tenir un cert màxim a un altre, sinó
que simplement al desaparèixer un d'ells ja no hi havia ni un màxim ni un mínim, sinó que
aquests eren el mateix punt. Amb aquesta nova conclusió vaig arribar a una altre idea a provar,

28
http://idav.ucdavis.edu/~okreylos/ResDev/Wiimote/

21
Capítol 3: Treball Realitzat

fent que quan un dels dos leds desaparegués de l'angle de detecció del WiiRemote, no utilitzés
el mètode de control a través dels leds, sinó a partir dels sensors d'acceleració que disposa
aquest comandament. Aquest mètode a partir de l'acceleració és actualment el que s'utilitza
en tots els Sketches de Processing que fan servir la Wii com a dispositiu de control, exceptuant
el que jo estava creant. És un mètode molt més fàcil d'utilitzar però que té moltes mancances
depenent del que vulguis aconseguir, com la precisió de posició o alguns moviments que no
són possibles.

Per a la rotació, pensava que seria fàcil calcular-la a través dels mateixos leds, amb una simple
funció de trigonometria. Així que ho vaig provar: la funció que vaig aplicar va ser la del càlcul
del arc tangent de la divisió entre la diferència de la posició Y i la de les X dels dos leds
detectats. D'aquesta manera obtenia l'angle d'inclinació del WiiRemote i al aplicar-ho
funcionava força bé però hi havia errors novament quan un d'aquests leds deixava de ser
detectat i per això, gràcies a alguns Sketches, vaig veure que el càlcul de rotació a partir dels
sensors d'acceleració era bastant precís, així que lògicament, ho vaig utilitzar.

Fig 6: Funció del càlcul de la rotació a partir de la informació dels punts de llum dels leds infrarojos

Després d'un llarg procés doncs vaig aconseguir tenir un moviment precís però aquest tenia
una forta limitació com ja s'havia vist prèviament, ja que el moviment precís només era en un
requadre molt petit i això era insuficient per a representar la realitat d'interacció. Per culpa
doncs de que la possibilitat de interacció era molt petita, sumat de tots els problemes que
estava tenint, vaig pensar si valia la pena seguir i explicar només les desavantatges,
complicacions i impossibilitats que existeixen en el procés.

Finalment però, vaig decidir què ho seguiria intentant ni que fos per un temps més, provant
més mètodes. El que havia fet de provar que quan un dels dos leds deixava de ser detectat
passés a ser controlat per els sensors d'acceleració provocava un cert canvi en la manera de
control de l'objecte. Amb els sensors anava més lent i es notava molt a simple vista que hi
havia hagut un canvi. A més, aquest no era l'únic i més gran problema. Quan els dos leds
tornaven a ser detectats hi havia un desplaçament brusc de l'objecte. Això és degut a que els
controls per acceleració, com he dit, no són precisos i on apuntes no és on detecta, a
diferència dels leds, sinó que com el seu nom diu, funciona per l'acceleració del moviment que
li dones al Wii Remote. Per culpa d'això, l'objecte a partir de l'acceleració es mou i es col·loca
en un punt que no és l’apuntat amb el Wii Remote, i en canvi, quan els dos leds tornen a ser

22
Capítol 3: Treball Realitzat

detectats, el cub es col·loca en el punt on si que estem apuntant. És per aquesta raó, que el
cub fa un canvi de lloc bastant brusc i percebem clarament que hi ha hagut un error.

Per culpa d'aquestes complicacions vaig decidir al final deixar el funcionament per leds i fer-ho
tot a partir dels sensors d'acceleració del Wii Remote, tot i sabent que no eren del tot precisos.
D'aquesta manera no hi havia els canvis bruscos al haver de canviar entre el control dels leds i
l'acceleració, i el tamany de l'entorn podia ser tan gran com jo desitgés.

Ara però, encara em faltava una part molt important, implementar el nou sistema de
moviment al programa de manera que al impactar amb la superfície no traspassés, sonés i fes
totes les funcions normals que fa el programa del teclat i el ratolí. També, però menys
important, em faltava crear les funcions de manera que els botons del programa els pogués
controlar directament des del WiiRemote, però aquest apartat creia que seria força més fàcil
que l'altre, ja que per a crear aquestes adreces solament havia de dir que al clicar aquella tecla
del WiiRemote l'acció que determinava s'activés.

Així doncs, el primer apartat va ser molt difícil, primer de tot, perquè per alguna raó el cub
traspassava la superfície sense problemes i per tant cap so es reproduïa. Suposo que el fet de
que traspassés era un pèl lògic perquè estava dient que el cub es col·loqués allà on
l'acceleració detectava, de manera que si la detecció indicava que havia d'estar en un punt el
qual coincidia amb la superfície, es col·locava sense necessitat de comprovar què hi havia en
aquell punt. Això però, era només un pèl lògic perquè segons la llibreria Física, al crear dos
objectes i dir que els dos existeixen, en principi, sempre han de col·lisionar.

Vaig intentar provar especificant que si el cub tenia una posició fora dels marges de l'entorn,
es mantingués en aquell mateix lloc. És a dir, que si la superfície està a la posició Y de 30
respecte l'entorn i el cub té un costat de 100, per tal de que el cub al tocar la superfície parés i
no seguís, quan la posició Y del cub fos més petita que 80 (30+50 = 80 → la posició del cub es
determinada pel seu centre i per això s'ha de posar la meitat) el cub en la posició Y es quedés
en l'alçada de 80 i en l'eix X seguís detectant l'acceleració.

Aquest mètode funcionava força bé sempre i quan no hi hagués cap mena de rotació, ja que
com havia demostrat anteriorment, no està a la mateixa alçada el centre del cub quan està pla
que quan està inclinat, així doncs, quan el cub estava inclinat traspassava una mica. Vaig
pensar una funció que solucionés aquest error i finalment se'm va ocórrer fer una funció que a
més rotació del cub la distància a permetre el traspàs de l'objecte fos menor. Funcionava força
bé però per indeterminats errors de la llibreria Física l'objecte a vegades seguia traspassant.

Semblava que la interacció funcionava més o menys bé, però la part més important, el so,
seguia sense funcionar. Em vaig adonar que no era culpa de que no es detectés que el cub
tocava la taula ni res d'això, ja que si que ho feia, sinó per culpa dels intervals de força, que ara
eren molt menors que amb el teclat/ratolí.

Canviat això doncs, ja disposava dels sons, però encara alguns impactes no es reproduïen. Allò
era degut a que la força que indicaven alguns a vegades era molt petita quan en realitat
l'impacte semblava que havia sigut fort. Vaig arribar finalment amb això a una conclusió que ja
m’esperava feia temps: que incorporar la Wii com a dispositiu de control, precís i més

23
Capítol 3: Treball Realitzat

simulador de la realitat que no pas el ratolí no era del tot bona idea, però que seria interessant
seguir-ho provant.

Vaig decidir mirar quins eren els problemes del perquè el so del fregament tampoc no sonava.
Semblava que també era degut a que a la funció, la força que feia sonar el fregament hauria de
ser menor que amb el teclat/ratolí per a què d'aquesta manera, el so s’escoltés al reproduir-se.
Al canviar-ho per una força menor però, seguia igualment sense sonar. Després de provar
altres valors i de si el problema venia de la no detecció del cub tocant la superfície vaig donar-
me per vençut. A vegades sonava, la majoria de les altres, no ho feia.

Així doncs, vaig acabar d’arribar a la conclusió de que existeix una gran dificultat en quan al
control del WiiRemote si el que volem és controlar una interacció precisa i real de manera que
puguem fer col·lisionar objectes i provocar impactes o fregaments entre ells, i més difícil
encara, si a més a més, volem reproduir sons reals a mida que fem aquestes interaccions.

Finalment doncs, vaig pensar que la llibreria encara no havia estat prou desenvolupada i que si
per algunes coses anava molt bé, per altres encara no tant. Així que potser, en un futur,
segurament si que seria possible fer tot el que volia, però actualment és un desig una mica
difícil d'aconseguir.

Disseny de la interfície
Acabada tota la part de programació, va ser necessari canviar certs aspectes estètics del
Sketch. Vaig pensar alguns adjectius que voldria que definissin el disseny i finalment vaig
decidir que seria simple, intel·ligible i elegant.

Fig 7: Demostració d'alguns dels canvis estètics produïts

Al començament de tot els botons tenien ombres, reflexes i colors vius, en definitiva, amb una
finalitat funcional (fig.4). Però més endavant, vaig plantejar-me més seriosament l'aspecte i

24
Capítol 3: Treball Realitzat

vaig pensar que era molt millor que aquest fos simple, lògic i que tingués un punt d'elegància.
Per provocar aquest efecte doncs, vaig canviar els colors vius per a uns colors grisos, vaig
eliminar les ombres i reflexes que hi havia en els botons i vaig utilitzar una font més simple per
el número que determinava la quantitat de cubs (fig.7). Els dibuixos dels botons que
determinen si estan agafats o lliures eren abans poc entenedors, i el del teclat i ratolí eren
simplement dues fotografies. Per això, vaig replantejar-me també els dissenys que havien de
tenir aquests botons per tal de que facilitessin molt més l'enteniment i així, fer del programa
una aplicació per a qualsevol mena de públic.

25
Capítol 4: Presentació de l'Aplicació Boxound

Capítol 4: Presentació de l'Aplicació


Boxound
En aquest capítol presentaré l'aplicació informàtica que he desenvolupat, Boxound, des del
punt de vista de l’usuari, és a dir com si fos un manual d'ús. Especialment explicaré les
diferents possibilitats d'interacció que existeixen en l'aplicació i el funcionament dels diferents
elements de control.

Informació general de l'aplicació


 Nom de l'aplicació: Boxound 1.0
 Breu descripció: Simulació de la interacció visual i sonora que existeix entre objectes
de fusta i/o metall. El control de la interacció es pot realitzar mitjançant el ratolí, teclat
o WiiRemote.
 Data de publicació de la versió 1.0: 2/01/2010
 Sistemes operatius suportats: Linux, Mac OSX, Windows
 Llenguatge programació: Processing (java)
 Llicència de l'aplicació: Creative Commons Attribution-Share Alike 3.029
 Llicència del codi: Creative Commons GNU General Public License30
 Descàrrega del programa: http://openprocessing.org/visuals/?visualID=6761

Fig 8: Interfície gràfica de l'aplicació Boxound

29
http://creativecommons.org/licenses/by-sa/3.0/us/
30
http://creativecommons.org/licenses/GPL/2.0/

26
Capítol 4: Presentació de l'Aplicació Boxound

Descripció de la interfície
L'aplicació és un simulador de les interaccions que existeixen entre un o dos objectes quadrats
i una superfície plana. L’usuari pot moure amb el ratolí, el teclat o el WiiRemote els objectes en
l'espai i quan aquests impacten contra la superfície plana o entre si, s'escolta el so resultant de
l'impacte produït.

Hi ha dos materials a escollir per a cadascun dels elements de la interacció: fusta i metall.
Podem impactar l'objecte contra la superfície de diferents maneres, però la diferència del
resultat sonor radica en si l’impacte es fa amb la cara plana o amb la cantonada. Si afegim un
segon cub en l'entorn també existeix la possibilitat d'impactar els cubs entre sí, però en aquest
cas, no hi ha diferència sonora si es fa amb la cara plana o amb la cantonada. També hi ha la
possibilitat de fregar els objectes i provocar d'aquesta manera un so de fregament. Els sons
produïts són diferents depenent de: (1) la força amb la que es realitza l'impacte o el
fregament, (2) del material dels dos objectes impactats o fregats, i (3) en el cas que impacti o
fregui contra la superfície, de si es fa amb la cara plana o amb la cantonada.

La interacció en l'entorn gràfic (fig.8) es fa a través de dos menús. En la part superior es


presenta el menú que anomenat de manipulació i en la inferior el de modificació.

El menú de manipulació conté els botons que intervenen en la manipulació directa dels
objectes de l'entorn, ja sigui si volem tenir agafat l'objecte o deixar-lo anar, com també si el
volem manipular mitjançant el ratolí o el teclat. El seu funcionament és fàcil, solament cal
clicar a sobre del botó i la funció que determina s'activarà. El que té el seu dibuix d'un color
negre és aquell que estem utilitzant i el que és gris és aquell que està desactivat però que
podem activar en qualsevol moment clicant sobre d'ell.

El menú de modificació inclou els botons que intervenen en la modificació de l'entorn,


possibilitant la creació d'un altre cub o el canvi de material dels objectes. El funcionament és
molt similar al del menú superior, però aquest té alguns botons que funcionen a partir de
fletxes. Si cliquem sobre una de les fletxes canviarem el que indica, ja sigui afegir un altre cub o
canviar el material d'algun d'aquests.

Controladors d'interacció
Per a moure l'objecte tenim tres controladors diferents: el ratolí, el teclat i el WiiRemote. El
funcionament amb el WiiRemote forma part d'una altre aplicació independent que li he posat
el nom de WiiBoxound, amb la qual podem activar els diferents botons i moure els cubs
directament mitjançant el WiiRemote a distància...

Aquí les instruccions de funcionament dels diferents possibles dispositius de control:

Funcionament amb el ratolí


Per a poder moure el cub amb el ratolí solament cal clicar amb el botó esquerra a sobre del
cub que vulguem moure i aquest es mourà com si es tractés d'un titella. Si el cliquem en una
de les seves cantonades i l'aixequem el cub farà una petita rotació, possibilitant la inclinació
del cub i les seves respectives interaccions. Aquest sistema de control crea una connexió entre
el punt on cliquem i la fletxa del ratolí que es manté mentre mantenim apretat el botó
esquerra del ratolí, ja que quan el deixem d'apretar el cub deixa d'estar "agafat".

27
Capítol 4: Presentació de l'Aplicació Boxound

Funcionament amb el teclat

Fig 9: Imatge que mostra les tecles que s'utilitzen per controlar Boxound mitjançant el teclat

Funcionament amb el WiiRemote

Fig. 10: Imatge que mostra les tecles que s'utilitzen per controlar WiiBoxound mitjançant el WiiRemote

28
Capítol 5: Conclusions i treball futur

Capítol 5: Conclusions i treball futur


En aquest capítol vull resumir els resultats més importants que crec que he obtingut en aquest
treball de recerca i també vull identificar certs temes que no he pogut desenvolupar per manca
de temps i que faria si pogués continuar en aquesta línia de recerca.

He pogut comprovar que el so millora la sensació de realitat en la interacció a temps real en els
entorns virtuals i no solament la sensació de realitat sinó també el valor emocional de l'entorn
virtual. Per exemple en jocs de guerra, els sons de les explosions, de les pistoles, metralletes,
impactes i destruccions són els que fan que l'usuari es pugui situar dins de l'acció que es
desenvolupa i entendre-la.

En relació a la captació i gravació del so he comprovat que és més important que provoqui
sensació de realitat que no pas que sigui fruit de la interacció vertadera. Un exemple d'això és
que si nosaltres escoltem solament el veritable so que produeix una persona al xuclar una
beguda amb una canya, ens adonarem que ho sembla molt menys que si en canvi nosaltres
exagerem aquest so, sense canya i solament amb la boca. Molta gent dirà que el so real és el
segon quan en realitat és el primer. Així doncs es demostra aquesta conclusió i comprovem
que a vegades és necessària una exageració del so per a que la gent entengui el que és i ho
pugui identificar.

També he pogut experimentar que el llenguatge de programació que he utilitzat, Processing,


és una eina molt eficaç i molt útil, amb molts avantatges respecte el llenguatge del qual deriva,
Java. De totes maneres, he trobat certes limitacions a nivell de les llibreries disponibles per a
poder treballar amb imatges interactives i sons. Per exemple la utilització del WiiRemote dins
de Processing, i controlat a partir dels leds infrarojos és molt limitada i no és possible
combinar-lo juntament amb els sensors d'acceleració que disposa el WiiRemote, ja que
provoca certs errors. Una altra limitació és la que trobem en la llibreria Física quan els objectes
es traspassen quan en realitat, hem dit que no ho fessin.

A més a més dels aspectes més generals, he desenvolupat una aplicació informàtica sencera,
que funciona, que esta disponible a la comunitat a OpenProcessing i que exemplifica tots els
aspectes que he mencionat més amunt.

Apart d'aquests temes més tècnics he pogut valorar la utilitat del programari lliure i de les
xarxes socials a Internet que s'han creat a partir d'iniciatives com Processing. Sense l'existència
d'aquesta comunitat no m'hagués estat possible portar a terme aquest treball.

Com a possibles continuacions del treball voldria mencionar:

 Acabar d'enllestir WiiBoxound per poder interactuar d'una manera molt més fluïda
i precisa, sense cap mena d'error o problema.
 Fer l'entorn amb 3D, amb una bona il·luminació i ombra, reproduint d'aquesta
manera la major realitat possible.
 Poder canviar el tamany o forma dels cubs, sent els sons diferents per a cadascuna
d'aquestes característiques.

29
Capítol 5: Conclusions i treball futur

 Incorporar nous materials ens els objectes com plàstic, palla, vidre, plastilina, teixit
i paper.
 Incorporar l'acústica de l'espai on estan els objectes i poder escollir el tamany de
l'espai, canviant la reverberació del so per aconseguir-ho.
 Realitzar una avaluació amb usuaris que permetés corroborar com el so millora la
percepció de la interacció en móns virtuals.
 Utilitzar un mètode de síntesis de so que s'adapti a temps real en les interaccions,
com per exemple utilitzant les tècniques que es presenten en aquests dos articles:
James K. Hahn, Hesham Fouad, Larry Gritz and Jong Won Lee (1998) i Nicolas
Tsingos (1998).

30
Referències
 Aaron Marks (2008) The Complete Guide to Game Audio. Focal Press 2nd edition.

 Richard Bartle (2003) Designing Virtual Worlds. New Riders Games.

 John S. Dean (2009) Introducción a la programación de Java. McGraw-Hill.

 Ben Fry i Casey Reas (2009) Processing: A Programming Handbook for Visual Designers and
Artists. MIT Press.

 John Watkinson (2001) The Art of Digital Audio. Focal Press 3rd edition.

 Adobe Creative Team (2009) Classroom in a book. Adobe Press.

 Lawrence Lessig (2004) Free Culture: The Nature and Future of Creativity. Penguin Books.

 Daniel Shiffman (2008) Learning Processing: A Beginner's Guide to Programming Images,


Animation, and Interaction. Morgan Kaufmann.

 James K. Hahn, Hesham Fouad, Larry Gritz and Jong Won Lee (1998) "Integrating Sounds
and Motions in Virtual Environments". Presence: Teleoper. Virtual Environ., vol. 7, no. 1,
pàgines 6777, 1998. 20, 34

 Nicolas Tsingos (1998) Simulating High Quality Virtual Sound Fields for Interactive Graphics
Applications. PhD Thesis, Université J. Fourier, Grenoble I.

31
Annex 1: Codi del Programa

Annex 1: Codi del Programa


En aquest annex adjunto parts del codi del programa informàtic que he realitzat, Boxound, i en
concret algunes de les funcions més significatives: la part dels càlculs de les interaccions entre
els objectes, no la part de la interfície gràfica ni tampoc la dels controls. El codi complert
juntament amb l'aplicació està disponible a OpenProcessing: http://openprocessing.org/
visuals/?visualID=6761

//importació de llibreries
import fisica.*;
import krister.Ess.*;

//declaració de les diferents classes que apareixen al programa


FWorld world; //declaració del mon
MyBox myBox, SegonCub; //declaració dels cubs
FBox myBox1; //declaració de la superfície
...

//declaració i inicialització de variables


boolean exists = false;
boolean pressed = false;
boolean caigudalliure = false;
boolean fusta = true;
boolean fusta2 = false;
boolean platejat = false;
boolean mouse = true;
boolean segoncub = false;
...

//declaració de les variables pels sons que s'utilitzaran


AudioChannel metall10, metall09, metall08, metall07, metall06, metall05,
metall04, metall03, metall02, metall01;
AudioChannel cantometall10, cantometall09, cantometall08, cantometall07,
cantometall06, cantometall05, cantometall04, cantometall03, cantometall02,
cantometall01;
...
AudioChannel scratch, scratch2, scratchCanto, scratchCanto2, scratchmetall,
scratchmetall2, scratchmetallCanto, scratchmetallCanto2;
...

//definició d'una classe per a saber quan els impactes contra superfície es
produeixen
class MyBox extends FBox {
//declaració variables
boolean touching;
boolean friction;
float pVelX;
float pVelY;

//especifica com s'haurà de cridar la seva creació


MyBox(int width, int height) {
super(width, height);
touching = false; //al principi touching (tocant) és fals
friction = false; //al principi friction (fregament) és fals
}

32
Annex 1: Codi del Programa

//mètode per saber si ha començat a tocar


boolean startedTouching(FBody b){
//el resultat s'obté de si passa de "no esta tocant" a "esta tocant"
boolean result = (!touching && isTouchingBody(b));
touching = isTouchingBody(b); //si està tocant touching = cert
return result;
}

//mètode per saber si deixa de tocar


boolean endedTouching (FBody b){
boolean result = (touching && !isTouchingBody(b));
//Resultat s'obté de si passa de "esta tocant" a "no esta tocant"
touching = isTouchingBody (b); //si no està tocant touching = fals
return result;
}

//mètode que retorna la velocitat Y just en l'instant anterior


float getVelocityY() {return pVelY;}

//mètode que retorna la velocitat X just en l'instant anterior


float getVelocityX() {return pVelX;}
...
}

//bloc d'inicialització del món i la seva creació


void setup(){
frameRate (30); //nombre de frames que s'han de mostrar cada segon
size (900,620); //tamany del entorn gràfic
Fisica.init(this); //inicialització llibreria física
world = new FWorld (); //creació del món
world.setGravity (0,400); //especificació de la gravetat del món
Ess.start(this); //inicialització de la llibreria Ess
Load(); //càrrega dels sons i imatges de l'aplicació
Mundo(); //creació dels diferents objectes de l'aplicació
Butons(); //creació dels butons que apareixen a l'aplicació
}

//bloc principal del programa que es repeteix d'acord a FrameRate


void draw(){
background (255,255,255); //color de fons
world.draw(this); //dibuix del món
Procediments(); //crida a la funció dels procediments definida més avall
if (mouse==false){ //si no hi ha ratolí mira el teclat
checkKey();
}
...
}

//funció que inclou les crides a diferents funcions i mètodes d'interacció


void Procediments(){
ImpactesCub1(); //crida a la funció d'impactes del cub 1 definida més avall
ImpactesCub2(); //crida a la funció d'impactes del cub 2 definida més avall
forceY = abs(myBox.getVelocityY()); //velocitat absoluta de l'eix Y
forceX = abs(myBox.getVelocityX()); //velocitat absoluta de l'eix X
if (exists) { //si existeix calcula també la força X i Y del cub 2
forceY2 = abs(SegonCub.getVelocityY());
forceX2 = abs(SegonCub.getVelocityX());}
ProButons(); //crida a la funció per dibuixar els butons
}

33
Annex 1: Codi del Programa

//funció per detectar els impactes del primer cub


void ImpactesCub1(){
if (myBox.startedTouching(myBox1)) { //si myBox toca myBox1=superfície
if (platejat==false){ //si superfície = fusta
//impactes amb la cara plana del cub de fusta
if (forceY>=780 && myBox.getY() < 422 && myBox.getY() > 410&& fusta==true) {
play(impacte10); //reprodueix el so "impacte10"
}
...

//impactes amb la cantonada del cub de fusta


if (forceY>=780 && myBox.getY() <=410&& fusta==true) {
play(canto10);
}
...

//impactes amb la cara plana del cub de metall


if (forceY>=780 && myBox.getY() < 422 && myBox.getY() > 410&&
fusta==false) {
play(metall10);
}
...

//impactes amb la cantonada del cub de metall


if (forceY>=780 && myBox.getY() <=410&& fusta==false){
play(cantometall10);
}
...
}

if (platejat==true){ //si superfície = metall


//impactes amb la cara plana del cub de metall
if (forceY>=780 && myBox.getY() < 422 && myBox.getY() > 410&& fusta==false) {
play(metallpla10 );
}
...

//impactes amb la cantonada del cub de metall


if (forceY>=780&& myBox.getY() <=410&& fusta==false) {
play(metallcanto10 );
}
...

//Impacte amb la cara plana del cub de fusta


if (forceY>=780 && myBox.getY() < 422 && myBox.getY() > 410&& fusta==true) {
play(fustapla10 );
}
...

//impactes amb la cantonada del cub de fusta


if (forceY>=780 && myBox.getY() <=410&& fusta==true) {
play(fustacanto10 );}
...
}
}
}
//funció per detectar els impactes del segon cub
void ImpactesCub2(){
if (exists) { //si cub 2 existeix mirar les següents funcions

34
Annex 1: Codi del Programa

if (SegonCub.startedTouching(myBox1)){ //si cub 2 toca myBox1=superfície


...
}

//funció per calcular els impactes entre els cubs


void contactStarted(FContact c){
if (exists&&(((c.getBody1() == myBox) && (c.getBody2() == SegonCub))
|| ((c.getBody2() == myBox) && (c.getBody1() == SegonCub)))){

float nx = 0; //declaració i inicialització de normal X


float ny = 0; //declaració i inicialització de normal Y

//tots els contactes que hi ha en aquell moment


ArrayList contactes = myBox.getContacts();
//bucle per calcular la normal per a tots els contactes
for(int i=0; i<contactes.size(); i++){
FContact c1 = (FContact)contactes.get(i);
if(c1.getBody1() == SegonCub || c1.getBody2() == SegonCub) {
nx = c1.getNormalX(); //nx = la normal en l'eix X
ny = c1.getNormalY(); //ny = la normal en l'eix Y
}
}

PVector n = new PVector(nx, ny); //vector amb els valors de la normal

//vector amb les velocitats X i Y del cub 1


PVector vel1 = new PVector(myBox.getVelocityX(), myBox.getVelocityY());

//vector amb les velocitats X i Y del cub 2


PVector vel2 = new PVector(SegonCub.getVelocityX(),
SegonCub.getVelocityY());

vel1.mult(-1); //canvia signe 1 per fer-lo amb la mateixa direcció que 2


vel1.add(vel2); //suma els dos vectors

//calcula valor resultant de multiplicar els tres components del vector n


float impacte = abs(vel1.dot(n));

//impactes entre els cubs, els dos de fusta


if (fusta==true&&fusta2==true){
if (impacte>=35000) {
play(FustaFusta10);
}
...
}

//impactes entre els cubs, els dos de metall


if (fusta==false&&fusta2==false){
if (impacte>=35000) {
play(MetallMetall10);
}
...
}

//impactes entre els cubs, els dos de diferent material


if ((fusta==false&&fusta2==true)||(fusta==true&&fusta2==false)){
if (impacte>=35000) {
play(MetallFusta10 );
}

35
Annex 1: Codi del Programa

...
}
}
}

//funció per detectar si es produeix un fregament


void contactPersisted(FContact c){
//fregaments amb el primer cub
if (((c.getBody1() == myBox) && (c.getBody2() == myBox1))
|| ((c.getBody2() == myBox) && (c.getBody1() == myBox1))){

//cara plana
if (myBox.getY()<422 && myBox.getY()>410){
if (fusta==true&&platejat==false){ //si cub i taula són de fusta
scratch.play(Ess.FOREVER); //reproduir sempre
scratch.smoothPan=true;
scratch.volume(abs(forceX)/150); //volum depenent de la força X
}
...
}

//cantonada
if (myBox.getY()<=410){
if (fusta==true&&platejat==false){ //si cub i taula són de fusta
scratchCanto.play(Ess.FOREVER); //reproduir sempre
scratchCanto.smoothPan=true;
scratchCanto.volume(abs(forceX)/150); //volum depenent de la força X
}
...
}
}

//fregaments amb el segon cub


if (exists && (((c.getBody1() == SegonCub) && (c.getBody2() == myBox1))
|| ((c.getBody2() == SegonCub) && (c.getBody1() == myBox1)))){
...
}
}

//funció per detectar si el fregament ha deixat de produir-se


void contactEnded(FContact c){
//primer cub
if (((c.getBody1() == myBox) && (c.getBody2() == myBox1))
|| ((c.getBody2() == myBox) && (c.getBody1() == myBox1))){
scratch.volume(0); //si velocitat=0 el volum = 0
...
}
//segon cub
else if (exists && (((c.getBody1() == SegonCub) && (c.getBody2() == myBox1))
|| ((c.getBody2() == SegonCub) && (c.getBody1() == myBox1)))){
scratch2.volume(0); //volum = 0
...
}
}

//funció per aturar Ess i conseqüentment el so al tancar l'aplicació


public void stop() {
Ess.stop();
super.stop();}

36
Annex 2: Construcció de la Barra Sensora

Annex 2: Construcció de la Barra


Sensora
Aquest annex servirà per explicar el procés que vaig seguir per a construir la barra sensora pel
WiiRemote. El nom que se li ha donat a aquesta barra no reflecteix el que realment fa, ja que
no és un element sensor que rep informació de cap tipus, sinó que solament disposa d'una
sèrie de leds que emeten llum infraroja. La manera de construir aquest element es pot trobar a
molts webs d'Internet (http://blog.makezine.com/archive/2006/11/how_to_make_your_own_
wire.html). Aquí però, el procés que jo vaig seguir:

Material necessari:
- Quatre Leds infrarojos
- Quatre resistències de 82 Ohms
- Cable de colors
- Soldador
- Estany
- Taulell de fusta
- Font d'alimentació
- Taladre i broca de 4 mm
- Cola d'impacte
- Interruptor

Fig 11: Material necessari per a la construcció de la barra sensora

Construcció:
1. Crear la fusta que farà de suport dels leds: tallar la fusta en petits llistons de tres
centímetres i enganxar-los amb la cola d'impacte. Llimar les cantonades i polir els costats.

2. Fer els forats per a inserir els leds: Amb el taladre i amb una broca de quatre mil·límetres fer
dos forats a cada extrem, separats uns vuit
centímetres el més a prop, i deu el més allunyat.

3. Enganxar amb cola d'impacte els principals


elements del circuit: Suport de piles al centre del
llistó, l'interruptor i els leds en els forats fets amb
el taladre.

4. Amb l'estany, el soldador i els cables fer el


circuit del dibuix de la fig.12. Tenint en compte
que el cable vermell és el positiu i el negre el
negatiu per evitar confusions i major claredat.

Fig 12: Dibuix del circuit elèctric de la barra sensora

37
Annex 2: Construcció de la Barra Sensora

Fig 8: Barra sensora vista per davant i darrera

38

También podría gustarte