Está en la página 1de 99

Desarrollo de una Aplicacin Mvil para la Recuperacin de Informacin

Musical por Similitud de Audio en Productos Musicales de los Laboratorios


Sociales de Cultura y Emprendimiento (LASO)

RODRIGO ARANGO AYALA


rarango@academia.usbbog.edu.co

FREDDY ANDRS LOZANO OLIER


flozano@academia.usbbog.edu.co

UNIVERSIDAD DE SAN BUENAVENTURA


FACULTAD DE INGENIERAS
INGENIERA DE SONIDO
BOGOT D.C.
2016

Desarrollo de una Aplicacin Mvil para la Recuperacin de Informacin


Musical por Similitud de Audio en Productos Musicales de los Laboratorios
Sociales de Cultura y Emprendimiento (LASO)

RODRIGO ARANGO AYALA

FREDDY ANDRS LOZANO OLIER

Proyecto de Grado para optar al ttulo de Ingeniero de Sonido


Tutor
Luis Alejandro Carrillo Flrez
Ingeniero de Sonido

UNIVERSIDAD DE SAN BUENAVENTURA


FACULTAD DE INGENIERAS
INGENIERA DE SONIDO
BOGOT D.C.
2016

Nota de Aceptacin
________________________________
________________________________
________________________________
________________________________
________________________________

________________________________
Firma del Presidente del Jurado

________________________________
Firma del Jurado

________________________________
Firma del Jurado

Bogot D.C., __ de _____ del 2016

AGRADECIMIENTOS
A nuestros padres y hermanos por ser nuestros guas y ejemplos de vida, aquellos
que pese a las dificultades ofrecieron su amor y apoyo incondicional en todas
nuestras decisiones.
Al profesor Yamil Buenaos del programa de Ingeniera de Sistemas y Andrs
Felipe Grisales por habernos retroalimentado de una manera atenta y constructiva
en la temtica de Android y Java.
A Julin Beltrn de LASO por proveernos de informacin y sugerencias acerca de
la viabilidad del proyecto a emprender.
A nuestros amigos, compaeros, colegas y todas las personas que compartieron su
valioso tiempo con nosotros y que da a da nos brindaron sus mejores energas
para la consecucin de nuestras metas.

CONTENIDO
INTRODUCCIN...................10
1. PLANTEAMIENTO DEL PROBLEMA......................11
1.1. ANTECEDENTES..11
1.2. DESCRIPCIN Y FORMULACIN DEL PROBLEMA................13
1.2.1. PREGUNTA PROBLEMA..14
1.3. JUSTIFICACIN....14
1.4. OBJETIVOS............................................................................15
1.4.1. OBJETIVO GENERAL............................................................................15
1.4.2. OBJETIVOS ESPECFICOS..................................................................15
1.5. HIPTESIS...........................16
1.6. ALCANCES Y LIMITACIONES.........................................................................16
1.6.1. ALCANCES............................................................................................16
1.6.2. LIMITACIONES......................................................................................16
2. MARCO DE REFERENCIA..17
2.1. MARCO TERICO...........................................................................................17
2.1.1. PROCESAMIENTO DIGITAL DE SEALES......17
2.1.1.1. CONVERSIN ANLOGA-DIGITAL...17
2.1.1.2. PROCESADORES DE SEALES DIGITALES..18
2.1.1.3. FILTRACIN...19
2.1.1.3.1.
FILTROS DIGITALES....20
2.1.1.4. MODULACIN.......20
2.1.1.5. CONVOLUCIN.....21
2.1.1.6. CORRELACIN.........21
2.1.1.7. TRANSFORMADA DE FOURIER....21
2.1.1.7.1.
TRANSFORMADA DE FOURIER SHORT-TIME..22
2.1.1.8. ESPECTROGRAMA..23
2.1.1.9. VENTAJAS Y DESVENTAJAS DEL PROCESAMIENTO
DIGITAL.....................24
2.1.2. RECUPERACIN DE INFORMACIN MUSICAL........25
2.1.2.1. HUELLA DIGITAL ACSTICA..25
2.1.2.2. FUNCIONES HASH.......25
2.1.2.3. TABLAS HASH.......26
2.1.3. SISTEMA OPERATIVO ANDROID..27
2.1.3.1. ARQUITECTURA DE ANDROID..28
2.1.3.2. LIBRERAS..28

2.1.3.3. APLICACIONES.28
2.1.3.4. DISPOSITIVOS MVILES28
2.1.3.5. GOOGLE PLAY..29
2.2. MARCO LEGAL......................................................................29
2.2.1. LEY 1341 DE 2009..29
2.2.2. PNMC DE 200329
3. METODOLOGA.30
3.1. ENFOQUE DEL PROYECTO...30
3.2. LNEA DE INVESTIGACIN DE LA USB..........30
3.2.1. SUBLNEAS DE INVESTIGACIN......30
3.3. CONSIDERACIONES INICIALES DE DISEO....30
3.4. TCNICAS DE RECOLECCIN DE DATOS........31
4. DESARROLLO INGENIERIL31
4.1. MUSIC INFORMATION RETRIEVAL..32
4.1.1. EXTRACCIN DE HUELLA ACSTICA.34
4.1.1.1. FRONT-END36
4.1.1.1.1.
PREPROCESAMIENTO.......37
4.1.1.1.2.
VENTANEO Y SOLAPAMIENTO.38
4.1.1.1.3.
TRANSFORMADA DE FOURIER40
4.1.1.1.4.
EXTRACCIN DE PICOS DE ALTO NIVEL..40
4.1.1.2. MODELADO DE HUELLAS DIGITALES.42
4.1.2. BASE DE DATOS Y MOTOR DE BSQUEDA..44
4.1.2.1. BIBLIOTECA MUSICAL.47
4.1.2.2. RESULTADO..48
4.2. DESARROLLO DE APLICACIN MVIL...52
4.2.1. ENTORNO DE PROGRAMACIN......52
4.3. DISEO DEL SISTEMA DE MEDICIN.79
4.4. IMPLEMENTACIN EN GOOGLE PLAY...81
5. PRESENTACIN Y ANLISIS DE RESULTADOS..86
5.1. PORCENTAJE DE EFECTIVIDAD..86
5.2. ANLISIS SUBJETIVO DE FUNCIONALIDAD..89
6. CONCLUSIONES..94
7. RECOMENDACIONES.96
8. BIBLIOGRAFA..97
9. ANEXOS..99
10. GLOSARIO...113

LISTA DE IMGENES
Figura 1. Modelado de procesamiento de seales A/D y D/A.
Figura 2. Filtro anlogo de segundo orden Sallen & Key y respuesta en frecuencia.
Figura 3. Anlisis espectral de seales digitales.
Figura 4. Transformada de Fourier en tiempo corto STFT.
Figura 5. Espectrograma de una seal.
Figura 6. Asignacin de Hash.
Figura 7. Esquema del proceso de clasificacin de colecciones (hashing).
Figura 8. Esquema de extraccin de huella digital acstica planteado por Wang.
Figura 9. Esquema de extraccin de huella digital acstica planteado por Philips.
Figura 10. Esquema general del proceso de identificacin de canciones por similitud
de audio.
Figura 11. Diseo del algoritmo implementado.
Figura 12. Estructura de FRONT-END y Modelado de Huella Digital Acstica.
Figura 13. Diagrama de Pre procesamiento.
Figura 14. Seal de audio pre procesada.
Figura 15. Diagrama de ventaneo.
Figura 16. Funcin ventana aplicada a una cancin.
Figura 17. Transformada de Fourier. Cancin Mara y t.
Figura 18. Extraccin de descriptores de alto nivel energtico.
Figura 19. Extraccin de descriptores de alto nivel energtico a una FFT.
Figura 20. Espectrograma de una cancin.
Figura 21: Grfico de espectrograma y obtencin de picos con intensidad de nivel
propuesto por Wang para Shazam.
Figura 22. Extraccin y comparacin de huella digitales: Seal de prueba vs.
Cancin de base de datos.
Figura 23. Almacenamiento de huellas digitales.
Figura 24. Tabla Hash de huellas digitales.
Figura 25. Comparacin de tiempos de corrimiento entre hash de huella digital de
muestra vs hash de huella digital de base de datos: Sin coincidencias.
Figura 26. Comparacin de tiempos de corrimiento entre hash de huella digital de
muestra vs hash de huella digital de base de datos: sin coincidencias.
Figura 27. Huella digital acstica: Come Round - Elkin Robinson.
Figura 28. Huella digital acstica: Creole Vibrations - Elkin Robinson.

Figura 29. Huella digital acstica: Keep It Calm - Elkin Robinson.


Figura 30. Huella digital acstica: Mi Tumbao - Alexis Play.
Figura 31. Huella digital acstica: Mrala - Alexis Play.
Figura 32. Huella digital acstica: Ponindote a Gozar - Alexis Play.
Figura 33. Huella digital acstica: Despgate Teo Rod.
Figura 34. Huella digital acstica: Pgate al Beat Teo Rod.
Figura 35. Huella digital acstica: Mara y t Teo Rod.
Figura 36. Huella digital acstica: Independencia Teo Rod.
Figura 37. Entorno de desarrollo Java.
Figura 38. Diagrama de clases algoritmo.
Figura 39. Diagrama de bloques algoritmo.
Figura 40. Topologa de red.
Figura 41. Ventana principal de la aplicacin web.
Figura 42. Ventana para cargar cancin a la base de datos
Figura 43. Coleccin de canciones cargadas a la base de datos.
Figura 44. Clase LAME para codificacin mp3.
Figura 45. Permisos del Android Manifest.
Figura 46 Estructura del proyecto Android
Figura 47. Interfaz principal de aplicacin mvil.
Figura 48. AVD y logCat en ejecucin.
Figura 49. Aplicacin Versin 1.0.
Figura 50. Aplicacin Versin 1.1.
Figura 51. Procedimiento de medicin.
Figura 52. Seleccin de cuenta para desarrollador en Google Play.
Figura 53. Pantalla de inicio de Google Play Developer Console.
Figura 54. Definicin del ttulo y el lenguaje de la aplicacin.
Figura 55. Paso a paso cargar aplicacin Lasopedia a Google Play.
Figura 56. Panel de aplicaciones subidas a Google Play Developer Console.
Figura 57. Aplicacin mvil en pantalla de telfono celular.
Figura 58. Aplicacin mvil Lasopedia en pantalla de telfono celular.
Figura 59. Aplicacin mvil Lasopedia lista para funcionar.

LISTA DE TABLAS
Tabla 1. Caracterizacin de biblioteca musical.
Tabla 2. Listado de equipos de medicin.

LISTA DE GRFICAS
Grfico 1. Porcentaje de acierto vs. Relacin seal-ruido obtenido por Wang.
Grfico 2. Tasa de Reconocimiento [%] vs. SNR [dB]. Cancin: Despgate - Teo
Rod.
Grfico 3. Tasa de Reconocimiento [%] vs. SNR [dB]. Cancin: Mi Tumbao - Alexis
Play.
Grfico 4. Tasa de Reconocimiento [%] vs. SNR [dB]. Cancin: Independencia Teo Rod.
Grfico 5. Efectividad total de Tasa de Reconocimiento [%] vs. SNR [dB].
Grfico 6. Relacin de usuarios con la industria musical.
Grfico 7. Medios de comunicacin ms utilizados por los usuarios.
Grfico 8. Frecuencia de uso de aplicaciones relacionadas con la msica.
Grfico 9. Necesidad de aplicaciones musicales segn los usuarios.
Grfico 10. Frecuencia de uso de aplicaciones mviles musicales.
Grfico 11. Necesidad de aplicaciones musicales en el mercado.
Grfico 12. Interaccin del usuario con aplicaciones relacionadas a la msica.
Grfico 13. Experiencia del usuario con la aplicacin.

INTRODUCCIN
El hecho de poder capturar en un instante un fragmento de una cancin que te ha
causado curiosidad, a travs de un software que graba los patrones sonoros que se
estn reproduciendo, realiza las correcciones correspondientes y, de inmediato te
ofrece la respuesta con toda la informacin contenida alrededor de la cancin1,
proporciona una herramienta efectiva para la circulacin y preservacin de
contenidos que giran en torno al desarrollo de las prcticas musicales en el mundo.
La recuperacin de informacin musical o Music Information Retrieval (MIR), es un
rea de investigacin interdisciplinaria que abarca la informtica y la recuperacin
de informacin, la musicologa y teora de la msica, ingeniera de audio y
procesamiento de seal digital, la ciencia cognitiva, la bibliotecologa, entre otras.
Principalmente se encarga del problema de consultar y clasificar colecciones
musicales en base a contenidos de audio y/o documentos almacenados en una
base de datos.
El objetivo de esta investigacin es desarrollar un proyecto aplicado que resuelva
un problema de alto impacto en los Laboratorios Sociales de Cultura y
Emprendimiento (LASO2), donde se pretende programar una aplicacin para
dispositivos mviles Android que denominaremos Lasopedia app para que sirva
como extensin para los medios de comunicacin digital del Ministerio de Cultura.
El principal funcionamiento de esta herramienta se basa en implementar un sistema
de recuperacin de informacin musical que permita ofrecer informacin
documentada de artistas, productores y emprendedores vinculados a la red LASO,
a partir de la interaccin en una plataforma mvil de contenidos musicales de acceso
libre.

Downie, J. Stephen. Music information retrieval (Chapter 7). In Annual Review of Information
Science and Technology 37, ed. Blaise Cronin, 295-340. Medford, NJ: Information Today, 2003.
2

Laboratorios Sociales de Cultura y Emprendimiento (LASO) es un proyecto de organizacin


estratgica y comunicacional para jvenes implementado a partir del ao 2009 por el Ministerio de
Cultura de Colombia, implementado del Plan Nacional de Msica para la Convivencia, basado en el
concepto de emprendimiento cultural en red para impulsar la formacin tcnica en produccin de
contenidos artsticos y digitales ejecutado a travs de sus 6 componentes de desarrollo para
poblaciones y organizaciones de actividad informal: Formacin de jvenes y formadores, circulacin
de artistas y productores, sostenibilidad, organizacin y vnculos, infraestructura, comunicacin y
visibilidad.

10

1. PLANTEAMIENTO DEL PROBLEMA


1.1. ANTECEDENTES
El estudio de sistemas que permiten el desarrollo de formas de gestin para la
conservacin, el acceso, la investigacin y coleccin de material musical, se
remonta a la dcada de los aos 60, cuando Kassler (1966) fue la primera persona
en mencionar y realizar publicaciones utilizando la terminologa de Music
Information Retrieval. A raz de este esfuerzo, en las siguientes dcadas
incrementaron las investigaciones345 sobre el desarrollo de tecnologas que
permiten identificar y comprimir grandes colecciones de material en formato digital
(bibliotecas digitales), mediante el anlisis de algunas caractersticas de las seales
de audio, tales como: meloda6, ritmo7, timbre, estructura, entre otros.
Dcadas ms tarde, para el ao 1999 se organizaron los primeros eventos
independientes sobre la temtica pero no obtuvieron el alcance deseado en varias
ocasiones consecutivas durante el mismo ao. Bast con pasar un ao para que la
National Science Foundation8 decidiera destinar recursos para organizar un mdulo
de trabajo formal sobre MIR, como mecanismo de incubamiento al proyecto piloto
ejecutado anteriormente. Finalmente en Octubre de 2000, nace el primer Simposio
Internacional sobre Recuperacin de Informacin Musical (ISMIR) en
Massachusetts. A partir de all, esta organizacin proporciona toda la informacin
relativa a los avances e innovacin en los mtodos, algoritmos e investigaciones
3

Moorer, J. On the Segmentation and Analysis of Continuous Musical Sound by Digital Computer,
Stanford University, CA, USA, July 1975.
4

Dowland, S. Computer Tools for Music Information Retrieval, Oxford, New College, UK, 1988.

Maher, R. An Approach for the Separation of Voices in Composite Musical Signals, University of
Illinois, IL, USA, 1989.
6

GMEZ, L. SOSSA, Humberto, BARRN, Ricardo. CUEVAS, Francisco. JIMENEZ, Julio.


Comparacin de Representaciones Intervlicas Hansonianas para Recuperacin de Informacin
Musical, Revista Iberoamericana de Inteligencia Artificial, No.34 (2007), pp. 7-15.
7

E. Tsunoo, G. Tzanetakis, N. Ono and S. Sagayama. Audio Genre Classification Using Percussive
Pattern Clustering Combinated With Timbral Features. Graduate School of Information Science and
Technology, The University of Tokyo, Japan.
8

La NSF es la agencia gubernamental de los Estados Unidos, que impulsa investigacin y


educacin fundamental en todos los campos no mdicos de la Ciencia y la Ingeniera.

11

realizados en este campo. Los resultados son presentados y publicados en las


convenciones MIREX (Music Information Retrieval Evaluation eXchange)
organizadas por ISMIR.
A consecuencia de esto, la industria musical ha encontrado en algunos productos9
que implementan servicios de recuperacin de informacin musical, un mecanismo
sencillo y eficaz de acceso a contenidos musicales, brindando una mayor intimidad
entre los artistas y usuarios, lo cual ha permitido a nuevos canales de distribucin,
promocin y reproduccin, posicionarse en un mercado que cada da trasciende su
accionar, en base a procesos de innovacin en el manejo de las tecnologas de la
informacin y las comunicaciones.
Un ejemplo de aplicaciones comerciales, fue el desarrollado por Wang (2006) para
la empresa Shazam Entertainment, donde implement y despleg comercialmente
un motor de bsqueda de audio flexible que utiliza un algoritmo resistente al ruido y
la distorsin, computacionalmente eficiente, capaz de identificar rpidamente un
corto segmento de msica capturada, a travs de un micrfono de celular y brindar
informacin de una biblioteca digital de ms de un milln de canciones. Hoy en da
Shazam es uno de los motores de bsqueda de msica ms utilizado en el mundo.
Como adicin a lo anterior, cabe mencionar que en el informe sobre la industria
digital que realiza la IFPI (2014), se resalta la creciente importancia de los
mercados emergentes como motores de la recuperacin de la industria y enfatiza la
relevancia de un mercado en desarrollo y ampliacin a travs de la internet, est
permitiendo que los canales digitales de comercializacin de servicios musicales
experimenten una participacin del 39% de ingresos sobre el ingreso total del
consumo de la msica en el mundo (cifra que asciende a los USD 5,900 millones).
En la actualidad, a nivel nacional no existen empresas que desarrollen productos
relacionados con MIR, por lo tanto, el desarrollo de este proyecto presenta un fuerte
componente de innovacin en la investigacin de esta rea del procesamiento
digital de seales para la Universidad de San Buenaventura.

Los sistemas de recuperacin de informacin musical ya se estn utilizando en diversas


plataformas como Shazam, GraceNote, Google Music, Last.fm, Pandora, Spotify, Echonest,
entre otras, las cuales requieren de amplias bases de datos para sus procesos de identificacin y
clasificacin de documentos.

12

1.2. DESCRIPCIN Y FORMULACIN DEL PROBLEMA


En el poco tiempo de accin que lleva el programa LASO (2009) se han logrado
consolidar algunos procesos muy importantes para la formacin y ejecucin de
proyectos musicales, entre los cuales cabe destacar: 18 laboratorios LASO en el
pas, programa educativo en auxiliar de produccin de audio, 320 grupos musicales
vinculados, 480 grupos artsticos y creativos, 1 manual de produccin de audio,
entre otros.
En la actualidad, el programa LASO ha obtenido grandes resultados en sus
procesos de accin y esto se debe, en gran medida, a que ha habido un esfuerzo
por parte de los ltimos gobiernos de promover la construccin y fortalecimiento de
la paz en Colombia, a travs del aumento de asignacin de recursos para las
instituciones encargadas de implementar los modelos desarrollo social en el pas.
Otro punto importante a resaltar, es que se realiz una bsqueda en diferentes
plataformas de descarga de aplicaciones mviles, y se encontr que en Colombia
solo hay una aplicacin de contenidos culturales llamada Turismo Colombia. Es
necesario contribuir al desarrollo de este tipo de tecnologas, ya que permiten
conformar una interaccin personalizada con los usuarios objetivos e incentiva al
fcil acceso a los contenidos que se desean ofrecer.
Se identific en la pgina web del Grupo de Emprendimiento Cultural del Ministerio
de Cultura una herramienta denominada LASOPEDIA que consiste en crear el
directorio de usuarios, contenidos y laboratorios de emprendimiento con los que
cuenta el proyecto para incentivar, motivar y apoyar procesos creativos y
organizativos en red para el emprendimiento cultural, y la produccin de contenidos
culturales mediante el uso de nuevas tecnologas en los distintos municipios del
pas.
A pesar de esto, Lasopedia an no ha logrado su completo desarrollo e
implementacin, puesto que hasta el momento solo existe un espacio de
visualizacin de contenidos10 y como consecuencia de esto, una de las grandes
problemticas que se encuentran es que muchos de los productos musicales que
se desarrollan en el programa no han logrado trascender en el mercado para la auto
sostenibilidad de los artistas vinculados. Esto fenmeno se debe a que algunos de
los contenidos que se desarrollan en el programa carecen de estrategias y
herramientas digitales que permitan una ptima visibilizacin de los procesos,
brindando toda la informacin referente a los emprendedores y artistas, asimismo a
los servicios y productos que se ejecutan en LASO.

10

Ms informacin se encuentra disponible en:


http://emprendimientocultural.org/lasopedia/Paginas/default.aspx

13

1.2.1. PREGUNTA PROBLEMA


Cmo desarrollar una herramienta de visualizacin artstica involucrando un
sistema de recuperacin de informacin musical en una plataforma de dispositivo
mvil para productos artsticos de la red LASO?
1.3. JUSTIFICACIN
Para nosotros es muy importante que la gente est informada sobre lo que pasa
con la msica que es de ac, porque es muy importante proteger, cuidar y proveer
esta msica de unas condiciones propicias para continuar11.
El desarrollo de este proyecto aplicado sirve a un propsito social, principalmente al
afectar a una organizacin gubernamental que fomenta el desarrollo social de una
poblacin a travs de la produccin de contenidos artsticos y culturales,
interviniendo en sus procesos de circulacin y comunicacin.
Las aplicaciones mviles utilizadas en celulares inteligentes, tabletas y diferentes
dispositivos; adems de ofrecer un acceso directo y sencillo para la navegabilidad
en plataformas de contenidos digitales, se han convertido en herramientas
esenciales para el entretenimiento y la productividad, adems de utilizarse como
canales de distribucin y visibilizacin de productos comerciales.
La finalidad del proyecto es construir una herramienta para fortalecer los procesos
de visibilizacin y distribucin de productos y servicios artsticos llevados a cabo en
esta organizacin, a travs de una plataforma mvil de libre acceso y fcil
navegabilidad, que le permita al usuario interactuar con la plataforma y red de
contactos, ofreciendo la oportunidad de fomentar la generacin de una cultura de
apoyo y formacin de audiencias en torno a los productos desarrollados en LASO.
Los ingenieros de sonido somos personas directamente involucradas con la msica,
y por ello pensamos que esta herramienta podra generar un nicho para la
identificacin y formalizacin de la industria musical en Colombia, debido a que este
tipo de aplicaciones tecnolgicas brindan la facilidad a los usuarios para encontrar
a sus artistas y msica favorita, asimismo como les permite a los agentes de la
cadena de valor de la msica que identifiquen un sector de mercado objetivo, que
les contribuya a desarrollar y subsistir de los contenidos artsticos.
Como evidencia de lo anterior, el Ministerio de Cultura en un comunicado de prensa
afirma: Este programa pretende construir redes de msicos locales y establecer
puentes a travs de una plataforma WEB, que permita el intercambio de
11

Entrevista a Luca Ibez, Co-fundadora Corporacin Sonidos Enraizados, 20 de Marzo de 2014:


http://i.letrada.co/post/corrientealterna/138/musica-y-resistencia-en-colombia

14

experiencias. Tambin manifest que de acuerdo a las demandas del sector


musical, ha puesto a disposicin de los creadores y autogestores espacios donde
se puedan apropiar y experimentar las nuevas tecnologas de la msica 12.
En este sentido, estamos llamados a actuar como agentes en busca de la creacin
y transformacin de todo aquello que lleve a desarrollar productos de vanguardia e
innovacin, por ello le apostamos al fortalecimiento de programas como LASO que
permitan generar desarrollo al sector musical en Colombia.
1.4. OBJETIVOS

1.4.1. OBJETIVO GENERAL

Desarrollar y evaluar una aplicacin mvil con un sistema de Recuperacin


de Informacin Musical (MIR) como herramienta para la visibilizacin de
productos musicales llevados a cabo en los Laboratorios Sociales de
Emprendimiento (LASO).

1.4.2. OBJETIVOS ESPECFICOS

Crear una base datos compuesta por los espectrogramas de las canciones a
utilizar en la aplicacin.

Disear y desarrollar una aplicacin mvil para la plataforma android donde


se implemente el sistema MIR por similitud de audio.

Validar la eficiencia de la aplicacin mvil a travs de la medicin del acierto


para clasificar y recuperar contenido de audio musical por correlacin.

Implementar la aplicacin en la plataforma Google Play para descarga


gratuita.

Evaluar el impacto de la aplicacin mvil en la red LASO a travs de la


realizacin de una encuesta estadstica de preguntas cerradas a una muestra
de usuarios.

12

Comunicado de prensa del Ministerio de Cultura sobre la industria musical:


http://www.mineducacion.gov.co/cvn/1665/w3-article-202761.html

15

1.5. HIPTESIS
La aplicacin lograr un 70% de efectividad en el reconocimiento e identificacin
musical bajo los parmetros analizados por similitud y as afectar positivamente el
proceso de visibilizacin de los productos musicales de los laboratorios de
emprendimiento LASO.
1.6. ALCANCES Y LIMITACIONES
1.6.1. ALCANCES

La base de datos de archivos musicales se extender hasta los artistas


vinculados a la red LASO.

El apoyo del ministerio de cultura al proyecto permitir la bsqueda de


organizaciones nacionales e internacionales interesadas en el desarrollo
cultural y tecnolgico de la regin.

La aplicacin se dispondr a usuarios de manera gratuita debido a su


carcter acadmico.

1.6.2. LIMITACIONES

La implementacin de bases de datos de organizaciones comerciales son de


difcil acceso por su precio y derechos de autor.

La aplicacin mvil ser implementada nicamente para dispositivos


Android, esto implica que el acceso de usuarios sea restringido.

16

2. MARCO DE REFERENCIA
2.1. MARCO TERICO
2.1.1. PROCESAMIENTO DIGITAL DE SEALES
El procesamiento digital de seales es un rea de investigacin ingenieril que se
encarga del anlisis y procesamiento de seales, sin importar su naturaleza. Este
proceso se basa en la modificacin de parmetros encontrados en la naturaleza del
comportamiento fsico en un mbito de modelacin digital mediante herramientas
matemticas provistas por softwares de edicin, programacin y compilacin,
aunque su utilizacin no est sujeta a este tipo de plataformas.
Las seales de audio, son obtenidas mediante transductores, micrfonos para este
caso y representadas digitalmente mediante secuencias de muestras, este proceso
es conocido como Conversin Anloga-Digital (A/D). Asimismo este proceso puede
llevarse a cabo inversamente, convirtiendo una seal digital a una seal anloga
mediante conversores digital-analgico.
2.1.1.1.

CONVERSIN ANLOGA-DIGITAL

Una seal digitalizada es tratada en el procesador digital de seales (tratado en el


siguiente inciso) que realizarn tareas de procesamiento deseadas. No obstante,
han sido las configuraciones programables tanto en software como en hardware, o
sistemas embebidos, los que han brindado al procesamiento digital una flexibilidad
inalcanzable mediante el uso de sistemas anlogos equivalentes.
En la actualidad el procesamiento digital de seales ha alcanzado hasta los ms
pequeos dispositivos mviles utilizando algoritmos complejos que hace tan solo 15
aos hubieran requerido computadores de gran tamao y costo.
En la Figura 1 se puede observar el comportamiento de una seal x(t) que viene de
un medio anlogo y es capturada por un transductor de entrada a un sistema de
conversin digital; En la casilla ocurre la conversin A/D, en el cual la seal es
sampleada y cuantizada con la finalidad de transcribirla al dominio discreto x(n).
Luego pasa por un sistema de procesamiento DAFX, en el cual la seal ser
operada y modificada de acuerdo a los requerimientos del caso. Por ltimo, la seal
procesada y(n) es llevada a un sistema conversor D/A en donde es reconstruida
nuevamente a seal anloga (t).

17

Figura 1. Modelado de procesamiento de seales A/D y D/A

Fuente: DAFX (Digital Audio Effects).


2.1.1.2.

PROCESADORES DE SEALES DIGITALES

Un procesador digital de seales se define como cualquier sistema electrnico


capaz de procesar digitalmente una seal, aplicando operaciones matemticas a
seales en su representacin digital.
El corazn de un sistema de procesado digital puede ser un microcontrolador, un
procesador de propsito general o un procesador digital de seales (DSP). En la
actualidad los cuatro grandes fabricantes de DSP son Texas Instruments, con la
serie TMS320; Motorola, con las series DSP56000, DSP56100, DSP56300,
DSP56600 y DSP96000; Lucent Technologies (anteriormente AT&T), con las series
DSP1600 y DSP3200; y Analog Devices, con las series ADSP2100 y ADSP21000.
Los DSP utilizan arquitecturas especiales para acelerar los clculos matemticos
intensos implicados en la mayora de sistemas de procesado de seal en tiempo
real. Tienen diversas aplicaciones que van desde el uso en sistemas de radar,
aplicaciones
automotrices,
industriales,
instrumentacin,
medicina,
telecomunicaciones, hasta la electrnica de consumo. Cada DSP tiene uno o varios
enfoques especficos, ya que sera muy dispendioso construir dispositivos que
pretendiera abarcar todas las funcionalidades de este tipo de sistemas.

18

2.1.1.3.

FILTRACIN

La filtracin es una de las operaciones complejas ms usadas en aplicaciones de


todo tipo. La filtracin es usada para pasar ciertos componentes frecuenciales de
una seal a travs de un sistema sin ninguna distorsin y bloquear cierto rango o
grupo de componentes frecuenciales. Esta implementacin es llamada filtro. El
rango de frecuencia que pasa a travs del filtro es llamado banda de paso
(passband), y el rango de frecuencias que es bloqueado es llamado banda de
detencin (de la traduccin del ingls stopband). Se pueden definir varias clases de
filtros, dependiendo de la naturaleza de la operacin del filtro. En la mayora de los
casos, la operacin de filtracin para seales anlogas es lineal y es descrita por la
siguiente integral:

h(t )x()d

Donde x(t) es la seal de entrada y y(t) es la seal de salida del filtro, y h(t) es la
respuesta al impulso.
Un filtro pasa bajo, permite el paso de componentes frecuenciales debajo de una
frecuencia especfica llamada frecuencia de corte (fc), y bloquea todas las
frecuencias por encima de esta. De igual manera existen el filtro pasa altos, pasa
banda, entre otros, que a travs de frecuencias de corte definen los rangos de
frecuencia de paso o de bloqueo.

Figura 2. Filtro anlogo de segundo orden Sallen & Key y respuesta en frecuencia.

Fuente: DAFX (Digital Audio Effects).


Los componentes (R1, R2 y C ) estn relacionados con los parmetros de ajuste fc
y , as:

19

1
2 1 2

1 + 2
21 2

Estas relaciones son sencillas, sin embargo ambos coeficientes de ajuste estn
acoplados. Por lo tanto, es difcil variar uno mientras el otro permanece constante.
A consecuencia de esto, esta estructura no se recomienda cuando los parmetros
han de ser sintonizado de forma dinmica y cuando se desean bajos factores de
amortiguacin.
2.1.1.3.1.

FILTROS DIGITALES

Los filtros digitales son sistemas utilizados para modificar el espectro de una seal
igual que sus equivalentes analgicos, permite el paso de ciertas frecuencias en el
espectro y bloqueando otras. Mediante el uso de hardware digital como bloque
funcional bsico (DSP o FPGA, por ejemplo). Son apropiados para un amplio campo
de aplicaciones, como compresin de datos, procesamiento de seales biomdicas,
procesamiento de seales de audio, entre otras.
Consiste fundamentalmente en un algoritmo mediante el cual una seal digital o
secuencia numrica denominada entrada se transforma en una segunda
secuencia de nmeros denominada seal digital de salida. Son sistemas
predecibles, flexibles, consistentes y precisos.
2.1.1.4.

MODULACIN

A partir de las seales x[n] y y[n] conocidas, efectuando el producto de estas en


cada instante de tiempo se genera una nueva secuencia w1[n] definida as:
w1[n]= x[n] . y[n]
Es posible minimizar los efectos del ruido y la interferencia en seales mediante la
modulacin usando cierto tipo de esquemas. Generalmente, dichos esquemas
requieren un ancho de banda de transmisin mucho mayor que el de la seal del
mensaje. De esta manera se intercambia ancho de banda por reduccin de ruido,
un aspecto importante en el tratamiento de seales.

20

2.1.1.5.

CONVOLUCIN

Para el caso de sistemas lineales e invariantes en el tiempo, la integral de


convolucin permite determinar la respuesta del sistema ante cualquier entrada, a
partir del conocimiento de la respuesta del sistema ante una nica entrada
particular, el impulso. Si la respuesta del sistema ante un impulso se nota como h
(t), la salida de un sistema lineal e invariante en el tiempo excitado con una entrada
cualquiera x (t) est dada por la expresin:

y(t) = x()h(t )d = x(t )h()d

2.1.1.6.

CORRELACIN

Existen aplicaciones en las cuales es necesario comparar una seal de referencia


con una o ms seales para determinar similitud entre ellas y determinar
informacin adicional basada en la similitud. La correlacin es altamente susceptible
a cambios temporales, por esto, si se requiere una exacta correlacin entre seales,
el sistema debe ser LTI.
En sistemas digitales de comunicacin, un arreglo de datos es representado por un
nico arreglo discreto en el tiempo. Si una de estas secuencias es transmitida el
receptor debe determinar cul secuencia en particular ha recibido mediante la
comparacin de la seal recibida con cada elemento de posibles secuencias del
arreglo. Similarmente, en aplicaciones de radio y sonar, la seal recibida reflejada
desde el objetivo es la versin retrasada de la seal transmitida y al medir este
retraso, es posible determinar la localizacin del objetivo. Los problemas de
deteccin se vuelven ms complicados en la prctica.
2.1.1.7.

TRANSFORMADA DE FOURIER

La transformada de Fourier es una de las herramientas principales para el anlisis


en ciencia y tecnologa, ya que permite establecer la relacin entre puntos de vista
muy diferentes relativos a un mismo problema. Gracias a esto es posible utilizar
diferentes anlisis para la resolucin de un problema.
La integral de Fourier es una relacin que nos permite pasar del dominio del tiempo
al dominio de la frecuencia, para realizar un anlisis espectral de la seal capturada

21

e ingresada al sistema. De este modo, se define la transformada de Fourier como:

H(f)= () (2)
Entre las propiedades de la transformada de Fourier se encuentran la linealidad,
simetra, escalamiento, corrimiento en tiempo y frecuencia, entre otras.

Figura 3. Anlisis espectral de seales digitales: Se toman N muestras de audio y


se realiza una transformada discreta de Fourier para producir N muestras del
espectro de la seal.

Fuente: DAFX (Digital Audio Effects).


2.1.1.7.1.

TRANSFORMADA DE FOURIER SHORT-TIME

Esta transformada consiste bsicamente en dividir la seal de entrada en trozos


donde se pueda asumir que la seal es estacionaria. Esto con el fin de reducir un
problema de anlisis de seales no estacionarias mediante la transformada de
Fourier. Para este propsito la funcin se multiplica por una funcin ventana que
inicialmente estar localizada en t=0, cuya anchura corresponde a la longitud de la
seal que se quiere considerar estacionaria.
(, ) = [() ( )] 2

22

Donde
x(t): Seal original.
w *: funcin ventana conjugada.
En cada instante de tiempo t y frecuencia f se calcula un nuevo coeficiente de la
transformada de Fourier.
Figura 4. Transformada de Fourier en tiempo corto STFT.

Fuente: Begoa, I. (2009). Anlisis Tiempo-Frecuencia de la seal de vibracin de


un cambiador de tomas en cargas (tesis de pregrado). Universidad Carlos III de
Madrid, Madrid, Espaa.
En la Figura 4 se muestra un ejemplo de una funcin ventana. La primera funcin
tiene la ventana localizada en t=t1, la segunda en t=t2 y la tercera en t=t3. Estas
ventanas corresponden a tres transformadas de Fourier en tiempos distintos. Por lo
tanto, se obtendr una buena representacin tiempo-frecuencia de la seal de
entrada.
De acuerdo a lo mencionado anteriormente, se puede llevar a cabo una
representacin de la STFT de una seal en tres dimensiones (tiempo, frecuencia y
amplitud), lo cual se denominada espectrograma, con la que no slo se conocern
las componentes de frecuencia de la seal, sino tambin su localizacin en el
tiempo.
2.1.1.8.

ESPECTROGRAMA

A la hora de representar visualmente la energa del contenido frecuencia segn va


variando el tiempo, se hace necesario establecer lo visto en la teora de anlisis de
Fourier para luego obtener las variaciones de frecuencia de una seal limitada. A

23

esta representacin se le denomina espectrograma y puede expresarse


tridimensionalmente si se agregan los niveles de potencia y su intensidad.
El objetivo principal de los espectrogramas es analizar parmetros como la
sonoridad, duracin, frecuencia, estructura, intensidad, el ritmo entre otro tipo de
variaciones en una seal.
Figura 5. Espectrograma de una seal; Los niveles de intensidad se determinan
desde el azul oscuro como los puntos de menor energa, hasta el rojo que son los
puntos de mayor concentracin energtica.

Fuente: Carbajal, E. Reduccin de Ruido en seales mediante la STFT y


espectrogramas.
2.1.1.9. VENTAJAS Y DESVENTAJAS DEL PROCESAMIENTO
DIGITAL
Para poder representar una seal analgica por medio de una seal digital sin que
sufra prdidas considerables, esta debe ser digitalizada con una tasa alta de
muestreo. La tecnologa digital impone lmites de velocidad de procesamiento que,
aunque cada vez son menos restrictivas, determinan los anchos de banda de
seales que se pueden tratar digitalmente. Podramos considerar esto una
desventaja, ya que debido a esto los sistemas anlogos siguen siendo
irremplazables en aplicaciones con seales de anchos de banda por el orden de los
Gigahertz. Otro mbito de dominio analgico son sistemas de bajo consumo de

24

potencia en el orden de los microwatts. Tanto los mdulos de conversin A/D como
D/A, as como los microcontroladores o microprocesadores digitales siempre
tendrn un mayor consumo de potencia en la implementacin de filtros digitales que
filtros homlogos analgicos, o de capacitores conmutados, implementados en
tecnologas integradas.
Se encuentran ventajas de estos sistemas en los casos contrarios, donde las
seales pueden ser digitalizadas sin perder una cantidad importante de informacin
por varias razones: su costo y confiabilidad los pone por encima de los sistemas
analgicos, son sistemas reprogramables, lo que quiere decir que mediante
cambios en sus algoritmos pueden modificarse sus caractersticas, dando
flexibilidad al diseo, adems, las precisiones alcanzadas con sistemas digitales
son mucho ms altas que las alcanzadas con sistemas analgicos en los que el
error acumulado en forma de ruido aumenta en cada etapa del proceso. El desgaste
de los dispositivos es mucho menor para los sistemas digitales que para los
sistemas analgicos.
A pesar de lo dicho anteriormente, una de las ventajas fundamentales del
procesamiento digital es la complejidad que los algoritmos pueden alcanzar, para
los cuales incluso, puede no existir equivalentes analgicos.

2.1.2. RECUPERACIN DE INFORMACIN MUSICAL


2.1.2.1.

HUELLA DIGITAL ACSTICA

La huella digital acstica es un vector que contiene un conjunto de informacin sobre


las caractersticas que identifican una seal de audio. Esta es sin duda la
caracterstica ms importante a la hora de identificar canciones con respecto a una
coleccin de archivos de audio agrupados y almacenados en una base de datos.
Las tecnologas que utilizan huellas digitales acsticas han atrado recientemente la
atencin, debido a su capacidad para vincular el audio sin marcar a los metadatos
(nombre, ttulo, gnero, entre otros) y permiten la monitorizacin de audio
independientemente de su formato (wav, mp3, flac, entre otros).
2.1.2.2.

FUNCIONES HASH

Las funciones hash o algoritmos Hash, tambin llamados algoritmos de resumen,


son un sistema que logra codificar unos datos de entrada, entregando una cadena
de bits o una salida alfanumrica de longitud normalmente fija. Esta entrada puede

25

ser texto, una contrasea, archivo, matriz, entre otros. Las funciones hash son
funciones unidireccionales, lo que quiere decir que este algoritmo asegura con su
respuesta, es que nunca se podr saber cules fueron los datos de entrada.
Existen dos tipos de algoritmos Hash: MD5 y SHA. El MD5 (Message-Digest
Algorithm 5) es un algoritmo de reduccin criptogrfico de 128 bits ampliamente
usado.
Figura 6. Asignacin de Hash.

Fuente:
2.1.2.3.

TABLAS HASH

Muchas aplicaciones utilizan sistemas dinmicos que les permiten almacenar


grandes cantidades de informacin compilada y categorizada por identificadores
clave, que permiten organizar informacin proveniente de herramientas, tales como:
diccionarios, bases de datos, colecciones y bibliotecas, entre otras; Es de vital
importancia contener toda una serie de datos que caracterizan un objeto en estudio,
mediante la implementacin de un arreglo matricial que permita mantener
organizadas las grandes cantidades de informacin y que permitan el acceso a los
elementos que la conforman.
Las tablas hash son estructuras de datos no lineales que se utilizan para almacenar
un nmero elevado de datos sobre los que se necesitan operaciones de bsqueda
e insercin muy eficientes. En otras palabras, una tabla hash almacena un conjunto
de pares (clave, valor). Esta clave se asigna a un nmero entero que se utiliza como
un ndice para almacenar el elemento en la tabla hash. El elemento clave se
convierte en un nmero entero por medio de una funcin llamada hash function13.

13

R. Sridhar, A. Amudha, S. Karthiga and Geetha T V. Comparison of Modified Dual Ternary


Indexing and Multi-key Hashing Algorithms for Music Information Retrieval, International Journal of
Artificial Intelligence & Applications (IJAIA), Vol.1, No.3, July 2010, pp. 62.

26

Figura 7. Esquema del proceso de clasificacin de colecciones (hashing).

Fuente: R. Sridhar, A. Amudha, S. Karthiga and Geetha T V. Comparison of Modified


Dual Ternary Indexing and Multi-key Hashing Algorithms for Music Information
Retrieval. International Journal of Artificial Intelligence & Applications (IJAIA), Vol.1,
No.3, July 2010, pp. 63.
La columna (a) contiene los elementos 1,2,3,...,n que contienen la informacin
sugerida por el usuario para indexar en la base de datos. En el siguiente bloque (b)
la funcin hash se encarga de generar las claves que asignan un nmero al
elemento n para almacenar en la tabla hash (c).
2.1.3. SISTEMA OPERATIVO ANDROID
Android es un sistema operativo libre desarrollado por google pensado inicialmente
para dispositivos mviles, que lo distingue de los dems al estar basado en Linux,
un ncleo de sistema operativo libre, gratuito y multiplataforma. El sistema permite
programar aplicaciones en una variacin de Java llamada Dalvik. Al estar basado
en un lenguaje tan conocido como el Java y siendo una plataforma libre adems de
la existencia de herramientas de programacin gratuita hace que una de sus
principales caractersticas sea la cantidad de aplicaciones disponibles. Android
incluye un conjunto de bibliotecas que proporciona la mayor parte de la
funcionalidad de este sistema. Este sistema incluye un SDK (kit de desarrollo de
programacin) que contiene un conjunto de herramientas y recursos diversos para
desarrolladores para su sistema operativo mvil con APIs (Interfaz de programacin
de aplicaciones) necesarios para desarrollar aplicaciones sobre la plataforma
android utilizando el lenguaje de programacin Java. La mayor parte de las
funciones son proporcionadas por un conjunto de bibliotecas de ncleo permitiendo

27

el manejo de estas a travs de las bibliotecas principales del lenguaje de


programacin Java.
2.1.3.1.

ARQUITECTURA DE ANDROID

Para empezar con el desarrollo de aplicaciones es importante conocer la estructura


de este sistema operativo, el cual cuenta con capas que permiten acceder al
programador a las capas ms bajas por medio de libreras con las funcionalidades
necesarias para que una aplicacin haga uso de los componentes de hardware de
los telfonos. Cada una de las capas utiliza elementos de la capa inferior, por ello
esta estructura tambin es conocida como pila.
2.1.3.2.

LIBRERAS

Estas libreras corresponden a bibliotecas nativas de Android, estn escritas en C o


C++. Estas generalmente estn desarrolladas por el fabricante, quien tambin debe
instalarlo en el dispositivo antes de su comercializacin.
El objetivo de estas libreras es proporcionar funcionalidad a las aplicaciones para
acciones que se repiten con cierta frecuencia sin necesidad de codificarlas cada vez
que se utilicen, garantizando llevar a cabo estas tareas de la manera ms eficiente.
OpenGL (motor grfico), SQLite (base de datos), biblioteca multimedia (formatos
audio, video e imagen), entre otras, son algunas de las libreras incluidas
generalmente.
2.1.3.3.

APLICACIONES

Existen dos tipos diferentes de aplicaciones para dispositivos mviles, la aplicacin


nativa y la aplicacin WEB. La aplicacin nativa es aquella que se instala
directamente en el dispositivo y se desarrolla con un lenguaje de programacin
compatible con el dispositivo, mientras que la aplicacin WEB se encuentra
instalada en un servidor tipo web o browser y necesita de l para ejecutarse, el
navegador debe ser compatible con las tecnologas con las que se realiz la
aplicacin web y que corrern de parte de este.
2.1.3.4.

DISPOSITIVOS MVILES

Los dispositivos mviles son aparatos que poseen la caracterstica de mviles por
su pequeo tamao, con capacidades de procesamiento, que es capaz de mantener

28

una conexin intermitente o permanente a una red, poseen memoria limitada y


diseados para funciones especficas pero a su vez pueden llevar a cabo funciones
generales.

2.1.3.5.

GOOGLE PLAY

Google Play Store (anteriormente Android Market) es una plataforma de distribucin


digital de aplicaciones mviles para los dispositivos con sistema operativo Android,
as como una tienda en lnea desarrollada y operada por Google. Esta plataforma
permite a los usuarios navegar y descargar aplicaciones (desarrolladas mediante
Android SDK), juegos, msica, libros, revistas y pelculas. Tambin se pueden
adquirir dispositivos mviles como ordenadores Chromebook, telfonos inteligentes
Nexus, Google Chromecast, entre otros. Es importante resaltar que las aplicaciones
se encuentran en forma gratuita como tambin con costo, y pueden ser descargadas
desde un dispositivo mvil con Android a travs de la aplicacin Play store.14

2.2. MARCO LEGAL


2.2.1. LEY 1341 DE 2009
Este proyecto se realiza bajo la normativa de la LEY 1341 DE 2009, donde se
definen y establecen todos los conceptos y principios del sector de las Tecnologas
de la Informacin y las Comunicaciones en Colombia. Esta ley enfatiza la
importancia de priorizar el acceso a las TIC, la libre competencia, el derecho a la
informacin a travs de los servicios bsicos de las TIC, entre otros.
2.2.2. PNMC DE 2003
El marco de enfoque y accin del Plan Nacional de Msica para la Convivencia
(PNMC, 2003) establece una poltica de Estado hacia la msica, que contribuya a
fortalecer la expresin musical individual y colectiva como factor de construccin de
ciudadana, y a favorecer la sostenibilidad del campo musical a travs de la
inversin pblica continuada y de la articulacin de actores, en condiciones de
equidad.

14

Google Play, https://es.wikipedia.org/wiki/Google_Play

29

3. METODOLOGA
3.1. ENFOQUE DEL PROYECTO
El enfoque de investigacin de este proyecto corresponde al mtodo empricoanaltico, dado que se necesita realizar una investigacin y anlisis previo para
desarrollar experimentalmente mediante un software, un proceso mnemotcnico
que permita obtener los resultados esperados en los algoritmos de Music
Information Retrieval.
3.2. LNEA DE INVESTIGACIN DE LA USB
La lnea de investigacin que se encarga del desarrollo de software aplicado al
procesamiento de seales de audio, corresponde al Procesamiento Digital de
Seales (DSP).
3.2.1. SUBLNEAS DE INVESTIGACIN
Computer Music & Technologies, Tecnologas de la Informacin y Comunicaciones
(TIC).
3.3. CONSIDERACIONES INICIALES DE DISEO
a. Definicin del lenguaje de programacin
- Diagrama de flujo para algoritmo.
- Libreras y paquetes externos.
b. Bibliotecas digitales
- Clasificacin de colecciones musicales por nombre de artista y cancin.
- Servidores y bases de datos.
c. Captura y transcripcin A/D
- Describir los parmetros tenidos en cuenta para la captura y almacenamiento
de seales de audio y colecciones musicales.
- Ajustes de rango dinmico.
- Filtros y linealizadores de seal.
- Seal discreta en el dominio de frecuencia vs. Tiempo (FFT, STFT).
- Espectrogramas.
- Huellas digitales.

30

d. Algoritmo de bsqueda
- Comparacin de huellas digitales.
e.
-

Implementacin de la aplicacin mvil en Google Play


Plataforma de programacin.
Algoritmo de desarrollo.
Distribucin digital.

f. Validacin de la eficiencia
3.4. TCNICAS DE RECOLECCIN
Para la evaluacin de resultados se realizarn los siguientes procesos que
permitirn cuantificar y cualificar el impacto de la aplicacin de acuerdo a las
necesidades del mercado:
-

Anlisis de contenidos y procesos mediante una implementacin en Java.


Diseo de encuestas de campo y digitales sobre la experiencia del usuario.
Implementacin para descarga gratuita en Google Play y cantidad de
descargas.
Divulgacin y circulacin de contenidos a travs de medios de comunicacin
nacionales y redes sociales.

4. DESARROLLO INGENIERIL
En esta seccin del documento se explica la metodologa empleada para satisfacer
los objetivos planteados. Primero, y en continuacin con el marco tericoconceptual, se hizo un anlisis del algoritmo para extraer y comparar huellas
digitales que revolucion la industria de las tecnologas mviles aplicadas al audio
An Industrial-Strength Audio Search Algorithm desarrollado por Avery Li-Chung
Wang para los laboratorios de Shazam Entertainment. Seguido a esto, se procede
a explicar cmo se desarroll la implementacin del algoritmo en plataforma java,
donde se realizaron las pruebas y experimentos que comprueban una buena
funcionalidad de la aplicacin. Y Por ltimo, se desarroll una aplicacin mvil para
Android que identifica canciones sobre una base de datos de artistas vinculadas a
LASO y la manera en que se implement en la plataforma Google Play para
descarga gratuita.

31

4.1. MUSIC INFORMATION RETRIEVAL


En bsqueda de evidencias sobre el funcionamiento bsico de un sistema de
recuperacin musical, el algoritmo que desarroll Wang posee una caracterstica
especial para introducir los conceptos generales sobre la recuperacin de
informacin musical, y es que este es un sistema sencillo de entender, fcil de
aplicar y de gran robustez de procesamiento. Para contextualizar un poco sobre el
algoritmo, consiste en generar y comparar huellas digitales acsticas a partir de un
procesamiento digital de seales que permite analizar canciones aplicando
ventanas de respuesta rpida que van capturando y agrupando las caractersticas
de una muestra en instantes de tiempo con separaciones muy cortas. Para el caso
de este sistema, el objetivo es obtener las coordenadas de los picos de frecuencia
con mayor intensidad que presenta una grabacin. Para ello se hace uso de un
grfico 3D llamado espectrograma, el cual brinda informacin sobre la magnitud de
los picos de alto nivel de intensidad, segn su posicin en frecuencia y en tiempo
en una sola banda de frecuencias. La informacin de los picos de alto nivel es
almacenada en un fichero denominado hash que lo que hace es asignar una clave
de identificacin nica a la informacin de un objeto. Cada hash de una muestra de
audio es usado para buscar hashes coincidentes a travs de un barrido que se hace
en la base de datos y encontrar la mejor coincidencia que sera la cancin deseada.
Por otro lado, existe un sistema de reconocimiento musical con las mismas
proporciones de uso comercial que Shazam, se trata del algoritmo de Philips
desarrollado para la empresa Musiwave. Este algoritmo plantea operar una funcin
ventana de aproximadamente 372 milisegundos y un solapamiento casi del 96%
sobre una muestra de seal para obtener las caractersticas ms representativas de
la seal. Esta proporcin indica que la tasa de ventaneo hace una captura de datos
rpida aunque no muy detallada, haciendo un equilibrio con un alto nivel de
solapamiento que asegura a una muestra robustez a los cambios temporales, es
decir, cuando los datos de entrada no estn perfectamente alineados a la grabacin
que se utiliz para generar la huella digital, el nivel de solapamiento indica cunto
desplazamiento temporal le permite a una muestra para que coincida con la
grabacin original. Luego de esto, aplica un filtro de 33 bandas en un rango de 3002000 Hertz para realizar un anlisis espectral en las frecuencias que poseen las
caractersticas ms representativas de la seal. El proceso de filtrado ofrece el
beneficio de remover perturbaciones o ruidos no deseados, puesto que al al hacer
un anlisis por bandas se discriminan las frecuencias ms importantes y se elimina
la informacin contaminada. Para la extraccin de la huella digital, este mtodo

32

calcula los picos de alta energa, los codifica a un fichero nico mediante una funcin
hash y realiza un mapeo de secuencia de estos puntos a travs del clculo de
distancias euclidianas. Luego de esto, para la comparacin realiza el mismo proceso
que el algoritmo de Wang.
Sobre las bases e ideas expuestas anteriormente, es comn que la mayora de los
algoritmos de extraccin de la huella digital estn basados en el mismo principio:
grabar una muestra de audio, en seguida extraer su huella digital para posterior
comparar la similitud con respecto a un banco de canciones. En las Figuras 8 y 9
se observan los diagramas de bloques de los algoritmos propuestos por Wang y
Philips, mientras que en la Figura 10 se presenta el esquema general de un sistema
de identificacin de canciones tomado del proyecto de grado de Feng Shuyu (2007).
Por ltimo, en la Figura 11 se plantea el diseo del algoritmo a implementar segn
las referencias vistas.
Figura 8. Esquema de extraccin de huella digital acstica planteado por Wang.

Fuente: Shuyu, F. EFFICIENT AND ROBUST AUDIO FINGERPRINTING. Pg 22.


2007.
Figura 9. Esquema de extraccin de huella digital acstica planteado por Philips

Fuente: Shuyu, F. EFFICIENT AND ROBUST AUDIO FINGERPRINTING. Pg 20.


2007.

33

Figura 10. Esquema general del proceso de identificacin de canciones por similitud
de audio.

Fuente: Shuyu, F. EFFICIENT AND ROBUST AUDIO FINGERPRINTING. Pg 3.


2007.
Tomando como base la teora revisada anteriormente, en la Figura 11 se estableci
una implementacin del sistema de recuperacin de informacin musical basado en
el principio del algoritmo de Shazam, orientado hacia el desarrollo general de la
Figura 10.
Figura 11. Diseo del algoritmo implementado.

Fuente: Autores.
4.1.1. EXTRACCIN DE HUELLA ACSTICA

En el momento en que se captura una seal a travs de un sistema de registro, esta


pasa de un medio anlogo a digital, o en el sentido contrario pasa de digital a
anlogo, es necesario que un DSP ejecute esa accin. Para ello, es necesario tener

34

en cuenta algunos principios fundamentales que hacen que un sistema de huellas


digitales sea prctico y computacionalmente eficiente:
Precisin
Este es el requisito ms importante en la mayora de los sistemas de huellas
digitales de audio, debido a que el motor de bsqueda de huellas debe comparar
sobre todas las huellas digitales que se encuentren en una base de datos y
discriminar el nmero de identificaciones correctas, identificaciones desconocidas e
identificaciones equivocadas.
Robustez
La robustez se relaciona con las caractersticas acsticas y mtodos de modelado
de la huella digital. En realidad, las seales de audio se ven afectadas por
distorsiones o modificaciones como la compresin mp3, ruido de fondo, distorsin
de canal, y as sucesivamente. Por lo tanto, se necesitan procesos que aumenten
la similitud entre la versin distorsionada y el audio original, mientras que tambin
reduzcan la similitud entre diferentes canciones. Las huellas digitales que pueden
resistir estos efectos se vuelven esenciales para el sistema de trabajo.
Traduccin Invariante
Este trmino se refiere a que un parmetro de salida siempre ser el mismo ante la
misma entrada, sin importar el instante de tiempo en el que se aplica dicha entrada.
Esto quiere decir que no importa el instante de tiempo en que es grabada una
muestra, este principio le proporciona al sistema ubicar una referencia en cualquier
instante de la seal y realizar el anlisis tal y como si se hubiera tomado una muestra
al principio de la cancin. Esto tiene sentido, ya que la muestra desconocida podra
venir de cualquier parte del audio original.
Granularidad
Lo que quiere decir este concepto es que el sistema es ms eficiente si tiene la
capacidad de identificar canciones sobre un extracto corto de audio.
Versatilidad
Poseer la capacidad de aplicar diferentes operaciones y procesos sobre una misma
base de datos hace que un sistema de huellas digitales optimice recursos en
memoria, por ende mejora el rendimiento de la mquina.
Escalabilidad
Rendimiento con grandes bases de datos o un gran nmero de identificaciones
simultneas.

35

Complejidad
Se refiere a los costes computacionales para la extraccin de huellas digitales, esto
se ve reflejado en el tamao de la huella digital, la complejidad de la bsqueda, la
complejidad de la comparacin, entre otros.
4.1.1.1.

FRONT-END

Esta es la etapa inicial del proceso que debe ejecutar los requerimientos de
conversin A/D. Como se puede observar en la Figura 12, se especifican las etapas
paso a paso para realizar un procesado de seales que permita extraer las
caractersticas fundamentales para el anlisis de un archivo de audio. En este
sentido, es importante resaltar que tanto la base de datos, como las muestras de
los archivos de prueba son sustradas de este mismo procedimiento.
Figura 12. Estructura de FRONT-END y Modelado de Huella Digital Acstica.

Fuente: Fingerprint Extraction Framework: Front-end (top) and Fingerprint modeling


(bottom). A Review of Algorithms for Audio Fingerprinting.

36

4.1.1.1.1.

PREPROCESAMIENTO

Antes de efectuar el anlisis de la seal, hay que establecer unos parmetros o


condiciones iniciales que permiten una digitalizacin robusta para llevarla a un
formato general de conversin de medio anlogo-digital. En la siguiente figura se
muestra el diagrama de pre procesamiento aplicado para este proyecto.
Figura 13. Diagrama de Pre procesamiento.

Fuente: Autores.
Donde
Frecuencia de sampleo fs
Este parmetro determina la calidad con que ser muestreada la seal, esto quiere
decir que cuanta ms alta sea la frecuencia de sampleo, mayor ser la calidad de
la seal digital con respecto a la original.
Nmero de canales
El nmero de canales (mono, estreo o multicanal) indica el tipo de sonido con que
se va a trabajar: monoaural o biaural.
Nmero de bits por muestra
Determina la resolucin con la que se reproduce o graba una seal. Se suele utilizar
8, 16 y 24 bits para el muestreo de seales de audio. Para obtener una mayor
precisin en el muestreo, se necesita mayor resolucin de bits.
Normalizacin

37

Para obtener una representacin de la seal menos sensible a las variaciones de


amplitud y tiempo, se normaliza dividiendo el valor de cada uno de los elementos
de la seal entre el valor eficaz (RMS) de la misma.
En consecuencia, bajo los criterios que aplic Wang se defini la frecuencia de
sampleo fs= 44,1 KHz, cumpliendo con el teorema de Nyquist para el espectro
audible. Luego se codific la seal a canal mono PCM15 debido a que esta es la
forma estndar en que los sistemas de radiocomunicacin optimizan la potencia de
seal que posee una seal estereofnica. Por ltimo se aplica una resolucin de 16
bits, teniendo en cuenta que se busca obtener un vector robusto de informacin del
contenido de la seal.
Figura 14. Seal de audio pre procesada. Cancin: Mara y t; Artista: Teo Rod.

Fuente: Autores.
4.1.1.1.2.

VENTANEO Y SOLAPAMIENTO

Una vez obtenido el vector de audio, el paso siguiente es hacer un anlisis sobre la
evolucin dinmica de esa seal. Para ello, se deben aplicar una serie de filtros
temporales que lo que hacen es generar estados estacionarios de corta distancia
(en el orden de los milisegundos) a lo largo de toda una muestra para caracterizar
y discriminar seales parsitas, tales como reflexiones por superficies o ruido
presente en el lugar de medicin, y retener en memoria la informacin discreta de
la seal evaluada. El nmero de ventanas por segundo calculadas se llama tasa de
ventaneo y esta proporcin indica la variacin de velocidad del registro de la
15

La modulacin por impulsos codificados PCM es un procedimiento utilizado para transformar una
seal analgica en una secuencia de bits, es decir a una seal digital.

38

informacin acstica de la seal. El porcentaje de superposicin o solapamiento se


aplica para asegurar la robustez a los cambios temporales de la seal de prueba
con respecto a la huella digital de la base de datos. En otras palabras, cuando los
datos de entrada de la seal de prueba no estn perfectamente alineados a la
grabacin que se utiliz para generar la huella digital. Hay un equilibrio entre la
robustez de cambio y la complejidad computacional del sistema: cuanto mayor sea
la tasa de ventaneo, es ms robusto a los cambios en el sistema, pero a un costo
de procesamiento computacional superior.
Figura 15. Diagrama de ventaneo.

Fuente: Autores.
Para el mtodo de Shazam, Wang hizo un anlisis sobre la resolucin de ventaneo
indicada para generar un mapa robusto de datos discretos y concluy que aplicar
una resolucin de 1024 muestras/cuadro se indexan a lo sumo 10 bits de datos por
pico de frecuencia detectado. De esta manera, se obtiene una gran cantidad de
informacin sobre los puntos de anlisis a travs de una ventana de indexamiento
rpida. Para el propsito de este proyecto, atendimos las consideraciones de
ventaneo planteadas por Wang.
Figura 16. Funcin ventana aplicada a una cancin.

Fuente: Autores.

39

4.1.1.1.3.

TRANSFORMADA DE FOURIER

Debido a que el vector de audio cuenta con una entrada continua y finita al sistema,
se aplica la FFT para transcribir la informacin punto a punto al dominio de la
frecuencia. Esta transformada se aplica para obtener las magnitudes de los picos
de alto nivel calculados a travs del espectro de anlisis seleccionado.
Figura 17. Transformada de Fourier cancin Mara y t.

Fuente: Autores.
4.1.1.1.4.

EXTRACCIN DE PICOS DE ALTO NIVEL

En este momento se define el mtodo de extraccin de una o varias de las


caractersticas que componen a la seal. En este sentido, se observa en la Figura
16 varios tipos de caractersticas que se pueden extraer del audio. Para el desarrollo
de este proyecto se decidi realizar el anlisis por extraccin de descriptores de alto
nivel energtico de la seal, es decir, los picos de mayor intensidad de frecuencia
con respecto a un tiempo de posicionamiento.
Con la transformada de Fourier se logran traducir los datos discretos al dominio de
la frecuencia para obtener el valor de las magnitudes de cada pico, pero esta
transformada no posee la caracterstica de visualizar esas magnitudes de
frecuencia a travs del tiempo. Para lograr este propsito se aplica sobre el vector
de Fourier otro tipo de transformacin llamado espectrograma, que tiene la
capacidad de proporcionar las variables de tiempo, frecuencia y amplitud en un solo
grfico.

40

Para la visualizar el espectrograma, se aplic una Transformada Corta de Fourier


(STFT) sobre el espectro de frecuencias con una tasa de ventaneo de 4096
muestras/cuadro, lo cual es lo suficientemente consistente para permitir una alta
resolucin en el mapeo del comportamiento energtico de la seal.
Figura 18. Extraccin de descriptores de alto nivel energtico.

Fuente: Autores.
Figura 19. Extraccin de descriptores de alto nivel energtico a una FFT.

Fuente: Autores.

41

Figura 20. Espectrograma de una cancin

Fuente: Autores
4.1.1.1.5.

MODELADO DE HUELLAS DIGITALES

Una vez que tenemos informacin acerca de la distribucin energtica de la seal,


podemos empezar a formar nuestra huella digital de la cancin. Esta es la parte ms
importante de todo el proceso de reconocimiento de msica puesto que el desafo
es distinguir sobre el espectro de frecuencias capturado, las frecuencias con
informacin ms significativa.
Algunas fuentes indican que en una cancin las bandas de frecuencias fuertes
pueden variar entre C1 (32.70 Hz) y C8 (4,1 KHz). Este es un intervalo enorme de
cubrir y fue implementado bajo las primeras consideraciones del algoritmo de
Philips. La mejora que present Wang sobre este componente fue reducir el
espectro de anlisis en 5 intervalos de frecuencia ms pequeos, en base a las
frecuencias comunes de importantes componentes musicales, y hacer un anlisis
separado por bandas. En el caso de Shazam, Wang eligi un lmite inferior de 40
Hz y un lmite superior de 300Hz, quedando definidos de la siguiente manera: 3040 Hz, 40-80 Hz y 80-120 Hz para los tonos bajos (que cubren la guitarra bajo, por
ejemplo), y 120-180 Hz y 180-300 Hz para medios y tonos ms altos (que abarca la
mayora de las voces y otros instrumentos).
Ahora, dentro de cada intervalo se pueden identificar las frecuencias con la ms alta
magnitud. Esta informacin constituye una firma para esta parte de la muestra y
genera un mapa de coordenadas que se asemeja al plano de estrellas en la galaxia,

42

como se observa en la Figura 21. Este plano de puntos aleatorios se denomina


mapa de constelaciones.
Figura 21: Grfico de espectrograma y obtencin de picos con intensidad de nivel
propuesto por Wang para Shazam. (a): Espectrograma de una seal de audio; (b):
Obtencin de mapa de constelaciones energticas; (c): Implementacin de
combinaciones hash para generar claves del archivo; (d): Detalles de valores hash.

Fuente: A. Wang, An Industrial-Strength Audio Search Algorithm. Pag 2.2006.


Los hashes de las huellas digitales se forman a partir del mapa de constelaciones,
agrupando parejas de puntos segn sus coordenadas frecuencia-tiempo, es decir,
pico1 (t1, f1) y pico2 (t2, f2). El algoritmo escoge un pico como ancla y referencia
una zona objetivo en la cual se obtienen dos componentes frecuenciales (f1, f2),
adems, el tiempo de diferencia entre ellos t = t2 t1. Mediante la formacin de
parejas en vez de buscar coincidencias por picos individuales se gana una mayor
velocidad en el proceso de la bsqueda porque la cantidad de informacin que se
obtiene sobre varias referencias es mayor a la que se obtiene sobre una sola. Wang
ilustra este acontecimiento de la siguiente manera: Por cada frecuencia de anlisis
se obtienen 10 bits de informacin, es decir que si tenemos dos puntos asociados
se almacenarn 20 bits, adems se obtienen otros 10 bits que representan el
componente de diferencia de tiempo, generando un total de 30 bits de informacin

43

contra slo 10 bits para una sola referencia. Este comportamiento hace que la
robustez del hash sea alrededor de un milln de veces mayor, debido a los 20 bits
de ms, y por lo tanto la velocidad de bsqueda para un solo punto de hash aumenta
con esa proporcin de datos.
Por otro lado, debido a que el algoritmo genera una serie hashes, en el mapa de
constelaciones se forma una densidad simtrica de F puntos en la zona objetiva,
tanto para los hashes de la base de datos como para los hashes de la muestra. Esto
quiere decir que existen F veces tanto combinaciones como de picos en la muestra
desconocida para buscar. Se define un pico de la constelacin a ser un punto de
anclaje, y si se seleccionan F=10 picos distribuidos en la zona objetivo, entonces la
cantidad de hashes combinados es igual a misma cantidad F=10 de picos de
anlisis seleccionados. Este comportamiento se puede observar en la imagen (c)
de la Figura 21. Al limitar el nmero de puntos elegidos en cada zona objetiva, se
reduce la cantidad de almacenamiento de hashes combinados para la extraccin de
la huella digital. Este proceso afecta directamente reduciendo en 10 veces el tamao
de almacenamiento de la muestras, lo cual expone la posibilidad de bajar la robustez
de los hashes, pero hace una compensacin aumentando en 10,000 veces en la
velocidad de procesamiento.
4.1.1.2.

BASE DE DATOS Y MOTOR DE BSQUEDA

Una vez construida la huella digital se procede a almacenarla para la futura


comparacin, para ello se implementa una tabla Hash. Utilizando la funcin
HashMap se asigna una llave a cada objeto almacenado para recuperarlo. Los
objetos almacenados en este hash sern los puntos claves encontrados en cada
espectrograma.
Figura 22. Extraccin y comparacin de huella digitales: Seal de prueba vs.
Cancin de base de datos.

Fuente: Autores.

44

Para realizar una bsqueda, la huella digital se toma en una muestra de audio
capturada para generar un vector de los tiempos de corrimiento (offset) de los
hashes. Cada hash de la muestra es usada para buscar hashes coincidentes en la
base de datos y por cada hash coincidente encontrado en la base de datos, los
correspondientes offsets desde el inicio de la muestra y los archivos de la base de
datos estn asociados en parejas en el tiempo. Las parejas en el tiempo estn
distribuidas en contenedores (tablas hash) de acuerdo al ID de la pista asociado con
el hash coincidente en la base de datos. Si los archivos coinciden, las funciones de
comparacin deben ocurrir en offsets relativamente similares.
Figura 23. Almacenamiento de huellas digitales.

Fuente: Autores.
Mediante un algoritmo de regresin se comparan los tiempos correspondientes de
las coincidencias entre las huellas digitales de la base de datos los archivos con los
audios capturados. Los tiempos correspondientes de las coincidencias entre los
archivos relacionados tienen la siguiente relacin:

Donde t k es la coordenada de tiempo del archivo de la base de datos, y k es la


coordenada de tiempo correspondiente a la funcin del archivo de muestra a ser
identificado. Para cada coordenada (t k ,t k ) en el mapa de constelaciones,
calculamos la distancia de corrimiento (offset) con la siguiente relacin:

Este proceso podra ser muy dispendioso sin el uso de las funciones Hash, pues
este permite una bsqueda muy rpida a travs de un listado de datos. De esta
manera y despus de cotejados los datos, el sistema arroja como salida la
coincidencia con menor tiempo de corrimiento entre pico de anlisis encontrada en
la base de datos con respecto a la seal capturada. Considerando que cuando se
obtiene la mayor coincidencia en la comparacin de huellas digitales se requiere

45

visualizar informacin relevante que gira en torno al archivo de audio, como por
ejemplo, nombre de la cancin, nombre del artista, gnero musical, enlace a perfil
pblico, entre otros. Para ello, el recurso ms eficiente para organizar este tipo de
informacin es implementar una base de datos que permita organizar la informacin
de todos los artistas en un arreglo de filas y columnas asignadas a una llave o id,
para posterior llamar fragmento de informacin a requerir en el mensaje de
respuesta del sistema. Al aplicar una funcin llamada Tabla Hash HaspMap sobre
los vectores hashes, se declara una llave que asigna un ID a las huellas digitales
conforme se vayan cargando en la base de datos. En la Figura 24 se observa un
caso de la asignacin de ID a cada vector hash que representa una huella digital.
Figura 24. Tabla Hash de huellas digitales.

Fuente: Jovanovic, J. Shazam It! Music Recognition Algorithms, Fingerprinting,


and Processing. Recuperado de: https://www.toptal.com/algorithms/shazam-itmusic-processing-fingerprinting-and-recognition
Este caso lo ilustra Wang de la siguiente manera: el patrn de puntos debe ser el
mismo para la comparacin en la muestra seleccionada. Para el anlisis de
coincidencias se plotean en sobre un grfico, el hash de la muestra tomada en un
eje y los hash de la base de datos sobre el otro eje. Este evento se puede visualizar
en la Figura 25 donde el mapa de constelaciones de la base de datos se superpone
con el mapa de constelaciones de una muestra de audio con la finalidad de lograr
coincidencias entre puntos conforme va transcurriendo el tiempo. Una coincidencia
es potencial cuando el grfico se visualiza una diagonal o lnea recta con puntos
superpuestos y otros con pocos tiempos de corrimiento. As, cuando se localiza el
tiempo apropiado y los dos mapas de constelaciones estn alineados en el registro,
como se muestra en la Figura 26, el sistema arroja el ID de la mejor coincidencia de
la huella digital de prueba con respecto a las huellas de la base de datos.

46

Figura 25. Comparacin de tiempos de corrimiento entre hash de huella digital de


muestra vs hash de huella digital de base de datos: Sin coincidencias.

Fuente: WANG, A. An Industrial-Strength Audio Search Algorithm. 2006.


Figura 26. Comparacin de tiempos de corrimiento entre hash de huella digital de
muestra vs hash de huella digital de base de datos: sin coincidencias.

Fuente: WANG, A. An Industrial-Strength Audio Search Algorithm. 2006.

4.1.1.2.1.

BIBLIOTECA MUSICAL

Para la evaluacin de este proyecto se defini almacenar una coleccin de 10


grabaciones al sistema para la extraccin de su huella digital. Es importante resaltar
que estas canciones fueron tomadas de la base de datos de artistas vinculados a
LASO en varios lugares del pas.

47

Tabla 1. Caracterizacin de biblioteca musical.


TRACK CANCIN

ARTISTA

GNERO

TIEMPO (min)

Mirala

Alexis Play

Urbano alternativo

3:27

Mi Tumbao

Alexis Play

Urbano alternativo

3:16

Come Round

Elkin Robinson

Old Providence Roots

3:27

Creole Vibrations

Elkin Robinson

Old Providence Roots

5:26

Keep It Calm

Elkin Robinson

Old Providence Roots

2:36

Ponindote a gozar Rancho Aparte

Chirima

5:40

Despgate

Teo Rod

Electro-Champeta

4:14

Independencia

Teo Rod

Electro-Champeta

4:42

Mara y t

Teo Rod

Electro-Champeta

5:40

10

Pgate al beat

Teo Rod

Electro-Champeta

3:47

4.1.1.2.2.

RESULTADO

En principio, para la consecucin del objetivo especfico 1 se pensaba que la


comparacin de las huellas digitales de audio se haca a travs de la comparacin
de las imgenes de espectrograma, sin embargo, en el desarrollo de la metodologa
se dedujo que esta apreciacin no era acertada. La base de datos que se debe
generar es una matriz que almacena los vectores que contienen los hashes de cada
cancin que se desprenden de los espectrogramas.
Figura 27. Huella digital acstica: Come Round - Elkin Robinson.

Fuente: Autores.

48

Figura 28. Huella digital acstica: Creole Vibration - Elkin Robinson.

Fuente: Autores.
Figura 29. Huella digital acstica: Keep It Calm - Elkin Robinson.

Fuente: Autores.
Figura 30. Huella digital acstica: Mi Tumbao - Alexis Play.

Fuente: Autores.

49

Figura 31. Huella digital acstica: Mrala - Alexis Play.

Fuente: Autores.
Figura 32. Huella digital acstica: Ponindote a Gozar - Alexis Play.

Fuente: Autores.
Figura 33. Huella digital acstica: Despgate Teo Rod.

Fuente: Autores.

50

Figura 34. Huella digital acstica: Pgate al Beat Teo Rod.

Fuente: Autores.
Figura 35. Huella digital acstica: Mara y t Teo Rod.

Fuente: Autores.
Figura 36. Huella digital acstica: Independencia Teo Rod.

Fuente: Autores.

51

4.2. DESARROLLO DE APLICACIN MVIL


4.2.1. ENTORNO DE PROGRAMACIN
El principal factor a tener en cuenta a la hora de comenzar a desarrollar una
aplicacin, es definir el lenguaje de programacin y el entorno de desarrollo
integrado (IDE) en el cual se va a trabajar, debido a que existen protocolos que
poseen distintas caractersticas de uso: algunos con propiedades muy amplias y
otros ms especficos. Para el objeto de esta investigacin nos enfocaremos en
utilizar un IDE que permita programar para tecnologas Android.
A pesar de que existe una diversidad de lenguajes para crear aplicaciones, el
lenguaje de predileccin y ms usado en el mundo es el lenguaje orientado a objetos
Java, debido a que este lenguaje se acopla a mltiples IDE y sistemas operativos.
Esto hace que Java sea un lenguaje muy verstil y de fcil acoplamiento de libreras
y extensiones. Adems de esto, Java ofrece herramientas para crear programas
multiplataforma.
Java consta de dos componentes muy importantes: Java Runtime Environment
(JRE) y Java Development Kit (JDK). La diferencia entre estos radica en que el JRE
es un software que se encarga de ejecutar aplicaciones escritas en Java, mientras
que el JDK es un software que se encarga de aplicaciones en el lenguaje Java. En
este sentido, es importante mencionar que el JDK entre sus caractersticas contiene
el funcionamiento del JRE, lo que ya nos dice que a travs del JDK podemos tanto
crear como ejecutar aplicaciones. Existen varias versiones del JDK, la versin actual
es corresponde al JDK 1.8. Sin embargo, Android soporta sus libreras hasta la
versin JDK 1.7, razn por la cual vamos a hacer uso de esta.
Figura 37. Entorno de desarrollo Java.

52

Sobre las bases e ideas expuestas, para el desarrollo de la aplicacin mvil


Lasopedia se eligi, en principio, el IDE libre para lenguaje Java Netbeans por la
facilidad que ofrece en el acoplamiento de libreras y plugins, adems de tener un
diseo intuitivo para la programacin sobre objetos. Sin embargo, se presentaron
dificultades en la instalacin del SDK de Android para este IDE, llevndonos as a
un desarrollo final de la aplicacin en Eclipse, el cual es especializado al desarrollo
de aplicaciones para Android ya que viene con el SDK incluido en el paquete de
instalacin. A diferencia de lenguajes especficos para operaciones matemticas
como por ejemplo Matlab, en java se deben definir las funciones a utilizar con
detalle. Esto puede generar la desventaja de hacer el cdigo extenso, pero ofrece
la ventaja de estructurar y organizar el proyecto en secciones o bloques,
denominados clases. A continuacin se presenta el diagrama de flujo del algoritmo
implementado.
Figura 38. Diagrama de clases algoritmo.

53

Fuente: Autores.
Complex Contiene los mtodos matemticos para la generacin de formas de onda
sobre datos de audio.
FFT Contiene la los mtodos para la extraccin de la transformada de Fourier.
Reconocedor Esta clase contiene el procedimiento de Music Information Retrieval.
Interface Es la clase para la visualizacin de la aplicacin en Android.
Una clase es una representacin que define un compilado de datos y objetos que
especifican qu propiedades y operaciones se van a ejecutar dentro de ella. Estas
operaciones se definen en mtodos y funciones, los cuales agrupan un conjunto de
instrucciones definidas que realizan una determinada tarea, las cuales se pueden
reutilizar invocando mediante un nombre en cualquier parte del cdigo. Es
importante resaltar que las clases Complex16, FFT17, Espectrograma y otras de este
tipo pueden encontrarse en pginas y bases de datos de programacin en internet,
lo cual ayuda a ahorrar trabajo en la elaboracin del cdigo. La implementacin del
sistema de Music Information Retrieval se realiza en la clase Reconocedor, donde
se define el algoritmo descrito en la Figura 39.
Figura 39. Diagrama de bloques algoritmo.

16
17

Fuente: http://introcs.cs.princeton.edu/java/97data/Complex.java.html
Fuente: http://introcs.cs.princeton.edu/java/97data/FFT.java.html

54

Fuente: Autores.
Al ejecutar la aplicacin, cuando el usuario presiona el botn de Grabar,
inmediatamente se ejecuta el mtodo OnCreate(), el cual contiene el estado de la
accin anterior en caso de que sea suspendida o haya sido terminada una prueba.
Esto permite que cada vez que se ejecute el programa no se pierdan los valores de
estado de algunas caractersticas que se necesitan conservar conforme se vayan
agregando canciones. La consulta comienza con el mtodo OnRecord() el cual
determina el formato de entrada de la grabacin descritas anteriormente en el FrontEnd en una variable AudioFormat. Si es verdadero que el botn grabar se ha
activado en la interface, la decisin Start inicia la grabacin mediante el proceso
StartRecording() donde una variable denominada recording y el tiempo de captura
se vuelven verdaderos y empieza a grabar el audio a travs del micrfono del
telfono. Seguido a esto, el mtodo AudioRecord() almacena la grabacin en un
vector numrico que representa la seal de audio y al final de este proceso, la
decisin Start se vuelve falsa y el micrfono deja de grabar en StopRecording().

55

Para asociar la variable un nmero de identificacin, en GuardarCancion() se


declara un contador que asigna un ID que va desde cero y va aumentando de
acuerdo a como van ingresando las canciones a la base de datos. Luego,
toFreqDomain() es el mtodo que llama a la clase FFT y se convierte la seal al
dominio de la frecuencia. Este proceso genera otro vector de informacin ya que se
realiz otra conversin de datos, por lo tanto la nueva variable se llama results.
Para extraer los picos de alta magnitud determinekeypoints(), los cuales almacena
tanto temporalmente como frecuencialmente la cancin, extrae la huella digital y
determinar los puntos claves del audio respectivamente. Una vez concluido este
proceso contina con el mtodo IsMatching() donde efecta la comparacin de las
huellas para determinar una similitud. Si la comparacin es negativa el sistema lo
indica y termina el proceso. En caso contrario siendo verdadera, el sistema verifica
la identidad del mejor resultado (BestSong) y lo muestra a travs de funcin
Dialogfragment, entregando el nombre de la cancin y el nombre del artista.
Finalmente se convierte a False la variable Recording y termina el proceso.
A la hora de implementar el cdigo de programacin en la plataforma Android
Studio, el porcentaje de aciertos baj considerablemente en su efectividad con
respecto a la implementacin en Eclipse, esto se debe a que los recursos de
memoria y procesamiento de Android Studio son limitados, y ms si se habla de
algoritmos que ejecutan una cantidad considerable de procesos simultneos, como
lo es el audio digital. En el caso de Eclipse, la efectividad de acierto es alta porque
al ser un entorno de desarrollo integrado (IDE), la capacidad de procesamiento es
suficiente para el funcionamiento de este y muchos otros tipos de aplicaciones.
La posibilidad del uso de mquinas virtuales creadas en servidores en la red ha
permitido un uso optimizado de las capacidades de procesamiento de las
aplicaciones y muchos otros elementos que deben usar procesos largos que deben
disponer de una alta capacidad en mquina fsica que puedan llevar a cabo estas
operaciones.
Al evaluar estas caractersticas de los sistemas, el funcionamiento ideal que se
estableci para que el procesamiento de datos sea ptimo, fue desarrollar una
aplicacin mvil que captura una grabacin de sonido y almacena un vector de
audio que es enviado a un servidor que contiene instalado el ejecutable de la
aplicacin en Java, el cual se depur dejando nicamente el bloque de
procesamiento y reconocimiento de archivos de audio para realizar el
procesamiento de la informacin en ese entorno, luego obtener el resultado y

56

finalmente enviar la respuesta para visualizarla de nuevo en la aplicacin mvil. La


lgica del anterior diseo radica en que existen protocolos de intercomunicacin que
permite conectar y sincronizar dispositivos (Cliente) con mquinas virtuales en un
servidor18, a travs de los cuales se pueden enviar, procesar y recibir datos.
Este mecanismo de funcionamiento es el que presentan la mayora de aplicaciones
y servicios que ofrece el mundo de las telecomunicaciones en la actualidad, debido
a que las tecnologas digitales permiten establecer mtodos de transferencia de
datos entre varios dispositivos interconectados a travs de una red.
El servidor que proporcion este servicio ha sido www.amazon.com a travs de su
servicio AWS (Amazon Web Service) en el cual se cre una mquina virtual con los
requerimientos necesarios para la instalacin del archivo ejecutable de la aplicacin
que se encargue de sustraer la huella digital acstica de los audios capturados y
enviados desde la aplicacin mvil en Android, y devolviendo a esta el resultado del
proceso de comparacin con la base de datos. Este modelo mejora el
funcionamiento del sistema debido que se libera espacio y procesamiento en el
dispositivo mvil.
El servicio gratuito de AWS dispone de las siguientes caractersticas: 1 GB de
memoria, 30 GB de disco duro, sistema operativo Windows Server 8.0 2R. Estas
caractersticas estn sobre estimadas para los requerimientos de funcionamiento
mnimo del software.
Lasopedia App se desarroll entonces como una aplicacin hbrida, lo que quiere
decir que combina caractersticas de una aplicacin mvil nativa y una aplicacin
Web, ya que ha sido programada para una plataforma especfica y hace uso de
elementos del hardware fcilmente como lo son el micrfono y el almacenamiento
interno temporal en su memoria SD. Adems, se compone de una estructura web a
travs de un servidor mediante un protocolo cliente servidor, utilizando adems, un
dominio web para el ingreso de canciones nuevas a la base de datos.
Figura 40. Topologa de red.

18

Un servidor es un ordenador o mquina informtica que est al servicio de otras mquinas, ordenadores o
personas llamadas clientes y que le suministran a estos, todo tipo de informacin.

57

Fuente: Autores.
Se puede diferenciar en el recuadro amarillo, la plataforma de Back-End, donde se
configura la manera en que el servidor recibe una peticin del usuario, y este se
encarga de distribuir los procesos de extraccin en el Front-End y la comparacin
a travs de la consulta a la base de datos.
El Front-End o capa de presentacin de la aplicacin Lasopedia, se compone de
dos interfaces de usuario, una web y una mvil. Se adquiri un servidor que provee
un hosting para contener la aplicacin, donde se puede interactuar va web con el
cliente a travs de la direccin web www.lasopedia.co.
Al ingresar a www.lasopedia.co nos encontramos con una ventana de inicio, como
se visualiza en la Figura 41. En esta podr ubicarse informacin del proyecto,
imgenes respectivas o videos del programa de emprendimiento cultural LASO.

Figura 41. Ventana principal de la pgina web.

Fuente: Autores.
Vemos que existen otras dos pestaas en el men, Nuevo y Canciones. Al ingresar
al men Nuevo se tiene la posibilidad de agregar una nueva cancin a la base de

58

datos dando click en Seleccionar archivo. Esta accin permite escoger un archivo
en formato mp3 de nuestra biblioteca para agregarlo a la base de datos.
Figura 42. Ventana para cargar cancin a la base de datos

Fuente: Autores.
Al ingresar al men Canciones podemos ver listadas las canciones ingresadas a
la base de datos en el orden en el que fueron subidas a la misma.
Tambin se implementaron herramientas que permiten editar la informacin de las
canciones cargadas, tal como el nombre de la cancin, el nombre del artista y el
gnero.
Figura 43. Coleccin de canciones cargadas a la base de datos.

Fuente: Autores.
La aplicacin mvil creada inicialmente cuenta con un Layout que visualiza tres
botones, los cuales permiten realizar el proceso de grabacin de un audio en mp3,
envo de este al servidor y recibimiento y visualizacin de la respuesta ms
acertada.

59

Este proceso diferenciado de subir canciones va web, es que se debe codificar el


audio capturado en formato mp3. Para ello se us el decodificador LAME(Lame ain't
an mp3 encoder), ya que su cdigo es de carcter abierto, lo cual permite que
cualquier persona pueda trabajar en su desarrollo, adems de considerarse como
una herramienta educativa al ser proporcionada en manera de cdigo que evita
procesos de patentes y problemas legales. Esta codificacin fue escogida por su
particular rapidez, su elevada calidad de audio, y por la posibilidad de manipular
parmetros como la frecuencia de muestreo y la tasa de bits.
Figura 44. Clase LAME para codificacin mp3.

Este proceso es indispensable para el desarrollo de la aplicacin, pues uno de los


requerimientos del sistema de extraccin de huella digital acstica es que el audio
de entrada haya sido codificado con parmetros especficos. Es de carcter
fundamental entender el funcionamiento del AndroidManifest.xml, ya que este
archivo es el que sostiene y relaciona todas las clases y procesos del proyecto. En
dicho manifiesto se deben pedir los permisos necesarios para el desarrollo. En
nuestro caso los permisos necesarios son los requerimientos para la conexin a
internet, la grabacin de audio, y usar el almacenamiento interno del dispositivo.

Figura 45. Permisos del Android Manifest.

60

Fuente: Autores.
Una vez se crea el audio mp3, se almacena temporalmente en la memoria del
dispositivo bajo el nombre de Lasso.mp3. En este momento se inicia el proceso
de envo mediante una peticin HTTP de tipo POST al servidor. Este inicia al dar
click en el botn Stop iniciando un proceso paralelo (Thread) para dicha peticin.
Luego, el botn Pedir Respuesta activa el proceso de respuesta del servidor y
obtiene esta en forma de dato (DataInputStream) conteniendo el nombre de la
cancin que ha coincidido en la comparacin, y lo almacena en forma de cadena
que luego es mostrada en el Layout principal mediante un Cast o TextView.
Figura 46. Estructura del proyecto Android.

61

Fuente: Autores.
MODO DE OPERACIN DE LASOPEDIA APP
1. Grabacin de la msica
El programa est diseado para registrar 20 segundos luego de presionar el botn
Start, como se muestra en la Figura 47. Cuando el tiempo de grabacin termina, en
el cuadro de texto que aparece justo debajo del botn Start se visualiza un texto que
indica a presionar el botn Stop.
Figura 47. Interfaz principal de aplicacin mvil.

Fuente: Autores.
2. Envo de grabacin por internet
En esta primera implementacin, el botn Stop se coloc para indicar el envo del
archivo de audio grabado al servidor mediante el socket con la direccin al puerto
IP y el puerto de transferencia de datos. Esta comunicacin se lleva a cabo a travs

76

del protocolo TCP, y mediante los Sockets el servidor es capaz de recibir y enviar
informacin al cliente cuando este lo requiera.
Figura 48. AVD y logCat en ejecucin.

Fuente: Autores
3. Muestra del resultado
El proceso realizado debe iniciar con una peticin por parte del usuario para as
entregar una respuesta. Dicho proceso consta del servidor quien contiene Scripts
PHP que articulan los procesos de registro y bsqueda en la base de datos y llaman
los procesos JAVA, tambin contenidos en el servidor.
Como vimos anteriormente el usuario interacta de tres maneras con el sistema:
subir una cancin, editar el registro de una cancin, y comparar una muestra.
Para subir una cancin se debe ingresar a la pgina web de Lasopedia y cargar la
cancin como se ha explicado anteriormente, luego, el archivo es subido al servidor
mediante una solicitud HTTP tipo POST. En el servidor, un Script de PHP lo recibe,
lo registra en la base de datos y llama al proceso escrito en JAVA para extraer la
huella digital acstica y la almacena en una base de datos MySQL. Terminado esto,
el Script retorna al usuario un mensaje de xito o de error si es el caso.

76

Para editar el registro de una cancin, en el men Canciones se selecciona alguna


cancin existente en la base de datos, al dar click en Editar, esto redirige a un
formulario con la informacin existente de la cancin (Artista, Ttulo, Gnero). Si se
presiona Guardar, se enva va POST una solicitud HTTP al servidor, all un script
de PHP toma los datos y actualiza el registro de la cancin en la base de datos y
redirige de vuelta al listado de canciones actualizado.
Por ltimo, para realizar la comparacin de una muestra se debe utilizar la aplicacin
mvil en Android, la cual se encarga de subir un archivo mp3 mediante una solicitud
HTTP tipo POST, un script recibe el archivo y llama al proceso en JAVA que extrae
la huella digital acstica y la compara con las que las existentes en la base de datos.
Una vez terminado el proceso de comparacin retorna al script PHP con la cancin
respuesta, y el script PHP a su vez, retorna al Front- End (App mvil) el nombre de
dicha cancin.
Por ltimo el botn pedir respuesta se implement para visualizar el resultado
arrojado desde la aplicacin en el servidor.
Figura 49. Aplicacin Versin 1.0

Fuente: Autores.

77

Figura 50. Aplicacin Versin 1.1.

Fuente: Autores.
Este primer diseo se hizo as porque en ese momento no fue posible lograr que el
proceso de grabacin, enviar la sugerencia y recibir la respuesta se lograra
presionando un botn una vez.
4.3. DISEO DEL SISTEMA DE MEDICIN
Para validar la eficiencia del acierto de la aplicacin mvil se estableci un protocolo
de medicin teniendo en cuenta como parmetro principal el factor de relacin
seal-ruido debido a que presenta la caracterstica de modificar la inteligibilidad de
una grabacin con respecto a un espacio de escucha. En este sentido, el algoritmo
de Wang arroj resultados contundentes en la resistencia al ruido ocasionado por
fuentes como conversaciones, trfico rodado, aglomeracin de personas, debido a
su fuerte comportamiento en la generacin de hashes. El autor afirma que una seal
que es expuesta a un ambiente con considerables cantidades de ruido, es capaz de
identificar canciones con la generacin entre el 1-2% de hashes sobre el mapa de
constelaciones. En la Figura xx. Se muestra la grfica obtenida por Wang del % de
acierto vs. Relacin seal-ruido para 3 diferentes tiempos de grabacin 15, 10 y 5
segundos, la cual fue nuestro referente para determinar el porcentaje de efectividad
en el reconocimiento de canciones por similitud de audio. Ntese que para este
caso, el autor obtuvo un 50% de acierto para una relacin seal-ruido entre -9 y -3
dB en los diferentes tiempos de grabacin, es decir, la seal contena menor nivel
de potencia sonora que el ruido presente en el lugar. Luego de esto, cuando la seal
79

a grabar iguala y supera el nivel del ruido, los resultados mejoran en el orden de
90% a 100%.
Grfico 1. Porcentaje de acierto vs. Relacin seal-ruido obtenido por Wang.

Fuente: WANG, A. An Industrial-Strength Audio Search Algorithm. 2006.


Para nuestro caso, se plante un sistema de medicin tomando como referencia el
comportamiento del Grfico 1. Se colocaron a prueba 3 canciones de una base de
datos de 20 canciones, con muestras grabadas en segmentos de 20 segundos
donde se hicieron 10 mediciones por cada nivel de relacin seal-ruido. Estas
mediciones se realizaron bajo dos condiciones de simulacin: la primera evaluacin
se hizo adicionando al sistema de captura una seal de ruido rosa y el segundo
experimento se hizo el mismo procedimiento con una seal de ruido ambiental. Se
verific que el sistema de reproduccin estuviera calibrado a 0 dB y que el nivel de
presin sonora fuera el mismo para todas las fuentes. La seal de prueba y la fuente
de ruido se reprodujeron cada una va monofnica, es decir, las grabaciones de
ruido se reprodujeron en el canal izquierdo y la seal de las canciones por el canal
derecho. La distancia del receptor (dispositivo mvil) a la fuente que reproduce la
cancin a comparar fue de 1m y la distancia entre la fuente de seal y ruido tambin.
Tabla 2. Listado de equipos de medicin.
Cant.
1
1
1
1
2
2
2

Equipo
Computador porttil
Generador de seales
Interfaz de audio
Sonmetro
Monitores activos
Cables de lnea
Plug convertidor XLR-TRS

Modelo
MacBook Pro
Logic Pro
Behringer U-PHORIA UMC202 HD
Svantek
Mackie SRM 450
XLR

80

Figura 51. Procedimiento de medicin.

Fuente: Autores.
Los resultados obtenidos se exponen en el captulo de presentacin y anlisis de
resultados.

4.4. IMPLEMENTACIN EN GOOGLE PLAY


Para disponer la aplicacin a los usuarios se ha utilizado la plataforma de descarga
de Google Play, debido a que esta es la tienda virtual que Google Inc utiliza para la
distribucin de aplicaciones desarrolladas en Android.
Lo primero que se tiene que hacer es elegir una cuenta de Google con la cual se
administrarn las aplicaciones desarrolladas. Luego accederemos a Google Play
Developer Console para convertir la cuenta de Google escogida en una cuenta de
desarrolladores.
Es importante mencionar que para ser oficialmente distribuidores de aplicaciones
en Google Play se realizar un pago una nica vez de 25 dlares lo cual cubre la
membresa en este sitio. Al completar el pago, podemos entrar en nuestra cuenta
de Google Play Developer Console y navegar a travs las funciones que se ofrecen.

81

Figura 52. Seleccin de cuenta para desarrollador en Google Play

Fuente: Autores.
Al lado izquierdo de la pantalla aparece el men de gestin de recursos e
informacin, en el cual aparecen las siguientes opciones:

Listado de nuestras aplicaciones.


Servicios para Google Play Games.
Informes de nuestros beneficios.
Configuracin
Alertas
Anuncios

Figura 53. Pantalla de inicio de Google Play Developer Console.

Fuente: Autores.
82

Para aadir una nueva aplicacin a Google Play, basta con que le demos al botn
Add new application y nos llevar a un dilogo donde deberemos escoger el
lenguaje por defecto de la aplicacin y el ttulo:
Figura 54. Definicin del ttulo y el lenguaje de la aplicacin.

Fuente: Autores.
Una vez aqu, se nos abrir toda la informacin sobre la aplicacin. Publicar es
realmente sencillo: seleccionamos Upload APK y seguido a esto basta con ir
siguiendo los pasos que nos encontramos a la izquierda:
Figura 55. Paso a paso cargar aplicacin Lasopedia a Google Play

Fuente: Autores.
Se debe subir el archivo ejecutable de la aplicacin mvil que se encuentra en
formato .APK. Ahora pasamos a Store Listing, donde rellenaremos la descripcin,
texto de promocin, pantallazos para diferentes tamaos de pantalla, icono de la
aplicacin, la categora de la aplicacin, datos de contacto, poltica de privacidad
83

propia, entre otras cosas. En la seccin Pricing & Distribution, donde elegiremos los
pases donde queremos que la aplicacin est disponible, as como si ser gratis o
de pago.
Figura 56. Panel de aplicaciones subidas a Google Play Developer Console.

Fuente: Autores
De esta manera ya tenemos nuestra aplicacin mvil Lasopedia almacenada en el
servidor de Google Play. Basta con cambiar el estado Borrador al estado activado
para publicar la aplicacin mvil.
Figura 57. Aplicacin mvil Lasopedia disponible para descarga en Play Store.

Fuente: Autores.

Finalmente, desde el dispositivo mvil se ingresa a la aplicacin Play Store de


Google y en la barra de bsqueda se escribe Lasopedia.

84

Figura 58. Aplicacin mvil Lasopedia en pantalla de telfono celular.

Fuente: Autores.
Figura 59. Aplicacin mvil Lasopedia lista para funcionar.

Fuente: Autores.

85

5. PRESENTACIN Y ANLISIS DE RESULTADOS


5.1. PORCENTAJE DE EFECTIVIDAD
Los datos que se obtuvieron fueron analizados de manera objetiva, ya que el
porcentaje de acierto de reconocimiento de canciones que presenta la aplicacin se
mide segn el nmero de veces que la respuesta arrojada sea correcta, con
respecto a una cantidad establecida de pruebas. Por otro lado, se realiz un anlisis
subjetivo realizando una encuesta sobre el impacto que puede generar la aplicacin
y la importancia de este tipo de herramientas para la circulacin de contenidos
musicales. Los siguientes resultados describen el comportamiento de efectividad
planteado por Wang en el Grfico 1. El porcentaje de efectividad fue sencillo de
estimar, puesto que el 100% se tom ante una referencia de 10 pruebas.
El primer caso de estudio se hizo con la cancin Despgate, se puede evidenciar
que Lasopedia no arroja coincidencias hasta que el nivel de presin sonora del ruido
tiene la misma amplitud que la cancin (0 dB). En este momento es que
auditivamente se empieza a distinguir la presencia de la cancin en la sala, sin
embargo el porcentaje de acierto para estas condiciones solo alcanza unas
proporciones aproximadas entre el 20% y 40%. Como se puede observar en el
Grfico 2, a medida que el nivel de presin sonora de la cancin va aumentando se
puede ver que para un rango dinmico de +6 dB, el acierto aumenta
aproximadamente un 40%, logrando un 80% de efectividad y mantiene un
comportamiento estable. Este caso arroj mejores niveles de reconocimiento para
las pruebas sometidas a filtraciones de ruido rosa que las filtraciones de ruido
ambiente para SNR menores a +6 dB. Para una SNR de 0 dB Lasopedia arroj un
20% de mayor efectividad y para +3 dB la diferencia aumenta en un 50%.
Grfico 2. Tasa de Reconocimiento [%] vs. SNR [dB]. Cancin: Despgate - Teo Rod.

Tasa de Reconocimiento [%]

Tasa de Reconocimiento [%] vs. SNR [dB]


Cancin: Despgate - Teo Rod
100
80
60
40
20
0
-15

-12

-9

-6

-3

Relacin Seal-Ruido [dB]


Ruido Ambiente

86

Ruido Rosa

12

15

Es importante mencionar que Despgate es una cancin de gnero Champeta que


cuenta con la ejecucin de 5 instrumentos (batera, bajo, guitarra, sintetizador y voz)
y en su mayora de tiempo es instrumental, por lo cual se distingue bastante bien el
contenido meldico. Esto tiene efecto en que la energa proveniente de cada
instrumento se acomoda en el espectro segn las bandas de frecuencia en que
acta cada instrumento. Este tipo de huellas digitales son ms limpias que las
huellas de las canciones que tienen muchos instrumentos o altos contenidos
armnicos, debido a que se generan menos cantidades de picos de alto nivel y se
pueden discriminar con mayor exactitud las frecuencias ms significativas de la
grabacin.
Siguiendo con el experimento, se procedi a evaluar la efectividad de Mi Tumbao
la cual es una cancin con mayor dinmica y que tiene la presencia de ms de 5
instrumentos. En el Grfico 3 se muestra el resultado de acierto para Mi Tumbao,
una cancin que mezcla ritmos del Pacfico Colombiano como la chirima con
gneros como la salsa y hip hop.
Grfico 3. Tasa de Reconocimiento [%] vs. SNR [dB]. Cancin: Mi Tumbao - Alexis Play.

Tasa de Reconocimiento [%]

Tasa de Reconocimiento [%] vs. SNR [dB]


Cancin: Mi Tumbao - Alexis Play
80
70
60
50
40
30
20
10
0
-15

-12

-9

-6

-3

12

15

Relacin Seal-Ruido [dB]


Ruido Ambiente

Ruido Rosa

A comparacin del porcentaje de acierto obtenido en Despgate, Mi Tumbao


present mejor comportamiento para las SNR menor a 0 dB, debido a que se
encontraron aciertos para las SNR de -3 dB y -6 dB entre el 10% y 30%
respectivamente. Otra vez se evidencia que la aplicacin presenta mejor ndice de
reconocimiento ante la presencia de ruido rosa; cuando los niveles de presin
sonora de las fuentes son iguales el porcentaje de efectividad asciende
aproximadamente entre un 40% y 50%. Para los casos en los que el nivel sonoro
de la fuente supera al ruido adicionado la efectividad asciende a 70%. Al someter la
87

grabacin ante una fuente de ruido ambiente, para las SNR menor a 0 dB se obtiene
un comportamiento parecido a la grabacin de ruido rosa, difiriendo en algunos
resultados en tan solo un 10%. Sin embargo, para las SNR mayor a +3 dB se obtuvo
un 40% de efectividad hasta +15 dB donde ya es de un 60%.
La ltima prueba que se hizo fue con la cancin Independencia cuyos resultados
se visualizan en el Grfico 4. Haciendo una comparacin entre las diferentes
canciones colocadas a prueba, se puede observar que Lasopedia presenta una
mayor efectividad de coincidencias para las SNR mayores a 0 dB. Este
comportamiento es el esperado debido a que para estas condiciones la cancin se
distingue sin ningn problema del ruido adicionado.
Grfico 4. Tasa de Reconocimiento [%] vs. SNR [dB]. Cancin: Independencia - Teo
Rod.

Tasa de Reconocimiento [%]

Tasa de Reconocimiento [%] vs. SNR [dB]


Cancin: Independencia - Teo Rod
100
80
60
40
20
0
-15

-12

-9

-6

-3

12

15

Relacin Seal-Ruido [dB]


Ruido Ambiente

Ruido Rosa

Grfico 5. Efectividad total de Tasa de Reconocimiento [%] vs. SNR [dB].

Tasa de Reconocimiento [%]

Tasa de Reconocimiento [%] vs. SNR [dB]


80
60
40
20
0
-15

-12

-9

-6

-3

Relacin Seal-Ruido [dB]


Efectividad Total

88

12

15

La grafica del resultado promediado final nos indica que el sistema cumple con la
hiptesis planteada de una tasa de reconocimiento de un 70% para una SNR de
+15 dB. Vemos un corrimiento de la tasa de reconocimiento con respecto a la
relacin seal ruido hacia la derecha, que indica claramente una menor resistencia
al ruido en comparacin al sistema evaluado por Wang, donde el sistema alcanza
una tasa de reconocimiento del 50% a -9 dB de relacin seal ruido. Se observa un
comportamiento cerca al lineal en la relacin de aciertos con el nivel de seal ruido
en la evaluacin con ruido rosa.
5.2. ANLISIS SUBJETIVO DE FUNCIONALIDAD
Para la validacin de la aplicacin Logopedia se realiz una encuesta cerrada de
diez preguntas a una muestra de usuarios de 30 personas relacionadas con el
proyecto Laso. Dicha encuesta fue realizada mediante el servicio de encuestas y
formularios de google.
Las siguientes son las preguntas formuladas y los resultados estadsticos
respectivos.
1. Indique a continuacin su relacin con la industria musical

Grfico 6. Relacin de usuarios con la industria musical.

Esta pregunta caracteriza la poblacin evaluada mediante su relacin con la msica


y la produccin de ella. De dicha muestra de personas se observa que el 40% de
ellas, equivalentes 12 personas se denominan productores musicales.

89

2. Cul de los siguientes medios de comunicacin utiliza para la distribucin y el


consumo de productos musicales?

Grfico 7. Medios de comunicacin ms utilizados por los usuarios.

Este resultado indica una utilizacin mayoritaria de medios digitales para la


distribucin de productos musicales. Lo cual se hace pertinente para el desarrollo
de proyectos digitales como las aplicaciones mviles.

3. Usa con frecuencia aplicaciones digitales como Spotify, Shazam, SoundCloud,


entre otros?
Grfico 8. Frecuencia de uso de aplicaciones digitales relacionadas con la msica.

90

Se puede deducir que esta poblacin usa frecuentemente aplicativos digitales ya


que considerando los valores calificativos de 8, 9 y 10 como los ms altos, se
obtiene un total del 81.5% de uso de alta frecuencia para dicha muestra.
4. Cree necesaria la creacin de herramientas que faciliten la
distribucin musical en Colombia?
5.
Grfico 9. Necesidad de aplicaciones musicales segn los usuarios.

Mediante esta evaluacin se declara que la poblacin encuestada ve necesaria la


creacin de nuevas herramientas que faciliten la distribucin musical en Colombia,
ya que, nuevamente, considerando los valores calificativos de 8, 9 y 10 como los
ms altos, encontramos un total de 85,6% de necesidad para dicha poblacin.
5. Con qu frecuencia utiliza aplicaciones mviles musicales?
Grfico 10. Frecuencia de uso de aplicaciones mviles musicales.

91

Con un 82,2% sumado de las respuestas 8, 9 y 10, es conveniente afirmar que la


poblacin evaluada utiliza con frecuencia en su gran mayora, aplicaciones mviles
musicales.
6. Cree til la utilizacin de una aplicacin mvil que identifique canciones
mediante el micrfono de su celular para la visibilizacin de productos musicales?
Grfico 11. Necesidad de aplicaciones musicales en el mercado.

La poblacin evaluada cree muy til la utilizacin de aplicaciones afines al


funcionamiento de la aplicacin Laso, considerando las respuestas 8, 9 y 10 como
los calificativos ms altos que sumados representan un 92,9% de la totalidad de la
muestra.
7. Le gustara incluir sus productos musicales a una base de datos que permita
identificarlos en cualquier lugar, a travs del reconocimiento musical mediante una
aplicacin mvil?
Grfico 12. Interaccin del usuario con aplicaciones relacionadas a la msica.

92

La inclusin de productos musicales a una base de datos que permita una mayor
distribucin mediante la identificacin de canciones, tiene una aceptacin entre la
poblacin evaluada de 78,3%.
La evaluacin de la experiencia del usuario con la aplicacin se llev a cabo
mediante la calificacin de esta en una escala de 1 a 5, siendo 5 la calificacin ms
alta y 1 la calificacin ms baja. Mediante el siguiente prrafo se explica a los
usuarios encuestados en que consiste la aplicacin Lasopedia y cmo utilizarla.
Lasopedia es una aplicacin mvil para dispositivos Android que, mediante el uso
de tres botones, graba una muestra de una cancin y la compara con una base de
datos creada en www.lasopedia.co para la identificacin de la misma.
Esta aplicacin solo est disponible para dispositivos Android. Encuntrala gratis
como Lasopedia en la tienda digital Google Play.
Ingresa a www.lasopedia.co para agregar canciones o para conocer la lista de
canciones en la base de datos.
8. Califica tu experiencia con la aplicacin, siendo 5 la calificacin ms alta y 1 la
calificacin ms baja.
Grfico 13. Experiencia del usuario con la aplicacin.

La experiencia de usuario de la aplicacin recibi una calificacin mayoritaria de 4


(62,5%), pero ningn usuario calific esta como excelente (mxima calificacin 5),
lo que indica una insatisfaccin con los elementos grficos o de usabilidad de la
misma.
La encuesta puede encontrarse en el siguiente link:
http://goo.gl/forms/vPGlRMb3py

93

6. CONCLUSIONES
La implementacin de una aplicacin hibrida (Web y nativa) fue necesaria para el
desarrollo de es te proyecto, pues al realizarse un primer modelo nativo que
contena los procesos completos de la aplicacin se determin que dichos procesos
son muy complejos para el procesamiento en dispositivos mviles en general.
Las mediciones de acierto realizadas demuestran que el algoritmo no es
suficientemente robusto para identificar canciones bajo presencia de ruido, puesto
que la efectividad del sistema podra considerarse casi nula hasta una SNR de -3
dB. Este comportamiento se debe a que hay una alta cantidad de frecuencias con
alta intensidad que interactan en el entorno para este experimento. Teniendo en
cuenta que Wang especifica que el algoritmo debe ser lo suficientemente entrpico
para distinguir hashes en presencia de filtraciones externas. A muy altos niveles de
entropa, la saturacin de frecuencias con alta intensidad en el espectro de anlisis
hace que el algoritmo no pueda identificar las frecuencias relacionadas a la cancin
que se tiene a prueba con respecto a las frecuencias del ruido adicionado. Por estas
razones, es necesario adicionar al sistema un mecanismo de reduccin de ruido
para aumentar la efectividad de aciertos del sistema.
Aquellas canciones con mayor efectividad son las que contienen una mayor carga
meldica en su contenido de audio o una clara diferenciacin entre sus
introducciones y el verso de la cancin, como se observa en el caso presentado en
el Grfico 1.
El sistema es efectivo en cualquier parte de una cancin, pero tiene mayor
efectividad de acierto cuando se utiliza en las introducciones y los compases de
solos instrumentales de las canciones.
El tiempo de procesamiento en el IDE es de aproximadamente 200 milisegundos y
el tiempo de procesamiento implementando la aplicacin aumenta a
aproximadamente 4 segundos de respuesta. En este sentido, varios factores
influyen en este comportamiento: la interconexin entre el dispositivo mvil y el
servidor que contiene el servicio de la aplicacin debe ser lo suficientemente robusta
para obtener una alta velocidad de transferencia cliente-servidor. Para este
desarrollo se cont con la limitacin de no poseer las habilidades suficientes para
programacin de aplicaciones web y servidores.

94

La efectividad de la aplicacin depende en gran medida de la calidad del archivo de


audio grabado desde el celular, por lo cual, el formato de compresin y parmetros
como la profundidad de bit y la frecuencia de sampleo son factores que limitan la
aplicacin a una menor efectividad.
Las condiciones ambientales afectan distintivamente los resultados de efectividad
del sistema, ya que diferentes ruidos contienen diferentes niveles energticos en
sus bandas de frecuencia. Aquellos ruidos ambientales que contengan mayor
informacin en las bandas evaluadas presentaran mayor dificultad al sistema.

95

7. RECOMENDACIONES
Aunque en la actualidad se han desarrollado mltiples herramientas y aplicaciones
sobre este tema, la Recuperacin de Informacin Musical (MIR) todava sigue
siendo un rea emergente de investigacin, por lo tanto, en la carrera de Ingeniera
de Sonido se deben reforzar e innovar en los mdulos de lenguajes de
programacin y electrnica digital, para as poder adherir nuevas reas de este
saber que estn tomando fuerza en el desarrollo de tecnologas de vanguardia,
tales como, las ciencias computacionales (Computer Science) y las tecnologas
enfocadas al arte (Arts & Technologies).
Para trabajos futuros se sugiere extender los filtros de anlisis a frecuencias medias
altas, aproximadamente hasta 1000 Hz, dado que las bandas de frecuencias que
propone Wang surgen ms efectivas a algoritmos resistentes al ruido y nuestra
aplicacin no es fuerte en ese componente. Adems de esto, el estudio de huellas
digitales no solo se hace por reconocimiento de picos de alta intensidad, existen
otros tipos de sistemas de MIR que se pueden identificar en simultneo y que la
suma del anlisis de estos sistemas hace que el software presente mayor acierto.
Se recomienda investigar sobre algoritmos para identificacin de meloda, armona,
timbre, ritmo, tarareo, entre otras.
Como ltima observacin, es necesario que entre la facultad y los estudiantes exista
un pacto por el crecimiento de las tecnologas que se desarrollan, es por esto que
los proyectos a abordar deben contener un componente marcado en
emprendimiento. Esto quiere decir que los estudiantes deberan enfocar sus
proyectos de investigacin hacia el desarrollo empresarial y social, con la finalidad
de que la Ingeniera de Sonido adquiera visibilidad y protagonismo en el mbito
laboral de la regin, aportando a la generacin de empleo y la capacidad de
enriquecer y mejorar muchas plataformas, instituciones y tecnologas relacionadas
con el audio y el sonido.

96

8. BIBLIOGRAFA
CANO, P; BATLLE, E; KALKER, T. and HAITSMA, J. A Review of Algorithms for
Audio Fingerprinting. Universitat Pompeu Fabra, Barcelona. Philips Research
Eindhoven, Eindhoven.
DOWLAND, S. Computer Tools for Music Information Retrieval, Oxford, New
College, UK, 1988.
DOWNIE, J. Music information retrieval (Chapter 7). In Annual Review of Information
Science and Technology 37, ed. Blaise Cronin, 295-340. Medford, NJ: Information
Today, 2003.
GMEZ, L. SOSSA, Humberto, BARRN, Ricardo. CUEVAS, Francisco. JIMENEZ,
Julio. Comparacin de Representaciones Intervlicas Hansonianas para
Recuperacin de Informacin Musical, Revista Iberoamericana de Inteligencia
Artificial, No.34 (2007), pp. 7-15.
HERNNDEZ, S; COLLADO, C; BAPTISTA, P. Metodologa de la investigacin.
Mxico, 2010, McGraw Hill, Quinta Edicin.
LIZARRAGA, X. Evaluacin y mejora de la invarianza al timbre de descriptores
tonales para el uso efectivo en aplicaciones musicales.Trabajo Final de Grado.
Escuela Superior Politcnica Universitat Pompeu Fabra, Barcelona, 2013.
LPEZ, E; ROCAMORA, M and SOSA, G. Bsqueda de Msica por Tarareo. 2004,
Proyecto de Grado. Universidad de la Repblica Oriental del Uruguay.
MAHER, R. An Approach for the Separation of Voices in Composite Musical
Signals, University of Illinois, IL, USA, 1989.
MITRA, K. SANJIT. Digital Signal Processing: A computer-Based Approach.
MOORER, J. On the Segmentation and Analysis of Continuous Musical Sound by
Digital Computer, Stanford University, CA, USA, July 1975.
MORN, Jos. Seales y Sistemas. Universidad Rafael Urdaneta. 2011.

97

OPPENHEIM, A., WILLSKY, A. and HAMID, S. (1997). Signal and Systems. 2da
Edicin.
WANG, A. An Industrial-Strength Audio Search Algorithm. 2006.
TSUNOO, E; G. Tzanetakis, N. Ono and S. Sagayama. Audio Genre Classification
Using Percussive Pattern Clustering Combinated With Timbral Features. Graduate
School of Information Science and Technology, The University of Tokyo, Japan.
ZAPATA, Johan. Desarrollo de Aplicaciones de Comunicacin entre Dispositivos
Mviles basados en Sistemas Operativos Android. Trabajo Final de Grado.
Universidad de San Buenaventura, Medelln, 2013.

98

9. ANEXOS
CDIGO ECLIPSE ANDROID

CLASE SIMPLELAME

/**

/*

* Initialize LAME.

* Copyright (c) 2011-2012 Yuichi Hirano

* @param inSamplerate

* Permission is hereby granted, free of charge, to any


person obtaining a copy

input sample rate in Hz.


* @param outChannel

* of this software and associated documentation files (the


"Software"), to deal

number of channels in input stream.

* in the Software without restriction, including without


limitation the rights

* @param outSamplerate
*

* to use, copy, modify, merge, publish, distribute,


sublicense, and/or sell

output sample rate in Hz.


* @param outBitrate

* copies of the Software, and to permit persons to whom


the Software is

brate compression ratio in KHz.


*/

* furnished to do so, subject to the following conditions:


public static void init(int inSamplerate, int outChannel,
* The above copyright notice and this permission notice
shall be included in

int outSamplerate, int outBitrate) {

* all copies or substantial portions of the Software.

outSamplerate=44100;

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT


WARRANTY OF ANY KIND, EXPRESS OR

outBitrate=16;
init(inSamplerate, outChannel, outSamplerate, outBitrate,
7);

* IMPLIED, INCLUDING BUT NOT LIMITED TO THE


WARRANTIES OF MERCHANTABILITY,

* FITNESS FOR A PARTICULAR PURPOSE AND


NONINFRINGEMENT. IN NO EVENT SHALL

/**

* THE AUTHORS OR COPYRIGHT HOLDERS BE


LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

* Initialize LAME.
* @param inSamplerate

* LIABILITY, WHETHER IN AN ACTION OF


CONTRACT, TORT OR OTHERWISE, ARISING FROM,

* OUT OF OR IN CONNECTION WITH THE


SOFTWARE OR THE USE OR OTHER DEALINGS IN

input sample rate in Hz.


* @param outChannel

* THE SOFTWARE.

number of channels in input stream.


* @param outSamplerate

*/
*

package com.uraroji.garage.android.lame;

output sample rate in Hz.


* @param outBitrate

/**
*

* LAME interface class

brate compression ratio in KHz.


* @param quality

*/
*

public class SimpleLame {

99

quality=0..9. 0=best (very slow). 9=worst.<br />

*
*

recommended:<br />

public native static int flush(byte[] mp3buf);

2 near-best quality, not too slow<br />

/**

5 good quality, fast<br />

* Close LAME.

7 ok quality, really fast

*/

*
*

*/

public native static void close();

public native static void init(int inSamplerate, int


outChannel,
}
int outSamplerate, int outBitrate, int quality);
CLASE RecMicToMp3
* Encode buffer to mp3.
package com.uraroji.garage.android.mp3recvoice;
* @param buffer_l
import java.io.File;
*

PCM data for left channel.


import java.io.FileNotFoundException;
* @param buffer_r
import java.io.FileOutputStream;

PCM data for right channel.


import java.io.IOException;
* @param sambles
import java.security.InvalidParameterException;

number of samples per channel.


import android.media.AudioFormat;
* @param mp3buf
import android.media.AudioRecord;

result encoded MP3 stream. You must specified


import android.media.MediaRecorder;
*

"7200 + (1.25 * buffer_l.length)" length array.


import android.os.Handler;

* @return number of bytes output in mp3buf. Can be


0.<br />
*

-1: mp3buf was too small<br />

public class RecMicToMp3 {

-2: malloc() problem<br />

static {

-3: lame_init_params() not called<br />

System.loadLibrary("mp3lame");

-4: psycho acoustic problems

*
*
*

import com.uraroji.garage.android.lame.SimpleLame;

*/

private String mFilePath;

public native static int encode(short[] buffer_l, short[]


buffer_r,

private int mSampleRate;


private boolean mIsRecording = false;

int samples, byte[] mp3buf);


/**
/**
* @see RecMicToMp3#MSG_REC_STARTED
* Flush LAME buffer.
* @see RecMicToMp3#MSG_REC_STOPPED
*
* @see
RecMicToMp3#MSG_ERROR_GET_MIN_BUFFERSIZE

* @param mp3buf
*

result encoded MP3 stream. You must specified


at least 7200

* @see RecMicToMp3#MSG_ERROR_CREATE_FILE
* @see RecMicToMp3#MSG_ERROR_REC_STAR

bytes.
* @see
RecMicToMp3#MSG_ERROR_AUDIO_RECORD

* @return number of bytes output to mp3buf. Can be 0.


*/

100

* @see
RecMicToMp3#MSG_ERROR_AUDIO_ENCODE
if (mIsRecording) {
* @see RecMicToMp3#MSG_ERROR_WRITE_FILE
return
* @see RecMicToMp3#MSG_ERROR_CLOSE_FILE
}
*/

new Thread() {
private Handler mHandler;
@Override
public static final int MSG_REC_STARTED = 0;
public void run() {
public static final int MSG_REC_STOPPED = 1;
android.os.Process.setThreadPriority(android.os.Process
.THREAD_PRIORITY_URGENT_AUDIO);

public static final int


MSG_ERROR_GET_MIN_BUFFERSIZE = 2;
public static final int MSG_ERROR_CREATE_FILE = 3;

final int minBufferSize = AudioRecord.getMinBufferSize(


public static final int MSG_ERROR_REC_START = 4;
mSampleRate,
AudioFormat.CHANNEL_IN_MONOAudioFormat.ENCO
DING_PCM_16BIT);

public static final int MSG_ERROR_AUDIO_RECORD =


5;
public static final int MSG_ERROR_AUDIO_ENCODE =
6;

if (minBufferSize < 0) {
public static final int MSG_ERROR_WRITE_FILE = 7;
if (mHandler != null) {
public static final int MSG_ERROR_CLOSE_FILE = 8;

mHandler.sendEmptyMessage(MSG_ERROR_GET_MI
N_BUFFERSIZE);
}
return;
public RecMicToMp3(String filePath, int sampleRate) {

if (sampleRate <= 0) {

AudioRecord audioRecord = new AudioRecord(


MediaRecorder.AudioSource.MIC, mSampleRate,

throw new InvalidParameterException(

AudioFormat.CHANNEL_IN_MONO,

"Invalid sample rate specified.");

AudioFormat.ENCODING_PCM_16BIT, minBufferSize *
2);
//PCM buffer size (5sec)

}
this.mFilePath = filePath;
short[] buffer = new short[mSampleRate * (16 / 8) * 1 *
5]; // SampleRate[Hz] * 16bit * Mono * 5sec

this.mSampleRate = sampleRate;

byte[] mp3buffer = new byte[(int) (7200 + buffer.length *


2 * 1.25)];

FileOutputStream output = null;

public void start() {

101

try {

output = new FileOutputStream(new File(mFilePath));

break;

} catch (FileNotFoundException e) {

}
else if (readSize == 0) {

if (mHandler != null) {

mHandler.sendEmptyMess
age(MSG_ERROR_CREATE_FILE);

}
else {

}
return;
int encResult =
SimpleLame.encode(buffer,buffer,readSize,mp3buffer);

if (encResult < 0) {
//Lame init

if (mHandler != null) {

SimpleLame.init(mSampleRate, 1, mSampleRate, 32);

mHandler.sendEmptyMessage(MSG_ERROR_AUDIO_
ENCODE);

mIsRecording = true;
}
try {
break;
}
try {
if (encResult != 0) {
audioRecord.startRecording();
try {
} catch (IllegalStateException e) {
output.write(mp3buffer, 0, encResult);
if (mHandler != null) {
} catch (IOException e) {
mHandler.sendEmptyMessage(MSG_ERROR_REC_ST
ART);

if (mHandler !=
null

}
return;
mHandler.sendEmptyMes
sage(MSG_ERROR_WRIT
E_FILE);

}
try {

if (mHandler != null) {

}
break;

mHandler.sendEmptyMessage(MSG_REC_STARTED);

}}}}

int flushResult = SimpleLame.flush(mp3buffer);

int readSize = 0;

if (flushResult < 0) {

while (mIsRecording) {

if (mHandler != null) {

readSize = audioRecord.read(buffer, 0, minBufferSize);

mHandler.sendEmptyMessage(MSG_ERROR_AUDIO_
ENCODE);}}

if (readSize < 0) {

if (flushResult != 0) {

if (mHandler != null) {

try {

mHandler.sendEmptyMessage(MSG_ERROR_AUDIO_
RECORD);

output.write(mp3buffer, 0, flushResult);

102

}
catch(IOException e) {

* @see RecMicToMp3#MSG_ERROR_WRITE_FILE
* @see RecMicToMp3#MSG_ERROR_CLOSE_FILE

if

*/

(mHandler != null) {
mHandler.sendEmptyMessage(MSG_ERROR_WRITE_
FILE);

public void setHandle(Handler handler) {

}}}

this.mHandler = handler;}}

try {
output.close();
} catch (IOException e) {
if (mHandler != null) {
mHandler.sendEmptyMessage(MSG_ERROR_CLOSE_
FILE);

CLASE MainActivity

}}} finally {
package com.uraroji.garage.android.mp3recvoice;
audioRecord.stop();
import java.io.DataInputStream;
audioRecord.release();
import java.io.DataOutputStream;
}
import java.io.File;
} finally {SimpleLame.close();mIsRecording = false; }
import java.io.FileInputStream;
if (mHandler != null)
{mHandler.sendEmptyMessage(MSG_REC_STOPPED);
}}}.start();}

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;

public void stop() {


import java.net.URL;
mIsRecording = false;}
import android.app.Activity;
import android.content.Context;
public boolean isRecording() {
import android.os.Bundle;
return mIsRecording;}
import android.os.CountDownTimer;
/**
import android.os.Environment;
* @param handler
import android.os.Handler;
* @see RecMicToMp3#MSG_REC_STARTED
import android.os.Message;
* @see RecMicToMp3#MSG_REC_STOPPED
import android.util.Log;
* @see
RecMicToMp3#MSG_ERROR_GET_MIN_BUFFERSIZE

import android.view.View;

* @see RecMicToMp3#MSG_ERROR_CREATE_FILE

import android.view.View.OnClickListener;

* @see RecMicToMp3#MSG_ERROR_REC_START

import android.widget.Button;

* @see
RecMicToMp3#MSG_ERROR_AUDIO_RECORD

import android.widget.ImageButton;
import android.widget.TextView;

* @see
RecMicToMp3#MSG_ERROR_AUDIO_ENCODE

import android.widget.Toast;e

103

import com.usb.tesis.android.mp3recvoice.R;

case RecMicToMp3.MSG_ERROR_REC_START:

public class MainActivity extends Activity {

statusTextView.setText("");

public String responseFromServer = "";

Toast.makeText(MainActivity.this, "Error",

private RecMicToMp3 mRecMicToMp3 = new


RecMicToMp3(

Toast.LENGTH_LONG).show();
break;

Environment.getExternalStorageDirectory() +
"/Lasso.mp3", 8000);

case RecMicToMp3.MSG_ERROR_AUDIO_RECORD:

@Override

statusTextView.setText("");

public void onCreate(Bundle savedInstanceState) {

Toast.makeText(MainActivity.this, "Error",

super.onCreate(savedInstanceState);

Toast.LENGTH_LONG).show();

setContentView(R.layout.main);

break;

final TextView statusTextView = (TextView)


findViewById(R.id.textView3);

case RecMicToMp3.MSG_ERROR_AUDIO_ENCODE:
statusTextView.setText("");
Toast.makeText(MainActivity.this, "Error",

final TextView textViewResultado = (TextView)


findViewById(R.id.textViewResultado);

Toast.LENGTH_LONG).show();

mRecMicToMp3.setHandle(new Handler() {

break;

@Override

case RecMicToMp3.MSG_ERROR_WRITE_FILE:

public void handleMessage(Message msg) {

statusTextView.setText("");

switch (msg.what) {

Toast.makeText(MainActivity.this, "Error",

case RecMicToMp3.MSG_REC_STARTED:

Toast.LENGTH_LONG).show();

statusTextView.setText("Grabando...");

break;

break;

case RecMicToMp3.MSG_ERROR_CLOSE_FILE:

case RecMicToMp3.MSG_REC_STOPPED:

statusTextView.setText("");

statusTextView.setText("");

Toast.makeText(MainActivity.this, "Error",

break;

Toast.LENGTH_LONG).show();

case
RecMicToMp3.MSG_ERROR_GET_MIN_BUFFERSIZE:

break;
default:

statusTextView.setText("");
break;}}});
Toast.makeText(MainActivity.this,"Error",
Toast.LENGTH_LONG).show();

ImageButton StrtButton = (ImageButton)


findViewById(R.id.StartButton);

break;

StrtButton.setOnClickListener(new OnClickListener() {

case RecMicToMp3.MSG_ERROR_CREATE_FILE:

@Override

statusTextView.setText("");

public void onClick(View v) {

Toast.makeText(MainActivity.this, "Error",

mRecMicToMp3.start();

Toast.LENGTH_LONG).show();

responseFromServer="";

break;

textViewResultado.setText(responseFromServer);

104

new CountDownTimer(20000, 1000) {

// open a URL connection to the Servlet

public void onTick(long millisUntilFinished) {

URL url = new URL(urlString);

statusTextView.setText("La grabacion se detendra en: "


+ millisUntilFinished / 1000 +"segundos");

// Open a HTTP connection to the URL


conn = (HttpURLConnection) url.openConnection();

}
// Allow Inputsconn.setDoInput(true);
public void onFinish() {
// Allow Outputsconn.setDoOutput(true);
mRecMicToMp3.stop();
// Don't use a cached copy.conn.setUseCaches(false);
int duration = Toast.LENGTH_SHORT;
// Use a post method. conn.setRequestMethod("POST");
Context context = getApplicationContext();
conn.setRequestProperty("Connection", "Keep-Alive");
Toast toast = Toast.makeText(context, "Presiona
Cocua", duration);

conn.setRequestProperty("Content-Type",
"multipart/form-data;boundary=" + boundary);
dos = new DataOutputStream(conn.getOutputStream());

toast.show();}}.start();}});
dos.writeBytes(twoHyphens + boundary + lineEnd);
ImageButton stpButton = (ImageButton)
findViewById(R.id.StopButton);
stpButton.setOnClickListener(new OnClickListener() {

dos.writeBytes("Content-Disposition: form-data;
name=\"sample-match\";filename=\"" + existingFileName
+ "\"" + lineEnd);

@Override

dos.writeBytes(lineEnd);

public void onClick(View v) {

// create a buffer of maximum size

Thread enviar = new Thread(){

bytesAvailable = fileInputStream.available();

public void run(){

bufferSize = Math.min(bytesAvailable, maxBufferSize);

HttpURLConnection conn = null;

buffer = new byte[bufferSize];

DataOutputStream dos = null;

// read file and write it into form...

DataInputStream inStream = null;

bytesRead = fileInputStream.read(buffer, 0, bufferSize);

String existingFileName =
Environment.getExternalStorageDirectory().getAbsoluteP
ath() + "/Lasso.mp3";

while (bytesRead > 0) {


dos.write(buffer, 0, bufferSize
bytesAvailable = fileInputStream.available();

String lineEnd = "\r\n";


bufferSize = Math.min(bytesAvailable, maxBufferSize);
String twoHyphens = "--";
bytesRead = fileInputStream.read(buffer, 0, bufferSize);}
String boundary = "*****";
// send multipart form data necesssary after file data...
int bytesRead, bytesAvailable, bufferSize;
dos.writeBytes(lineEnd);
byte[] buffer;
dos.writeBytes(twoHyphens + boundary + twoHyphens +
lineEnd);

int maxBufferSize = 1 * 1024 * 1024;


String urlString = "http://52.10.37.158/lasopedia/matchsong.php";

// close streams Log.e("Debug", "File is written");


fileInputStream.close();dos.flush();dos.close();} catch
(MalformedURLException ex) {

try {
Log.e("Debug", "error: " + ex.getMessage(), ex); } catch
(IOException ioe) {

//------------------ CLIENT REQUEST

Log.e("Debug", "error: " + ioe.getMessage(), ioe);}

FileInputStream fileInputStream = new


FileInputStream(new File(existingFileName));

105

import java.sql.DriverManager;
import java.sql.ResultSet;
//------------------ read the SERVER RESPONSE

import java.sql.SQLException;

try {

import java.util.HashMap;

inStream = new
DataInputStream(conn.getInputStream());

import java.util.Map;
import java.util.logging.Level;

String str;
import java.util.logging.Logger;
while ((str = inStream.readLine()) != null) {
import javax.sound.sampled.AudioFormat;
Log.e("Debug", "Server Response " + str);
import javax.sound.sampled.AudioInputStream;
responseFromServer=str;
import javax.sound.sampled.AudioSystem;
catch (IOException ioex) {
import javax.sound.sampled.DataLine;
Log.e("Debug", "error: " + ioex.getMessage(), ioex);}}};
import javax.sound.sampled.LineUnavailableException;
enviar.start();
import javax.sound.sampled.TargetDataLine;
statusTextView.setText("Espera unos segundos y
presiona Resultado");}});

import
javax.sound.sampled.UnsupportedAudioFileException;

ImageButton buttnRespuesta = (ImageButton)


findViewById(R.id.buttonRespuesta);

import
org.tritonus.sampled.convert.PCM2PCMConversionProvi
der;

buttnRespuesta.setOnClickListener(new
OnClickListener() {
@Override

public class Xtract {


public void onClick(View v) {
textViewResultado.setText(responseFromServer);
static AudioFormat getFormat() {
}});}
float sampleRate = 44100;
@Override
int sampleSizeInBits = 16;
protected void onDestroy() {
int channels = 1; // mono
super.onDestroy();
boolean signed = true;
mRecMicToMp3.stop();}}
boolean bigEndian = true;
return new AudioFormat(sampleRate, sampleSizeInBits,
channels, signed, bigEndian);

Clase Extract

}
package xtract;

static final int FUZ_FACTOR = 2;


static final int UPPER_LIMIT = 300;

import com.mysql.jdbc.Connection;

static final int LOWER_LIMIT = 40;

import com.mysql.jdbc.PreparedStatement;

static final int[] RANGE = new int[]{40, 80, 120, 180,


UPPER_LIMIT + 1};

import java.io.ByteArrayOutputStream;
static double highscores[][];
import java.io.File;
static double recordPoints[][];
import java.io.IOException;

106

static long points[][];

// Perform FFT analysis on the chunk:

static String command;

results[times] = FFT.fft(complex);

static Map<Integer, Map<Integer, Integer>> matchMap; //


Map<SongId, Map<Offset,

}
determineKeyPoints(results, songId);
}

// Find out in which range


static int getIndex(int freq) {

static void determineKeyPoints(Complex[][] results, int


songId) throws SQLException {

int i = 0;

matchMap = new HashMap<>();

while (RANGE[i] < freq) {

highscores = new double[results.length][5];

i++;

for (int i = 0; i < results.length; i++) {

for (int j = 0; j < 5; j++) {

return i;

highscores[i][j] = 0;

static long hash(long p1, long p2, long p3, long p4) {

return (p4 - (p4 % FUZ_FACTOR)) * 100000000 +

recordPoints = new
double[results.length][UPPER_LIMIT];

(p3 - (p3 % FUZ_FACTOR)) * 100000 +


for (int i = 0; i < results.length; i++) {
(p2 - (p2 % FUZ_FACTOR)) * 100 +
for (int j = 0; j < UPPER_LIMIT; j++) {
(p1 - (p1 % FUZ_FACTOR));
recordPoints[i][j] = 0;
}
}
static void makeSpectrum(ByteArrayOutputStream out,
int songId) throws SQLException {

byte audio[] = out.toByteArray();

points = new long[results.length][5];

final int totalSize = audio.length;

for (int i = 0; i < results.length; i++) {

int amountPossible = totalSize / 4096;

for (int j = 0; j < 5; j++) {

// When turning into frequency domain we'll need


complex numbers:

points[i][j] = 0;
}

Complex[][] results = new Complex[amountPossible][];


}

// For all the chunks:


int song_id, t2;
for (int times = 0; times < amountPossible; times++) {
ResultSet rs = null;
Complex[] complex = new Complex[4096];
//Connection con = (Connection)
DriverManager.getConnection("jdbc:mysql://localhost:33
06/lasopedia", "root", "toor");

for (int i = 0; i < 4096; i++) {


// Put the time domain data into a complex number with
imaginary

Connection con = (Connection)


DriverManager.getConnection(

// part as 0:
complex[i] = new Complex(audio[(times * 4096) + i], 0);

"jdbc:mysql://saviadmin.carrtaqgex7f.us-west2.rds.amazonaws.com:3306/lasopedia",

"s4v14_r00t",

107

"_saviadmin*2015_"

Map<Integer, Integer> tmpMap;

);

if ((tmpMap = matchMap.get(song_id)) == null) {

PreparedStatement pst = null;

tmpMap = new HashMap<>();

if (command.equals("-m")) {

tmpMap.put(offset, 1);

pst = (PreparedStatement) con.prepareStatement(

matchMap.put(song_id, tmpMap);

"SELECT song_id, time FROM hash WHERE hash=?");

} else {

} else { // command.equals("-x")

Integer count = tmpMap.get(offset);

pst = (PreparedStatement) con.prepareStatement(

if (count == null) {

"INSERT INTO hash(hash, song_id, time)


VALUES(?,?,?)");

tmpMap.put(offset, 1);
} else {

}
tmpMap.put(offset, count + 1);
for (int t = 0; t < results.length; t++) {
}
for (int freq = 40; freq < 300; freq++) {
}
}
double mag = Math.log(results[t][freq].abs() + 1);

} else { // command.equals("-x")
int index = getIndex(freq);
//TODO: list.add
pst.setLong(1, h);
if (mag > highscores[t][index]) {
pst.setInt(2, songId);
highscores[t][index] = mag;
pst.setInt(3, t);
recordPoints[t][freq] = 1;
pst.executeUpdate();
points[t][index] = freq;
}
}
pst.clearParameters();
}
long h = hash(points[t][0], points[t][1], points[t][2],
}
points[t][3]);
//TODO: list.insert to DB
if (command.equals("-m")) {

// Match
pst.setLong(1, h);
if (command.equals("-m")) {
int bestCount = 0;
rs = pst.executeQuery();
int bestSong = -1;
while (rs.next()) {
song_id = rs.getInt(1);
for (Map.Entry<Integer, Map<Integer, Integer>>
matchSong : matchMap.entrySet()) {//int id = 0; id <
nrSong; id++) {

t2 = rs.getInt(2);
int offset = Math.abs(t2 - t);

108

Map<Integer, Integer> tmpMap = matchSong.getValue();

songId = Integer.parseInt(args[2]);

int bestCountForSong = 0;

final int sId = songId;


AudioInputStream din;

for (Map.Entry<Integer, Integer> entry :


tmpMap.entrySet()) {

AudioInputStream outDin;

if (entry.getValue() > bestCountForSong) {

PCM2PCMConversionProvider conversionProvider =
new PCM2PCMConversionProvider();

bestCountForSong = entry.getValue();

AudioInputStream in = null;

}
}

File file = new File(filePath);

if (bestCountForSong > bestCount) {

try {

bestCount = bestCountForSong;

in = AudioSystem.getAudioInputStream(file);

bestSong = matchSong.getKey();

} catch (UnsupportedAudioFileException | IOException


ex) {

}
}

Logger.getLogger(Xtract.class.getName()).log(Level.SEV
ERE, null, ex);

System.out.println(bestSong);

AudioFormat baseFormat = in.getFormat();


//System.out.println(baseFormat.toString());

if (rs != null) {

AudioFormat decodedFormat = new AudioFormat(

rs.close();

AudioFormat.Encoding.PCM_SIGNED,

baseFormat.getSampleRate(), 16,
baseFormat.getChannels(),

if (pst != null) {
pst.close();

baseFormat.getChannels() * 2,
baseFormat.getSampleRate(),

false);

if (con != null) {

din =
AudioSystem.getAudioInputStream(decodedFormat, in);

con.close();
if
(!conversionProvider.isConversionSupported(getFormat(
), decodedFormat)) {

System.out.println("Conversion is not supported");


}

return;

* @param args the command line arguments

*/

//System.out.println(decodedFormat.toString());

public static void main(String[] args) {

outDin =
conversionProvider.getAudioInputStream(getFormat(),
din);

int songId=0;
command = args[0];
String filePath = args[1];

final AudioInputStream outDinSound = outDin;

if ( (args[0]).equals("-x") )

Thread listeningThread = new Thread(() -> {

109

ByteArrayOutputStream out = new


ByteArrayOutputStream();

* Compilation: javac FFT.java Execution: java FFT N


Dependencies: Complex.java

int n = 0;

byte[] buffer = new byte[(int) 1024];

* Compute the FFT and inverse FFT of a length N


complex sequence. Bare bones

try {

* implementation that runs in O(N log N) time. Our goal is


to optimize the

while (n<=1000) {

* clarity of the code, rather than performance.

int count = outDinSound.read(buffer, 0, 1024);

if (count > 0) {

* Limitations ----------- - assumes N is a power of 2

out.write(buffer, 0, count);

* - not the most memory efficient algorithm (because it


uses an object type for

n++;
* representing complex numbers and because it reallocates memory for the

* sub array, instead of doing in-place or reusing a single


temporary array)

try {
makeSpectrum(out, sId);

*
*****************************************************************
********/

System.out.println("OK");

public class FFT {


} catch (SQLException ex) {

// compute the FFT of x[], assuming its length is a power


of 2

Logger.getLogger(Xtract.class.getName()).log(Level.SEV
ERE, null, ex);

public static Complex[] fft(Complex[] x) {

int N = x.length;

out.close();

// base case

} catch (IOException e) {

if (N == 1)

System.err.println("I/O problems: " + e);

return new Complex[] { x[0] };

System.exit(-1);

// radix 2 Cooley-Tukey FFT

if (N % 2 != 0) {

});

throw new RuntimeException("N is not a power of 2");


}

listeningThread.start();

// fft of even terms

};

Complex[] even = new Complex[N / 2];

for (int k = 0; k < N / 2; k++) {


even[k] = x[2 * k];

CLASE FFT

package xtract;

Complex[] q = fft(even);
// fft of odd terms

110

Complex[] odd = even; // reuse the array

return y;

for (int k = 0; k < N / 2; k++) {


odd[k] = x[2 * k + 1];

// compute the circular convolution of x and y

Complex[] r = fft(odd);

public static Complex[] cconvolve(Complex[] x,


Complex[] y) {

// combine

// should probably pad x and y with 0s so that they have


same length

Complex[] y = new Complex[N];

// and are powers of 2

for (int k = 0; k < N / 2; k++) {

if (x.length != y.length) {

double kth = -2 * k * Math.PI / N;

throw new RuntimeException("Dimensions don't agree");

Complex wk = new Complex(Math.cos(kth),


Math.sin(kth));

}
int N = x.length;

y[k] = q[k].plus(wk.times(r[k]));
// compute FFT of each sequence
y[k + N / 2] = q[k].minus(wk.times(r[k]));
Complex[] a = fft(x);
}
Complex[] b = fft(y);
return y;
// point-wise multiply
}
Complex[] c = new Complex[N];
// compute the inverse FFT of x[], assuming its length is a
power of 2

for (int i = 0; i < N; i++) {

public static Complex[] ifft(Complex[] x) {

c[i] = a[i].times(b[i]);

int N = x.length;

Complex[] y = new Complex[N];

// compute inverse FFT

// take conjugate

return ifft(c);

for (int i = 0; i < N; i++) {

y[i] = x[i].conjugate();

// compute the linear convolution of x and y

public static Complex[] convolve(Complex[] x, Complex[]


y) {

// compute forward FFT


Complex ZERO = new Complex(0, 0);
y = fft(y);
Complex[] a = new Complex[2 * x.length];
// take conjugate again
for (int i = 0; i < x.length; i++)
for (int i = 0; i < N; i++) {
a[i] = x[i];
y[i] = y[i].conjugate();
for (int i = x.length; i < 2 * x.length; i++)
}
a[i] = ZERO;
// divide by N
Complex[] b = new Complex[2 * y.length];
for (int i = 0; i < N; i++) {
for (int i = 0; i < y.length; i++)
y[i] = y[i].times(1.0 / N);
b[i] = y[i];
}

111

for (int i = y.length; i < 2 * y.length; i++)

* 0.10288019294318276 + 4.033186818023279E-18i

b[i] = ZERO;

return cconvolve(a, b);

* d = convolve(x, x) ------------------0.001211336402308083 -

}
* 3.122502256758253E-17i -0.005506167987577068 5.058885073636224E-17i

// display an array of Complex numbers to standard


output

* -0.044092969479563274 + 2.1934338938072244E-18i
0.10288019294318276 -

public static void show(Complex[] x, String title) {

* 3.6147323062478115E-17i 0.5494685269958772 +
3.122502256758253E-17i

System.out.println(title);
System.out.println("-------------------");
for (int i = 0; i < x.length; i++) {

* 0.240120239493341 + 4.655566391833896E-17i
0.02755001837079092 -

System.out.println(x[i]);

* 2.1934338938072244E-18i 4.01805098805014E-17i

System.out.println();

*****************************************************************
****/

}
}
/****************************************************************
*****

SERVER PHP

* Test client and sample execution

<?php

require_once('php/blocks.php');

* % java FFT 4 x ------------------- -0.03480425839330703

$target_dir = dirname(__FILE__).'/uploads/';

* 0.07910192950176387 0.7233322451735928
0.1659819820667019

$target_file = $target_dir . basename($_FILES["audiofile"]["name"]);

if (move_uploaded_file($_FILES["audiofile"]["tmp_name"], $target_file)) {

* y = fft(x) ------------------- 0.9336118983487516 0.7581365035668999 +

// Problema de memoria
//$tag = id3_get_tag( $target_file, ID3_BEST );

* 0.08688005256493803i 0.44344407521182005 0.7581365035668999 -

$title = $_FILES['audio-file']['name'];
* 0.08688005256493803i
$db = getConnection();
*
$stmt = $db->prepare("INSERT INTO
songs(title,size,filename) VALUES (?,?,?)");

* z = ifft(y) ------------------- -0.03480425839330703


0.07910192950176387

if( $stmt->execute([ $title, $_FILES['audio-file']['size'],


$target_file]) ) {

* + 2.6599344570851287E-18i 0.7233322451735928
0.1659819820667019 -

echo json_encode([ 'file_id' => $db->lastInsertId() ]);


* 2.6599344570851287E-18i
} else {
*
echo json_encode([]);
* c = cconvolve(x, x) ------------------0.5506798633981853

}
}

* 0.23461407150576394 - 4.033186818023279E-18i 0.016542951108772352

exit;

112

10. GLOSARIO
DSP: (Digital Signal Processor).
FFT: (Fast Fourier Transform). Transformada de Fourier rpida. Mtodo
computacional eficiente para estimar el espectro frecuencial de una seal.
IDE: (Integrated Development Environment). Entorno de desarrollo integrado.
ISMIR: International Symposium of Music Information Retrieval.
LASO: Laboratorios Sociales de Cultura y Emprendimiento del Ministerio de Cultura
de Colombia.
MIR: Music Information Retrieval.
MIREX: Music Information Retrieval Evaluation eXchange.
SNR: (Signal Noise Reduction). Relacin Seal-Ruido
STFT: Short-Time Fourier Transform.
TIC: Tecnologas de la Informacin y las Comunicaciones.

113

También podría gustarte