Академический Документы
Профессиональный Документы
Культура Документы
Nota de Aceptacin
________________________________
________________________________
________________________________
________________________________
________________________________
________________________________
Firma del Presidente del Jurado
________________________________
Firma del Jurado
________________________________
Firma del Jurado
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.
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
10
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
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
11
12
10
13
14
Crear una base datos compuesta por los espectrogramas de las canciones a
utilizar en la aplicacin.
12
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
1.6.2. LIMITACIONES
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
17
18
2.1.1.3.
FILTRACIN
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.
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
20
2.1.1.5.
CONVOLUCIN
2.1.1.6.
CORRELACIN
TRANSFORMADA DE FOURIER
21
H(f)= () (2)
Entre las propiedades de la transformada de Fourier se encuentran la linealidad,
simetra, escalamiento, corrimiento en tiempo y frecuencia, entre otras.
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.
ESPECTROGRAMA
23
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.
FUNCIONES HASH
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
13
26
27
ARQUITECTURA DE ANDROID
LIBRERAS
APLICACIONES
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
2.1.3.5.
GOOGLE PLAY
14
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.
-
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:
-
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
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.
33
Figura 10. Esquema general del proceso de identificacin de canciones por similitud
de audio.
Fuente: Autores.
4.1.1. EXTRACCIN DE HUELLA ACSTICA
34
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.
36
4.1.1.1.1.
PREPROCESAMIENTO
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
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
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.
40
Fuente: Autores.
Figura 19. Extraccin de descriptores de alto nivel energtico a una FFT.
Fuente: Autores.
41
Fuente: Autores
4.1.1.1.5.
42
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.
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:
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.
46
4.1.1.2.1.
BIBLIOTECA MUSICAL
47
ARTISTA
GNERO
TIEMPO (min)
Mirala
Alexis Play
Urbano alternativo
3:27
Mi Tumbao
Alexis Play
Urbano alternativo
3:16
Come Round
Elkin Robinson
3:27
Creole Vibrations
Elkin Robinson
5:26
Keep It Calm
Elkin Robinson
2:36
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
Fuente: Autores.
48
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
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
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
52
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
56
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.
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
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
Fuente: Autores.
77
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.
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
Fuente: Autores.
Los resultados obtenidos se exponen en el captulo de presentacin y anlisis de
resultados.
81
Fuente: Autores.
Al lado izquierdo de la pantalla aparece el men de gestin de recursos e
informacin, en el cual aparecen las siguientes opciones:
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.
84
Fuente: Autores.
Figura 59. Aplicacin mvil Lasopedia lista para funcionar.
Fuente: Autores.
85
-12
-9
-6
-3
86
Ruido Rosa
12
15
-12
-9
-6
-3
12
15
Ruido Rosa
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.
-12
-9
-6
-3
12
15
Ruido Rosa
-12
-9
-6
-3
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
89
90
91
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.
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
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.
* @param inSamplerate
* @param outSamplerate
*
outSamplerate=44100;
outBitrate=16;
init(inSamplerate, outChannel, outSamplerate, outBitrate,
7);
/**
* Initialize LAME.
* @param inSamplerate
* THE SOFTWARE.
*/
*
package com.uraroji.garage.android.lame;
/**
*
*/
*
99
*
*
recommended:<br />
/**
* Close LAME.
*/
*
*
*/
static {
System.loadLibrary("mp3lame");
*
*
*
import com.uraroji.garage.android.lame.SimpleLame;
*/
* @param mp3buf
*
* @see RecMicToMp3#MSG_ERROR_CREATE_FILE
* @see RecMicToMp3#MSG_ERROR_REC_STAR
bytes.
* @see
RecMicToMp3#MSG_ERROR_AUDIO_RECORD
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);
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) {
AudioFormat.CHANNEL_IN_MONO,
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;
101
try {
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) {
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 readSize = 0;
if (flushResult < 0) {
while (mIsRecording) {
if (mHandler != null) {
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);
}}}
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;
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:
statusTextView.setText("");
Toast.makeText(MainActivity.this, "Error",
Toast.LENGTH_LONG).show();
break;
Environment.getExternalStorageDirectory() +
"/Lasso.mp3", 8000);
case RecMicToMp3.MSG_ERROR_AUDIO_RECORD:
@Override
statusTextView.setText("");
Toast.makeText(MainActivity.this, "Error",
super.onCreate(savedInstanceState);
Toast.LENGTH_LONG).show();
setContentView(R.layout.main);
break;
case RecMicToMp3.MSG_ERROR_AUDIO_ENCODE:
statusTextView.setText("");
Toast.makeText(MainActivity.this, "Error",
Toast.LENGTH_LONG).show();
mRecMicToMp3.setHandle(new Handler() {
break;
@Override
case RecMicToMp3.MSG_ERROR_WRITE_FILE:
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();
break;
StrtButton.setOnClickListener(new OnClickListener() {
case RecMicToMp3.MSG_ERROR_CREATE_FILE:
@Override
statusTextView.setText("");
Toast.makeText(MainActivity.this, "Error",
mRecMicToMp3.start();
Toast.LENGTH_LONG).show();
responseFromServer="";
break;
textViewResultado.setText(responseFromServer);
104
}
// 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);
bytesAvailable = fileInputStream.available();
String existingFileName =
Environment.getExternalStorageDirectory().getAbsoluteP
ath() + "/Lasso.mp3";
try {
Log.e("Debug", "error: " + ex.getMessage(), ex); } catch
(IOException ioe) {
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;
import
org.tritonus.sampled.convert.PCM2PCMConversionProvi
der;
buttnRespuesta.setOnClickListener(new
OnClickListener() {
@Override
Clase Extract
}
package xtract;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import java.io.ByteArrayOutputStream;
static double highscores[][];
import java.io.File;
static double recordPoints[][];
import java.io.IOException;
106
results[times] = FFT.fft(complex);
}
determineKeyPoints(results, songId);
}
int i = 0;
i++;
return i;
highscores[i][j] = 0;
static long hash(long p1, long p2, long p3, long p4) {
recordPoints = new
double[results.length][UPPER_LIMIT];
points[i][j] = 0;
}
// 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_"
);
if (command.equals("-m")) {
tmpMap.put(offset, 1);
matchMap.put(song_id, tmpMap);
} else {
} else { // command.equals("-x")
if (count == null) {
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
songId = Integer.parseInt(args[2]);
int bestCountForSong = 0;
AudioInputStream outDin;
PCM2PCMConversionProvider conversionProvider =
new PCM2PCMConversionProvider();
bestCountForSong = entry.getValue();
AudioInputStream in = null;
}
}
try {
bestCount = bestCountForSong;
in = AudioSystem.getAudioInputStream(file);
bestSong = matchSong.getKey();
}
}
Logger.getLogger(Xtract.class.getName()).log(Level.SEV
ERE, null, ex);
System.out.println(bestSong);
if (rs != null) {
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)) {
return;
*/
//System.out.println(decodedFormat.toString());
outDin =
conversionProvider.getAudioInputStream(getFormat(),
din);
int songId=0;
command = args[0];
String filePath = args[1];
if ( (args[0]).equals("-x") )
109
int n = 0;
try {
while (n<=1000) {
if (count > 0) {
out.write(buffer, 0, count);
n++;
* representing complex numbers and because it reallocates memory for the
try {
makeSpectrum(out, sId);
*
*****************************************************************
********/
System.out.println("OK");
Logger.getLogger(Xtract.class.getName()).log(Level.SEV
ERE, null, ex);
int N = x.length;
out.close();
// base case
} catch (IOException e) {
if (N == 1)
System.exit(-1);
if (N % 2 != 0) {
});
listeningThread.start();
};
CLASE FFT
package xtract;
Complex[] q = fft(even);
// fft of odd terms
110
return y;
Complex[] r = fft(odd);
// combine
if (x.length != y.length) {
}
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
c[i] = a[i].times(b[i]);
int N = x.length;
// take conjugate
return ifft(c);
y[i] = x[i].conjugate();
111
* 0.10288019294318276 + 4.033186818023279E-18i
b[i] = ZERO;
* d = convolve(x, x) ------------------0.001211336402308083 -
}
* 3.122502256758253E-17i -0.005506167987577068 5.058885073636224E-17i
* -0.044092969479563274 + 2.1934338938072244E-18i
0.10288019294318276 -
* 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
<?php
require_once('php/blocks.php');
$target_dir = dirname(__FILE__).'/uploads/';
* 0.07910192950176387 0.7233322451735928
0.1659819820667019
if (move_uploaded_file($_FILES["audiofile"]["tmp_name"], $target_file)) {
// Problema de memoria
//$tag = id3_get_tag( $target_file, ID3_BEST );
$title = $_FILES['audio-file']['name'];
* 0.08688005256493803i
$db = getConnection();
*
$stmt = $db->prepare("INSERT INTO
songs(title,size,filename) VALUES (?,?,?)");
* + 2.6599344570851287E-18i 0.7233322451735928
0.1659819820667019 -
}
}
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