Sunteți pe pagina 1din 26

PIANO FUZZY

INTEGRANTES

Fernando lvarez Hernndez
Alejandro Bonilla Alfaro
Aldo Galleguillos Olivares
Oscar Godoy Castillo
Edgard Vilo

PLAN GENERAL

INTRODUCCIN

En el mbito de las intervenciones artsticas en espacios pblico existe una gran cantidad de
innovadoras maneras de expresar ideas, emociones y sentimientos con el objetivo de llamar la atencin
de los espectadores. En este contexto y como seres amantes de la tecnologa, nos compete realizar
algo diferente a lo que estamos acostumbrados dentro del contexto de desarrollo de software a nivel
acadmico, es decir, descartaremos el desarrollo de una aplicacin clsica de escritorio con
interacciones humano-computador utilizando mouse y teclado para favorecer el desarrollo de una
aplicacin con una interaccin humano-computador a travs de los movimientos y gestos de una
persona, todo ello a travs del dispositivo Kinect de Xbox 360.
El objetivo es utilizar la msica como elemento de enganche con las personas dentro de un espacio
pblico para que sta pueda salir de la rutina, asombrarse y entretenerse por algunos minutos
interactuando de manera interactiva con una aplicacin que emular un piano de forma virtual.
MBITO

1. El proyecto se desarrollar en el taller electivo Multimedia impartido en la Universidad de La
Serena (Chile) por el profesor Mauro San Martn.
2. El piano virtual se implantar en un espacio pblico para que cualquier persona pueda
interactuar con l, todo esto con el fin de poder realizar una pequea intervencin artstica,
tecnolgica y social.
ALCANCE
1. El software ser de escritorio.
2. El software reconocer solo un esqueleto (en estudio posiblemente 2)
3. El software emular slo una octava y media de piano (12 teclas).
4. El software no reconocer semitonos.
5. El software permitir seleccionar sonidos de distintos instrumentos.
RESTRICCIONES

1. Se desarrollar para el S.O. Windows 7 de 64 bits.
2. Se desarrollar en la plataforma .NET 4.0, utilizando el lenguaje de programacin C#.
3. El software har uso del dispositivo Kinect de Xbox 360 para el reconocimiento de personas y
sus respectivos movimientos.
4. Se construir una plataforma fsica que emular una octava y media de piano.

META

Implementar un software que emule de forma bsica los sonidos de un piano, los cuales sern gatillados
por los movimientos de pies de una persona que interactuar con la aplicacin utilizando el sensor
Kinect de Xbox 360 estando sobre una plataforma fsica en forma de piano.

OBJETIVOS

1. Investigacin del dispositivo Kinect
1.1. Investigacin de sus componentes
1.1.1. Sensor de profundidad
1.1.2. Cmara RGB
1.1.3. Micrfono
1.2. Instalacin de libreras de Kinect para el lenguaje C#
1.2.1. Kinect SDK 1.7
1.2.2. Kinect Developer Toolkit 1.7
1.2.3. Microsoft Speech Plataform SDK
1.3. Investigar la forma de capturar datos del sensor.
1.3.1. Datos en formato nube de puntos
1.3.2. Datos en formato Esqueleto
2. Anlisis del problema
2.1. Definir la forma en que se capturarn los datos (nube de puntos o esqueleto)
2.2. Fijar la altura a la que se encontrar la Kinect
2.3. Fijar la distancia a la que se encontrarn las teclas del piano con respecto a la Kinect
2.4. Fijar el ancho y el largo de cada tecla del piano
3. Construccin y desarrollo del piano virtual
3.1. Desarrollo del software
3.2. Construccin plataforma fsica del piano
4. Pruebas
4.1. Realizar pruebas de verificacin
4.2. Probar el software en un entorno pblico

REVISIN DEL DISPOSI TIVO KINECT

La Kinect fue lanzada el ao 2010 para la consola Xbox 360 con el propsito de cambiar la forma en
como tradicionalmente los jugadores interactuaban con una consola de videojuegos, ya que
reemplazaba los tpicos joystick de videojuegos por un sensor capaz de captar los movimientos, gestos
y voz de una persona
Luego de haber sido lanzada la Kinect para Xbox 360, se lanz una versin para desarrolladores que
funciona para los sistemas operativos Windows 7 y 8, aunque es posible utilizar la Kinect de Xbox 360
para poder desarrollar aplicaciones en un computador teniendo las libreras de programacin
respectivas.
CARACTERSTICAS

La kinect cuenta con diversos dispositivos que le permiten funcionar como tal. A continuacin se
detallan los componentes constitutivos de la Kinect.
1. Un proyector infrarrojo.
2. Una cmara infrarroja 640x840.
3. Una cmara VGA 640x480 a color.
4. Un motor para la orientacin.
5. micrfonos.




SENSOR DE MOVIMIENTO

Para poder captar los movimientos de una persona, es necesario capturar cada cierto intervalo de
tiempo la posicin de su cuerpo en el espacio tridimensional, es decir, necesitamos captar las
articulaciones del cuerpo humano en los ejes de coordenadas x, y, z.
Para poder realizar esta labor necesitamos utilizar el emisor de infrarrojos que proyectar una trama
invisible, la cual se reflejar en el entorno y ser capturada por la cmara infrarroja. Adems es
necesario utilizar algn modelo corporal para poder identificar las partes del cuerpo con sus respectivos
movimientos.

CMARA VGA Y MICRFONOS

La cmara VGA y el micrfono nos permiten enriquecer la experiencia de interaccin con el dispositivo
Kinect, ya que nos permite vernos a nosotros mismos en una pantalla de computador o quizs realizar
acciones a travs de comandos de voz.
QU NECESITAMOS PARA PROGRAMAR CON LA KINECT?

En el 2011 Microsoft public el SDK de Kinect que permite desarrollar aplicaciones en Windows para
uso no comercial.
El SDK facilita el acceso a las cmaras y micrfonos utilizados en la Kinect para aminorar el esfuerzo de
desarrollo de aplicaciones que utilicen este dispositivo. Gracias al SDK podremos crear aplicaciones con
una nueva forma de interaccin, lo que permite enriquecer nuestras experiencias como programadores
y poder crear aplicaciones en mbitos en los cuales se necesite captar el movimiento de una persona.



COMENZANDO A PROGRAMAR CON LA KINECT

Para poder programar el dispositivo Kinect se hace necesario instalar diferentes herramientas de
programacin, la librera SDK es esencial para estos propsitos, ya que nos permitir desarrollar
aplicaciones utilizando la Kinect de Xbox 360 en el lenguaje C# o Visual Basic.Net.



HARDWARE

Para poder comenzar a desarrollar aplicaciones usando la Kinect necesitaremos los siguientes
requerimientos de hardware.
PC

- Procesador dual core 2.66 GHz o mejor
- 2 GB de RAM
- Tarjeta de video con soporte para DirectX 9.0 o superior.
Dispositivo Kinect para Xbox 360


Cable de corriente con cable USB para Kinect (En caso de no ser Kinect for Windows)

Software
- Windows 7 u 8 (En este caso se ha utilizado Windows 7)
- Microsoft Visual Studio 2010 Express o cualquier edicin de Visual Studio 2010 con soporte para WPF,
para conseguirlo puedes descargarlo de: http://www.microsoft.com/visualstudio/eng#products/visual-
studio-express-products
- Kinect for Windows DeveloperToolKit: http://go.microsoft.com/fwlink/?LinkId=275589
- Speech Plataform SDK: http://www.microsoft.com/en-us/download/details.aspx?id=27226
- Kinect for Windows Lenguage Packs v1.5.0 (El idioma en el que desarrolles tus aplicaciones puede
variar, es por ello que debes descargar el pack del lenguaje que satisfaga tus necesidades). En este caso
se descarg Spanish/Mxico - KinectSpeechLenguagePack_es-MX: http://www.microsoft.com/en-
us/download/details.aspx?id=34809

EXPERIENCIA EN PROGRAMACIN

Para poder comenzar a programar se necesitan conocimientos bsicos en C# o Visual Basic.Net, o en su
defecto, deberas al menos saber programacin orientada a objetos.

PROCESO DE INSTALACI N

Lo primero que debemos realizar es instalar Visual Studio (en caso de que no est instalado), luego de
eso se procede a instalar el Kinect SDK.


Posteriormente, podemos instalar el Speech Platform SDK. Instala el lenguage pack con el que desees
desarrollar tus aplicaciones.









CONSIDERACIONES FI NALES SOBRE EL PROCESO DE INSTALACIN

Luego de haber instalados las herramientas descritas, ser necesario abrir Visual Studio y crear un
proyecto, ya sea en C# o Visual Basic.Net. Si quieres saber cmo hacer esto en detalle, puedes leer el
enlace que se encuentra en la WebGrafa al final de este documento.

CAPTURAR EL ESQUELETO DE LA KINECT

Para poder capturar las articulaciones del esqueleto de una o ms personas que se encuentren en el
campo de visin de la Kinect, es necesario tener instalado el SDK de Kinect para Windows, que se
explic en el apartado anterior.


SKELETON TRACKING

El SDK de Kinect para Windows posee una funcionalidad llamada Skeleton Traking, la cual permite
hacer un seguimiento de uno o ms esqueletos que se encuentre dentro del rea de visin del sensor,
esto permite a los desarrolladores capturar los datos de la posicin espacial de las articulaciones de los
esqueletos en cada frame que sea procesado por la aplicacin (recordar que la kinect enva 30 frames
por segundo a la aplicacin). Para identificar cada articulacin es necesario relacionarla con un nombre
propio. En la siguiente imagen se ilustran los nombres asignados por la Kinect para las articulaciones del
cuerpo humano.



Por ejemplo, si quisiramos capturar los datos correspondientes del pie derecho, slo tendramos que
referenciarlo con la palabra "FOOT_RIGHT". Para realizar esto en cdigo, deberemos aadir la opcin
UseSkeletalTracking cuando inicializamos el sensor en el evento loaded y creamos el evento
SkeletonFrameReady que nos permitir capturar los datos del esqueleto una vez que se obtengan
por el sensor dentro de un frame.




El mtodo Kinect_SkeletonFrameReady ser el mtodo que procesar el evento de captura de
articulaciones del cuerpo humano y es aqu donde nosotros debemos realizar las acciones que
consideremos necesarias para nuestros objetivos. Para capturar las articulaciones debemos obtener los
datos del Skeleton a partir del SkeletonFrame que se captura. El SkeletonFrame capturado
permite obtener un arreglo de esqueletos, esto quiere decir que esta estructura de datos contiene las
articulaciones de todas las personas que estn en el campo de visin del sensor (aunque la mxima
cantidad de esqueletos que se pueden consultar a la vez son 2). Si queremos recorrer los esqueletos
ser necesario utilizar foreach para poder recorrer las articulaciones de los esqueletos que haya
reconocido la Kinect. Tambin debemos saber si el esqueleto consultado es correcto o no, esto se hace
con la propiedad TrakingState (NotTracket, PositionOnly, o Tracket).

kinect = new Runtime();
kinect.Initialize(RuntimeOptions.UseDepthAndPlayerIndex | RuntimeOptions.UseSkeletalTracking);
kinect.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(kinect_SkeletonFrameReady);


Ahora lo nico que tenemos que hacer es utilizar el vector de datos JointID para obtener las
articulaciones de un esqueleto. Para identificar una articulacin particular es necesario utilizar un ndice
dentro del vector JointID utilizando nombres identificatorios para cada ndice, como los que se
muestran a continuacin.



IMPLEMENTACIN DE PI ANO FUZZY PRIMERA SESIN: DEFINICIN DE EJES X, Y, Z Y
REPRODUCIR ARCHIVO DE SONIDO


CREACIN DE PROYECTO VISUAL STUDIO

Lo primero que debemos realizar para programar la Kinect es crear un proyecto tipo WPF en el Visual
Studio (en este caso se utiliz la versin del 2010). Luego debes incluir las libreras correspondientes de
la Kinect.
DEFINIENDO TECLAS EN EL PISO

Para poder realizar nuestro piano virtual, debemos definir un espacio tridimensional que representar la
posicin en la que se encontrar la tecla virtual, para ello debemos realizar los siguientes pasos.
1. Definir la altura en la que se encontrar la Kinect respecto del suelo.
2. Definir la distancia en la que comenzar y terminar una tecla con respecto a la Kinect (eje Z).
3. Definir el ancho de una tecla (eje X).
4. Definir altura de una tecla (eje Y)
Con estos pasos podremos implementar ya una pequea versin de nuestro piano.
DEFINICIN DE LA ALTURA DE LA KINECT
void kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) {
foreach (SkeletonData skeleton in e.SkeletonFrame.Skeletons)
if (skeleton.TrackingState == SkeletonTrackingState.Tracked) {
float HandRightX = skeleton.Joints[JointID.HandRight].Position.X;
float HandRightY = skeleton.Joints[JointID.HandRight].Position.Y;
float HandRightZ = skeleton.Joints[JointID.HandRight].Position.Z;

La Kinect tendr como soporte una mesa, la cual posee una altura de 75 cm., por lo tanto, esta ser la
altura en la cual se encontrar la Kinect.



DEFINICIN DEL EJE Z

Esta coordenada determina a qu distancia de la Kinect comienza y finaliza una tecla. En este caso se
defini una distancia entre 2,25 mt. y 2,58 mt.



DEFINICIN DEL EJE X

Con esta coordenada definiremos el ancho que poseer cada tecla virtual. Para esta primera sesin se
ha determinado que el ancho debe ser de 20 cm.
DEFINICIN DEL EJE Y

Con esta coordenada definiremos la altura que poseer cada tecla. Para esta primera sesin se ha
determinado que la altura de la tecla debe ser de -0,78 (tomando como referencia la representacin del
eje Y que hace la Kinect).

CDIGO PARA REPRODUCIR UN ARCHIVO DE SONIDO AL PISAR UNA TECLA VI RTUAL

Lo primero que debemos realizar para reproducir un archivo de sonido es declarar una instancia de la
clase WindowsMediaPlayer, la cual nos permitir cargar un archivo de msica (.mp3) de nuestro
ordenador, en este caso hemos cargado un archivo de msica que contiene el sonido de un piano en la
nota musical DO. El siguiente cdigo realiza lo anteriormente descrito.


Luego debemos capturar un esqueleto trackeado (explicado en el apartado anterior) y capturar los
puntos de coordenadas x, y, z del pie derecho (en futuras sesiones lo extenderemos a los 2 pies).
Posteriormente, comprobamos si estos valores se encuentran dentro del espacio definido para cada
tecla, en caso de que as sea, haremos sonar la tecla con el mtodo play() de la clase
WindowsMediaPlayer. En caso de que las coordenadas del pie no se encuentren en el espacio
definido para la tecla no realizaremos ninguna accin. El siguiente cdigo realiza lo anteriormente
descrito.
WindowsMediaPlayer wplayer = new WindowsMediaPlayer();
wplayer.URL= "C:/RUTA DEL ARCHIVO/NOMBRE_ARCHIVO.mp3";



IMPLEMENTACIN DE PI ANO FUZZY SEGUNDA SESIN: SOLUCIN AL PROBLEMA
DE LA SENSIBILIDAD DE LA KINECT

PROBLEMTICA

Al utilizar los puntos del esqueleto con el dispositivo Kinect, stos sufran de un exceso de sensibilidad
(incluso si uno se encontraba en reposo), por lo tanto, al posicionarnos en la frontera de una tecla del
piano, ste sonaba en forma constante debido a que la sensibilidad de la Kinect haca que el pie
estuviese fuera y dentro de la tecla en el transcurso de los frame.

SOLUCIN PROPUESTA: LGICA DIFUSA

Las razones por lo cual se eligi utilizar lgica difusa fueron las siguientes:
1. El pie est dentro o fuera de la tecla en cierto grado.
2. Mientras ms cercano est el pie a la frontera de la tecla, menos grado de pertenencia tiene el
pie de estar dentro de la tecla.
3. Si el pie est ms cercano al centro de la tecla, mayor grado de pertenencia tiene de estar
dentro de la tecla.
VARIABLES DE ENTRADA
float x = 0.0F, y = 0.0F, z = 0.0F;
x = S.Joints[JointType.FootRight].Position.X;
y = S.Joints[JointType.FootRight].Position.Y;
z = S.Joints[JointType.FootRight].Position.Z;
if (z >= 2.25 && z <= 2.58){
if(x >= 0.04 && x <= 0.24){
if(y <= -0.78){
wplayer.controls.play();
}
}
}

Para poder implementar la lgica difusa debemos definir las variables lingsticas que tendr el sistema,
en este caso sern 2:
1. Eje X.
2. Eje Z.
El eje Y se omiti, pero en el prximo apartado se incluir dentro del sistema difuso. Para las variables
lingsticas X y Z se crearon 3 conjuntos difusos con sus respectivas funciones de pertenencia:
1. Fuera 1.
2. Dentro.
3. Fuera 2.


Considerar que existen 2 conjuntos difusos "fuera" para tomar en cuenta los 2 mrgenes que tiene cada
eje.
VARIABLES DE SALIDA

La variable de salida nos permitir determinar si se debe o no tocar el sonido de una tecla en funcin de
las variables que hayan entrado al sistema, por lo mismo, los conjuntos difusos definidos para la salida
son los siguientes:
1. No Toca
2. Toca

REGLAS DIFUSAS



Como podemos observar, la nica regla que hace tocar una tecla es cuando la variable X se encuentra
dentro del conjunto difuso "Dentro" y la variable Z se encuentra dentro del conjunto difuso "Dentro".
DEFUZZIFICACIN

Debemos defuzzificar la salida a travs del mtodo de Mandami, lo cual nos permitir obtener una
salida real. Si la salida real es mayor a 72,14, entonces la tecla sonar.

IMPLEMENTACIN DE PI ANO FUZZY TERCERA SESIN: DEPURANDO SOLUCIN
FUZZY

IF (X IS Fuera1) AND (Z IS Fuera1) THEN Exito IS NoToca
IF (X IS Fuera1) AND (Z IS Dentro) THEN Exito IS NoToca
IF (X IS Fuera1) AND (Z IS Fuera2) THEN Exito IS NoToca
IF (X IS Dentro) AND (Z IS Fuera1) THEN Exito IS NoToca
IF (X IS Dentro) AND (Z IS Dentro) THEN Exito IS Toca
IF (X IS Dentro) AND (Z IS Fuera2) THEN Exito IS NoToca
IF (X IS Fuera2) AND (Z IS Fuera1) THEN Exito IS NoToca
IF (X IS Fuera2) AND (Z IS Dentro) THEN Exito IS NoToca
IF (X IS Fuera2) AND (Z IS Fuera2) THEN Exito IS NoToca
PROBLEMA CON LA FUZZIFICACIN DE 3 ENTRADAS

Se intent hacer un fuzzificacin con 3 entradas (ejes x, y, z) dentro de un control difuso, pero la salida
del sistema era muy sensible a los cambios que tena el eje Y, lo que generaba conflictos de pertenencia
a las teclas debido a que la salida del control difuso era binaria (Suena, NoSuena).

SOLUCIN AL PROBLEMA

Se opt por dividir la fuzzificacin, ya que en versiones anteriores las entradas de los ejes X y Z se
comportaban de manera estable. Se tom el eje Y como entrada independiente a otro control fuzzy,
el cual nos permiti determinar en qu grado de pertenencia se encuentra el pie con respecto a los
conjuntos difusos aire y piso.

CONTROL FUZZY 1

Definicin de los conjuntos difusos para los ejes X y Z. Adems, se muestran los conjuntos difusos que
representan la salida del sistema.



CONTROL FUZZY 2

Definicin de los conjuntos difusos del eje Y, los cuales son representados por las etiquetas dentro y
fuera. La salida del control difuso nos permite determinar si el pie del usuario est en el piso o en el
aire



ESQUEMA DEFINITIVO

Finalmente, los 2 controles difusos se unen en un solo sistema que realiza la accin de tocar una tecla
de piano solamente cuando el primer control difuso tenga una salida suena y el segundo control
difuso tenga una salida piso, es decir, cuando el pie del usuario est dentro de los parmetros
establecidos para cada tecla.



IMPLEMENTACIN DE PI ANO FUZZY CUARTA SESIN: INCLUSIN DE 12 TECLAS Y 2
PERSONAS

INCLUSIN 12 TECLAS
La inclusin de 12 teclas al cdigo es una actividad relativamente sencilla, slo se deben agregar ms
objetos de la clase WindowsMediaPlayer, donde cada uno de estos objetos represente una de las 12
teclas que contendr el piano. El siguiente cdigo realiza lo descrito anteriormente.


Adicionalmente, se debe declarar un conjunto de variables booleanas que acten como banderas
determinando el estado del pie de una persona, es decir, que nos permita saber si el pie de esta
persona se encuentra dentro o fuera de una tecla especfica. Para realizar esto se debe declarar una
variable booleana por cada tecla definida (es decir, 12 variables), en el caso de que el pie de una persona
se encuentre dentro de una tecla determinada se debe declarar esta variable como true, en caso
contrario false.


Finalmente debemos crear una serie de if-else anidados para determinar el grado de pertenencia a
cada tecla y reproducir el sonido correspondiente haciendo un correcto uso de las banderas asignadas.

RECONOCIMIENTO DE 2 PERSONAS

Uno de los problemas de reconocer a 2 personas con la Kinect es que en cada frame se confunden las
identificaciones de los esqueletos reconocidos por el sensor, es decir, que si en un momento una
WindowsMediaPlayer wplayerPer1DerDO = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerRE = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerMI = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerFA = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerSOL = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerLA = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerSI = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerDOM = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerREM = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerMIM = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerFAM = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerSOLM = new WindowsMediaPlayer();
Boolean dentroPer1DerDO = false;
Boolean dentroPer1DerRE = false;
Boolean dentroPer1DerMI = false;
Boolean dentroPer1DerFA = false;
Boolean dentroPer1DerSOL = false;
Boolean dentroPer1DerLA = false;
Boolean dentroPer1DerSI = false;
Boolean dentroPer1DerDOM = false;
Boolean dentroPer1DerREM = false;
Boolean dentroPer1DerMIM = false;
Boolean dentroPer1DerFAM = false;
Boolean dentroPer1DerSOLM = false;
persona X tiene asignado a su esqueleto una identificacin igual a 1, el cual se encuentra fuera de una
tecla de piano y otra persona Y tiene asignado a su esqueleto una identificacin 2, el cual se encuentra
dentro de una tecla de piano, y luego en el frame siguiente el sensor cambia las identificaciones de los
esqueletos, el piano fuzzy se confunde pensando que el esqueleto con identificacin 1 pas de estar
fuera de una tecla a estar dentro, por lo cual reproducir el sonido de la tecla correspondiente, cosa
que jams debi haber ocurrido debido a que persona X jams se ha movido de su posicin. Para
solucionar este problema fue necesario identificar a cada esqueleto con un mismo ID a travs de todos
los frame para evitar la situacin descrita arriba, lo cual se consigui escribiendo las siguientes lneas de
cdigo dentro del mtodo FramesReady (que se activa cada vez que la Kinect nos entrega un
muestreo de esqueletos, lo que sucede 30 veces por segundo).


El cdigo anterior asigna un ID nico a cada esqueleto a travs de cada frame que captura el sensor, por
lo tanto, el problema es solucionado exitosamente.
IMPLEMENTACIN DE PI ANO FUZZY QUINTA SESIN: AGREGAR SONIDOS Y
CONSTRUCCIN DE PROTOTI PO DE PIANO EN CARTULINA

AGREGAR SONIDOS

Para agregar nuevos sonidos debemos declarar 12 variables de la clase WindowsMediaPlayer, es
decir, una por cada tecla de piano. El siguiente cdigo realiza lo descrito anteriormente.
int contadorS = 0;
foreach (Skeleton S in Skeletons) {
if (S.TrackingState == SkeletonTrackingState.Tracked){
if (contadorS==0){
S.TrackingId = 1;
} else if (contadorS == 1){
S.TrackingId = 2;
}
contadorS++;
}
}


Luego, debemos elegir una carpeta para almacenar todos los archivos de sonidos que deseamos
incorporar en Piano Fuzzy, en este caso se utilizaron conjuntos de sonidos para cada uno de los
siguientes instrumentos: piano, clavinet, piano strings y batera. Los nombres de los archivos de sonidos
tienen la siguiente estructura.

Por ejemplo, si deseamos reproducir un clavinet en la nota DO debemos reproducir el archivo de
msica con el nombre clavinet1.mp3. Para establecer un conjunto de sonidos especfico para un
instrumento debemos utilizar la funcin set_nombre_sonido(String nombre), donde nombre
representa una cadena de caracteres con el nombre del instrumento que se desea activar en Piano
Fuzzy. La siguiente funcin realiza lo descrito anteriormente.



PROTOTIPO PI ANO EN CARTULINA
WindowsMediaPlayer wplayerPer1DerDO = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerRE = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerMI = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerFA = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerSOL = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerLA = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerSI = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerDOM = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerREM = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerMIM = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerFAM = new WindowsMediaPlayer();
WindowsMediaPlayer wplayerPer1DerSOLM = new WindowsMediaPlayer();
[Nombre del instrumento][Nmero que identifica una nota musical][.mp3]
void set_nombre_sonido(String nombre){
wplayerPer1DerDO.URL = "C:/RUTA DEL DIRECTORIO/" +nombre +"1.mp3";
wplayerPer1DerRE.URL = "C:/RUTA DEL DIRECTORIO/" +nombre +"2.mp3";
wplayerPer1DerMI.URL = "C:/RUTA DEL DIRECTORIO/" +nombre +"3.mp3";
wplayerPer1DerFA.URL = "C:/RUTA DEL DIRECTORIO/" +nombre +"4.mp3";
wplayerPer1DerSOL.URL = "C:/RUTA DEL DIRECTORIO/" +nombre +"5.mp3";
wplayerPer1DerLA.URL = "C:/RUTA DEL DIRECTORIO/" +nombre +"6.mp3";
wplayerPer1DerSI.URL = "C:/RUTA DEL DIRECTORIO/" +nombre +"7.mp3";
wplayerPer1DerDOM.URL = "C:/RUTA DEL DIRECTORIO/" +nombre +"8.mp3";
wplayerPer1DerREM.URL = " C:/RUTA DEL DIRECTORIO/" +nombre +"9.mp3";
wplayerPer1DerMIM.URL = " C:/RUTA DEL DIRECTORIO/" +nombre +"10.mp3";
wplayerPer1DerFAM.URL = " C:/RUTA DEL DIRECTORIO/" +nombre +"11.mp3";
wplayerPer1DerSOLM.URL = " C:/RUTA DEL DIRECTORIO/" +nombre +"12.mp3";
}

Se desarroll un prototipo fsico del piano para poder verificar el buen funcionamiento de Piano Fuzzy
con una plataforma fsica, para ello se compraron los siguientes materiales:
2 cartulinas de color blanco
1 plumn de pizarra
1 scotch
1 cola fra
1 regla de 30 cms.
Se estableci un ancho de 16 cms para cada tecla (mismo ancho que el tamao virtual de las teclas), lo
cual permiti dibujar 12 teclas a lo largo de las 2 cartulinas. En las fotos que se muestran a continuacin
se muestra parte del resultado del prototipo.



Posteriormente se procedi a ejecutar la aplicacin sobre el prototipo fsico construido, lo cual nos
permiti hacer pruebas sobre Piano Fuzzy y verificar su buen comportamiento.

IMPLEMENTACIN DE PI ANO FUZZY SEXTA SESIN: IMPLEMENTACI N DE GESTO
PARA CAMBIAR SONIDO Y CONSTRUCCIN DE PLATAFORMA DEFINITIVA DE PI ANO

GESTO PARA CAMBIAR SONIDO

Para poder cambiar el set de sonidos a otro instrumento el usuario deber en primer lugar colocar su
mano derecha al costado de su cabeza durante 3 segundos, tras lo cual se le informar al usuario que su
mano ha sido reconocida travs de un audio, luego su mano derecha deber retirada del costado de su
cabeza para que la aplicacin proceda a cambiar el set de sonido a otro instrumento, lo cual
nuevamente ser informado a travs de un audio que pronunciar el instrumento que ha sido activado.
Entre los instrumentos de msica que el usuario puede elegir se encuentran: Piano, clavinet, batera y
piano strings. Si deseas saber cmo funciona especficamente este mtodo, puedes revisar en el cdigo
fuente Form1.cs la funcin reconocer_mano(Skeleton S) que se adjunta en el directorio de la
documentacin del proyecto. A continuacin se muestran imgenes con las indicaciones que el usuario
debe realizar para cambiar el set de sonidos.
[PEGAR IMGENES]

PLATAFORMA DEFINITIVA DE PI ANO

La plataforma fsica definitiva de Piano Fuzzy fue una pizarra no utilizada por el departamento de
Matemticas de la Universidad de La Serena, la cual tuvo que ser limpiada con alcohol antes de
proceder a dibujar las respectivas teclas del piano con un plumn permanente. A los bordes del piano se
pusieron imgenes con las instrucciones de Piano Fuzzy para poder cambiar el set de sonidos.
Adicionalmente, a cada tecla se le peg una imagen que indicaba a qu nota musical pertenecan. Las
siguientes fotos son el resultado de la construccin de la plataforma fsica de Piano Fuzzy.
[PEGAR IMGENES]

PRUEBA DE PIANO FUZZY EN UN ESPACIO PBLICO

LUGAR Y FECHA ELEGI DA
Lugar: Hall del departamento de Matemticas de la Universidad de La Serena.
Horario: De las 9:30 hrs hasta las 12:30 hrs.
Fecha: Viernes 11 de Julio de 2014.
Usuarios: Estudiantes y profesores del departamento de matemticas de la ULS
FOTOS DEL EVENTO

[PEGAR IMGENES]

CONCLUSIONES DE LAS PRUEBAS

La reaccin del pblico frente a Piano Fuzzy fue muy positiva ya que se logr impresionar a alumnos y
profesores durante el tiempo que estuvo dispuesto el piano en el Hall del departamento de
Matemticas de la universidad de La Serena. Hubo varias personas que jugaron con el piano tratando
de reproducir alguna meloda o simplemente tratando de improvisar. Si bien el piano contaba con
algunos defectos menores, eso no fue impedimento para que la aplicacin tuviera un buen
funcionamiento, lo cual nos deja conformes como grupo desarrollador debido a que el pblico encontr
que Piano Fuzzy era novedoso y entretenido.

CONCLUSIONES FINALES

El desarrollo de Piano Fuzzy nos permiti obtener un aprendizaje y experiencia desde varias
perspectivas, en primer lugar se logr utilizar una herramienta novedosa como lo es la Kinect de Xbox
360, dispositivo que nos posibilit desarrollar una aplicacin con una interaccin del humano-
computador basada en movimientos corporales, permitindonos trabajar en una nueva rea de la
computacin que quizs el da de maana sea de gran utilidad en el ambiente laboral en el cual nos
desenvolvamos. Otro aspecto a destacar fue el trabajo en equipo, debido a que se log implementar un
producto de software acorde a nuestras expectativas a travs de la asignacin semanal de tareas que
deban ser ejecutadas por cada uno de los integrante del equipo, lo cual fue fundamental para el
desarrollo progresivo y planificado del proyecto.
La reaccin del pblico frente a Piano Fuzzy fue muy positiva ya que se logr impresionar a alumnos y
profesores durante el tiempo que estuvo dispuesto el piano en el Hall del departamento de
Matemticas de la universidad de La Serena. Hubo varias personas que jugaron con el piano tratando
de reproducir alguna meloda o simplemente tratando de improvisar. Si bien el piano contaba con
algunos defectos menores, eso no fue impedimento para que la aplicacin tuviera un buen
funcionamiento, lo cual nos deja conformes como grupo desarrollador, debido a que el pblico
encontr que Piano Fuzzy era novedoso y entretenido.
Adicionalmente, pensamos que los objetivos del curso se cumplieron a cabalidad con el desarrollo de
Piano Fuzzy, principalmente porque logramos desarrollar una aplicacin con una interaccin de usuario
diferente a la convencional y que logr interactuar con el usuario de manera fcil e intuitiva.
Por ltimo, cabe sealar que la aplicacin es perfectible indudablemente, ya que se puede mejorar la
calibracin de la lgica difusa o utilizar otro mtodo de muestreo (como la nube de puntos) para poder
eliminar completamente el problema del error del sensor Kinect sobre la captura del esqueleto. Otra
mejora podra ser la inclusin de los semitonos y/o aadir ms instrumentos y teclas al piano.
WEBGRAF A

Informacin relativa al dispositivo Kinect
http://es.wikipedia.org/wiki/Kinect
http://punttic.cat/aulatac_2012/Quim_Fonoll/kinect-2012.pdf
Informacin relativa a la instalacin de herramientas para comenzar con la programacin de la
Kinect
http://blanchardspace.wordpress.com/2013/03/23/comenzando-a-desarrollar-aplicaciones-con-kinect/

S-ar putea să vă placă și