Disseny i implementació d'un sistema interactiu sonor

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ó

description

Treball de recerca en el que es presenta el disseny i implementació d'un sistema interactiu sonor mitjançant el llenguatge Processing: Boxound ( http://www.openprocessing.org/visuals/?visualID=6761 ) Research project in which is presented the design and implementation of a sonic interactive system developed using the Processing language: Boxound ( http://www.openprocessing.org/visuals/?visualID=6761 )

Transcript of Disseny i implementació d'un sistema interactiu sonor

Page 1: Disseny i implementació d'un sistema interactiu sonor

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ó

Page 2: Disseny i implementació d'un sistema interactiu sonor

II

Fabià Serra Arrizabalaga

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.

Page 3: Disseny i implementació d'un sistema interactiu sonor

III

Í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

Page 4: Disseny i implementació d'un sistema interactiu sonor

IV

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: ............................................................................................................................. 37

Construcció: ........................................................................................................................ 37

Page 5: Disseny i implementació d'un sistema interactiu sonor

V

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.

Page 6: Disseny i implementació d'un sistema interactiu sonor

Capítol 1: Introducció

1

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 és amb el que em centraré en aquest treball.

El meu pare, abans de l'estiu, em va oferir la possibilitat de participar en un projecte que es feia al seu grup de recerca 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. La 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 que vaig realitzar i l'aplicació informàtica que vaig desenvolupar, vaig decidir que serien la base pel Treball de Recerca, ampliant diversos aspectes que no vaig poder acabar durant la meva estada. Un dels aspectes amb el que he dedicat més temps des de l'estada ha estat afegir la possibilitat de control dins l'aplicació utilitzant el comandament de la consola Wii.

Motivació personal Els jocs sempre m'han apassionat des de ben petit i si 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 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 a les nostres vides. Per aquesta raó volia crear una aplicació informàtica en la qual es simulés alguna interacció real i utilitzar-la amb o sense so. D'aquesta manera es podria demostrar que en l'aplicació sense so no tenim sensació de que s'ha produït, per exemple, un impacte o un fregament, i amb la sola imatge del que fem els objectes semblen morts, com si estiguessin fora a l'espai, sense massa, pes o aire per a produir cap mena de so. Però en canvi en l'aplicació amb el so afegit ens adonem de la rellevància que té aquest, de la sensació de vivesa que provoca en els materials, que amb ell les coses hi són, existeixen. Es simula perfectament el que nosaltres cada dia veiem i amb ell es veuen reflectides les propietats que distingeixen els objectes que ens envolten.

Fent aquest treball he après moltes coses que segurament són difícils de descriure amb paraules. Tot i així, sí que hi ha moltes coses però 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

Page 7: Disseny i implementació d'un sistema interactiu sonor

Capítol 1: Introducció

2

aprendre algunes de les coses més bàsiques però importants de la informàtica que 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 amb la comunitat que existeix a nivell internacional al voltant de Processing, el món de programari lliure i Creative Commons. M'he sentit part d'una comunitat.

Com a conseqüència de tot aquest procés, tot el que he fet està disponible amb llicències Creative Commons, tant el document que he escrit, com els sons que he enregistrat, com 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. 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

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 sempre és el mateix so i amb el mateix volum, sense diferenciar l'alçada des de la qual és llençat. Com Bumptop, existeix interacció física entre els arxius però tampoc s'ha implementat cap mena de so pel fregament. Alguns vídeos d'exemple els podem veure aquí:

és el programa 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.

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

1 http://bumptop.com

Page 8: Disseny i implementació d'un sistema interactiu sonor

Capítol 1: Introducció

3

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

http://www.youtube.com/watch?v=ofNcgobCTbc

é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 en el que s'ha implementat un so de fregament a temps real amb el qual podem interactuar. Podem veure un vídeo d'aquest mini joc a:

Toshio Iwai3

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

é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:

http://www.youtube.com/ watch?v=Yi284fg_hQs&feature=related)

• ElectroPlankton és més nou i segueix amb la idea d'interactuar amb 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, la qual é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

http://www.youtube.com/watch?v=UCWYG2syuhI

é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 o d'avió, a bitlles, al pòquer... i moltes més coses que cadascuna té sons reals amb els que intenten augmentar la sensació de realisme. Cadascú dels usuaris d'aquest món té una pròpia sala que pot modificar al seu aire. Podem per exemple en aquesta sala agafar, deixar anar, arrossegar i col·locar els mobles i objectes que tinguem allà on vulguem (exemple en el minut 7:12 de ) . Els sons dels impactes són força reals en el sentit de que són diferents si deixem anar els objectes des de més amunt o més avall, però per exemple, no es diferència si és un impacte contra una fusta, contra un metall o contra una alfombra, són uns sons força bàsics que si que

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

Page 9: Disseny i implementació d'un sistema interactiu sonor

Capítol 1: Introducció

4

simulen un impacte, però mai del tot real. Una altra vegada, podem veure com en aquí tampoc hi ha 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 també en la reproducció a temps real de tots els sons que hi ha 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 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 presento Boxound i el seu funcionament des del punt de vista de l'usuari. En el darrer capítol, cinc, resumeixo el treball realitzat i els problemes que he tingut, proposant el què m'agradaria fer si pogués seguir treballant en aquest tema.

Page 10: Disseny i implementació d'un sistema interactiu sonor

Capítol 1: Introducció

5

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

Page 11: Disseny i implementació d'un sistema interactiu sonor

Capítol 2: Eines Utilitzades

6

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

"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."

, 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 és un projecte obert que va ser iniciat per Ben Fry6 i Casey Reas7. 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 voluntaris8

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 Microsystems

." (Traducció literal)

9

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).

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).

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/

Page 12: Disseny i implementació d'un sistema interactiu sonor

Capítol 2: Eines Utilitzades

7

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. És a dir, Processing és un projecte que s'actualitza i es desenvolupa de forma voluntària per la gent que l'utilitza. Processing és programari lliure i segueix la filosofia oberta d'aquest tipus de programari.

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

Ess r2 Ess r210

Pphys2D

é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.

Pphys2D11

Física

é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ísica12

10

é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

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

Page 13: Disseny i implementació d'un sistema interactiu sonor

Capítol 2: Eines Utilitzades

8

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 organitza-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 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 81.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

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

é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.

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/

Page 14: Disseny i implementació d'un sistema interactiu sonor

Capítol 2: Eines Utilitzades

9

Adobe Photoshop CS4 Adobe Photoshop18

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

é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 segurament el més utilitzat. Per a trobar més informació sobre com funciona Adobe Photoshop es pot mirar el llibre de Adobe Creative Team (2009).

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 per alguna tasca, per exemple:

Audacity19

Adobe Soundbooth

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

20

Sony Sound Forge

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, amb un funcionament típic de la empresa Adobe, em va facilitar el seu us.

21

Gravadora de so - Sony PCM-D50

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.

Aquesta és la gravadora que vaig fer servir per enregistrar tots els sons fora de l'estudi d'enregistrament. Sony PCM - D5022

Estudi d'Enregistrament

é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.

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 enregistrament del so: la sala de gravació, la de control, la de postproducció i el laboratori de música interactiva.

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/

Page 15: Disseny i implementació d'un sistema interactiu sonor

Capítol 2: Eines Utilitzades

10

Fig 2: Sala de control i de gravació de l'estudi d'enregistrament

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 de ferro 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 la l'enregistrament dels diferents sons gravats pels micròfons situats a la sala de gravació. També permet la modificació de certs valors de la gravació, com el volum d'entrada, sortida o la comunicació entre les dos sales.

Wii Remote Wii Remote23

El Wii Remote es pot utilitzar independentment de la videoconsòla, fent-lo servir com un controlador genèric. Per exemple a Processing existeixen 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.

també conegut amb el nom de WiiMote és el controlador, comandament, a distància de la videoconsòla 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 el joc. Aquest comandament disposa d'un acceleròmetre que detecta els canvis en la velocitat dels tres eixos (x, y i z). Això ofereix poca precisió, ja que solament permet moviments en línia recta com saludar, empènyer o tirar, però no identifica, per exemple, l'angle d'inclinació del comandament.

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 videoconsòla i és molt útil si volem més precisió en la manipulació del WiiRemote. 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 informació de cap tipus, sinó que sols té un conjunt de Leds que emeten llum infraroja i aquesta llum pot ser detectada per la Wii Remote.

23 http://www.nintendo.es

Fig 3: Comandament Wii Remote amb la representeció dels diferents moviments que pot captar

Page 16: Disseny i implementació d'un sistema interactiu sonor

Capítol 2: Eines Utilitzades

11

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 del televisor o pantalla, com i cap a on s'està movent el Wii Remote a partir de com es mouen també els llums infrarojos detectats i 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 nosaltres mateixos una barra sensora, 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 del tots els sensors que té i per tant aquesta informació pot ser captada amb l'ordinador mitjançant 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

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.

. El primer no semblava compatible amb la llibreria Wrj4P5 i per això en vaig 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 be. És per això, que m'he vist obligat a utilitzar un altre ordinador amb un sistema operatiu anterior per al funcionament del meu Sketch.

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

Page 17: Disseny i implementació d'un sistema interactiu sonor

Capítol 3: Treball Realitzat

12

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

Page 18: Disseny i implementació d'un sistema interactiu sonor

Capítol 3: Treball Realitzat

13

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 amb l'ordinador, 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 alguns determinats sons; 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 molts tipus i colors.

Després d'això vaig pensar en totes les interaccions possibles que hi ha entre dos objectes, en especial, dos cubs i una superfície (taula). Tenint 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, vaig pensar en aquestes 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

Page 19: Disseny i implementació d'un sistema interactiu sonor

Capítol 3: Treball Realitzat

14

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 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 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, 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 útils del Sketch i també les que en 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, donant 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).

Page 20: Disseny i implementació d'un sistema interactiu sonor

Capítol 3: Treball Realitzat

15

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 existeix, també del segon, i un botó per canviar el material de la superfície (mirar fig.4). En definitiva, vaig crear el 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 primera 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 treball. 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.

Page 21: Disseny i implementació d'un sistema interactiu sonor

Capítol 3: Treball Realitzat

16

El primer que vaig fer va ser que simplement 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 programar, 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.

Creat això doncs, em faltava parar el so, i ho vaig aconseguir seguint aquesta mateixa funció: vaig posar que si no estava tocant la superfície que el so parés, i ho feia, però just en el moment 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 només es reproduís una sola 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 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 el 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).

Page 22: Disseny i implementació d'un sistema interactiu sonor

Capítol 3: Treball Realitzat

17

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,

Page 23: Disseny i implementació d'un sistema interactiu sonor

Capítol 3: Treball Realitzat

18

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 gens 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 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 no fer-ho. Tot i així, els sons es van gravar igualment i podem comprovar la semblança dels sons a:

• 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 segons la velocitat inicial i quan la velocitat era 0, deixava de sonar, sent el volum en l'instant anterior igual al del principi.

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 regular el volum del so que es reproduïa constantment 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 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

Page 24: Disseny i implementació d'un sistema interactiu sonor

Capítol 3: Treball Realitzat

19

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 més 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 en relació al control de l'objecte. Ara podia controlar els cubs amb el teclat, però quasi no tenia llibertat de control, solament podia moure cap amunt i avall, a la dreta i a l'esquerra i les conseqüents diagonals sumant dos dels anteriors. 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ó.

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 aquesta funció a la seva llibreria Física i em va explicar el seu funcionament, podent ajustar la tensió de la "corda" o la seva longitud.

Així doncs, vaig aplicar aquesta funció de manera que 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é el seu 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 gran ventall 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 un) o la nova 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 totes les funcions que anaven a través de distàncies respecte elements de l'entorn.

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

Page 25: Disseny i implementació d'un sistema interactiu sonor

Capítol 3: Treball Realitzat

20

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. Però això no era gens lògic i totalment contradictori, estava dient que havies deixat anar el cub, però en canvi el podies seguir controlant, per tant, vaig decidir fer el botó d'aquesta manera, ja que així era impossible controlar el cub mentre el botó estava pressionat.

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

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.

. 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 la impossibilitat a la que em trobava, vaig demanar al meu pare que em prestés un ordinador amb un altre sistema operatiu diferent al meu i en aquest, va funcionar. Així doncs vaig deixar informat a tothom de que si volia utilitzar aquella llibreria no ho fes amb el nou sistema operatiu de Windows, el Windows 7.

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

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

Page 26: Disseny i implementació d'un sistema interactiu sonor

Capítol 3: Treball Realitzat

21

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 WiiRemote mitjançant quatre punts de llum infraroja28

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.

, 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.

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 WiiRemote, sinó que molt poc temps, ja que 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, 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 força bé si no movia massa el WiiRemote, ja que quan el movia una mica l'objecte es desplaçava de cop uns centímetres perquè alguna de les 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, 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

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

Page 27: Disseny i implementació d'un sistema interactiu sonor

Capítol 3: Treball Realitzat

22

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 molt precís, així que llò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 l'entorn era molt petit i tots els problemes que estava tenint vaig pensar de si deixar de fer la programació per controlar amb el WiiRemote i explicar 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 altres 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 del control de l'objecte, aquest d'aquesta manera anava més lent i es notava força a simple vista. A més, aquest no era l'únic problema, ja que quan els dos leds tornaven a ser detectats hi havia un desplaçament brusc de l'objecte. Això era degut a que els controls per acceleració, com he dit, no són precisos i allà on apuntes no és on detecta, a diferència dels leds, sinó que simplement va per l'acceleració del moviment que li dones al WiiRemote. Per culpa d'això fa que l'objecte a partir de l'acceleració es mogui i es col·loqui en un punt que no és el apuntat amb el WiiRemote i que quan els dos leds tornen a ser detectats el cub es col·loca just en el punt mig d'aquests dos (exactament el lloc on estem apuntant) i per tant el cub fa un canvi de lloc bastant brusc i es percep clarament de que hi ha hagut un error.

Page 28: Disseny i implementació d'un sistema interactiu sonor

Capítol 3: Treball Realitzat

23

Per culpa d'aquestes complicacions vaig decidir al final deixar els leds i fer-ho tot a partir dels sensors d'acceleració del WiiRemote, 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 seria força fàcil comparat amb 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 com he dit, 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ó detectés 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 que es mantingués en el lloc per on intentava sortir. É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 pari i no segueixi, 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 que 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 he 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 a la conclusió a partir d'allò que incorporar la Wii com a dispositiu de control, precís i més simulador de la realitat que no pas el ratolí no era gaire bona idea, però seria interessant seguir-ho provant.

Page 29: Disseny i implementació d'un sistema interactiu sonor

Capítol 3: Treball Realitzat

24

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, es reproduís més fort. 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.

Així doncs, vaig 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 per algunes coses anava molt bé però per altres no tant. Així que potser, en un futur, segurament si que seria possible fer tot el que volia però actualment, és un desig molt 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 definissin aquest disseny i finalment vaig decidir que serien la simplicitat i la elegància.

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 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

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

Page 30: Disseny i implementació d'un sistema interactiu sonor

Capítol 3: Treball Realitzat

25

el número que determina 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.

Page 31: Disseny i implementació d'un sistema interactiu sonor

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

26

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 del 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: 1/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/

Page 32: Disseny i implementació d'un sistema interactiu sonor

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

27

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. El 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'escoltarà 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 el 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 si, però en aquest cas, no hi ha diferència sonora en 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 jo anomeno 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ó. Tot això és degut a que aquest sistema de control crea una connexió entre el punt on cliquem i la fletxa del ratolí, creant una mena de corda o fil que es manté mentre mantenim apretat el botó esquerra del ratolí, ja que quan el deixem d'apretar el cub deixa d'estar "agafat".

Page 33: Disseny i implementació d'un sistema interactiu sonor

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

28

Funcionament amb el teclat

Funcionament amb el WiiRemote

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

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

Page 34: Disseny i implementació d'un sistema interactiu sonor

Capítol 5: Conclusions i treball futur

29

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.

Page 35: Disseny i implementació d'un sistema interactiu sonor

Capítol 5: Conclusions i treball futur

30

• Incorporar nous materials ens els objectes com plàstic, 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).

Page 36: Disseny i implementació d'un sistema interactiu sonor

31

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.

Page 37: Disseny i implementació d'un sistema interactiu sonor

Annex 1: Codi del Programa

32

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 i 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 }

Page 38: Disseny i implementació d'un sistema interactiu sonor

Annex 1: Codi del Programa

33

//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 }

Page 39: Disseny i implementació d'un sistema interactiu sonor

Annex 1: Codi del Programa

34

//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

Page 40: Disseny i implementació d'un sistema interactiu sonor

Annex 1: Codi del Programa

35

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 ); }

Page 41: Disseny i implementació d'un sistema interactiu sonor

Annex 1: Codi del Programa

36

... } } } //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();}

Page 42: Disseny i implementació d'un sistema interactiu sonor

Annex 2: Construcció de la Barra Sensora

37

Annex 2: Construcció de la Barra Sensora Aquest annex servirà per explicar el procés que vaig seguir per a construir la barra sensora per al 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) i aquí el procés que jo vaig seguir:

Material: - 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

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

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

Page 43: Disseny i implementació d'un sistema interactiu sonor

Annex 2: Construcció de la Barra Sensora

38

Fig 8: Barra sensora vista per davant i darrera