jueves, 29 de mayo de 2014

[INVESTIGACIÓN] Finalización de un producto entregable

Para la última semana se entrega al menos uno de los cuatro productos entregables propuestos:
  • Tesis: Debe estar registrado en la facultad y enviado a revisión.
  • Póster: Presentado o enviado a un evento académico.
  • Artículo: Enviado a una revista o congreso.
  • Presentación: De tipo abstract-only para un congreso.
De los 4 productos se tienen 2 posibles: tesis (la misma que se ha redactado desde inicio del curso) y un póster (presentado en la exposición de pósters del aniversario del CIIDIT).

Las últimas correcciones se han hecho a la tesis aún a la espera de completar las pruebas, marcando en rojo lo que falta (datos no reales y partes de la redacción que podrían modificarse dependiendo de los resultados).

El poster fué la primera opción (además de tesis) que me propuse a realizar. Basado en mi trabajo de tesis, el 22 de mayo de 2014 se presentó en el CIIDIT en un concurso de posters por el 6to aniversario del mismo. Durante el evento los jueces y algunos otros participantes me dieron valiosa retroalimentación sobre mi proyecto, así como diferentes enfoques a los cuales se puede destinar en un futuro.

miércoles, 21 de mayo de 2014

[INVESTIGACIÓN] Finalización de la tesis

Para esta semana la tarea era terminar los pendientes de tesis para poder ser enviada a revisión.

Durante el semestre modifiqué un documento donde escribía los pendientes, tanto comentarios de mi asesora como notas personales, al día de hoy he cubierto gran parte de esas notas.

También utilizé un documento donde anotaba los cambios realizados en la implementación para posteriormente documentarlos en la tesis.

Lo que se envía será solo un borrador sin los experimentos reales, esperando retroalimentación de los revisores sobre el contenido.

Avance de proyecto

Por ahora no hay avance, he dedicado mayor parte del tiempo en acabar la redacción de tesis, poster y presentación, pero se espera, como se mencionó en la entrada pasada, continuar con las pruebas reales para terminar la redacción de tesis por completo (tomando en cuenta la retroalimentación que los revisores llegaran a dar).

viernes, 16 de mayo de 2014

[INVESTIGACIÓN] Preparación de un artículo

Para esta semana se encargó investigar sobre congresos y revistas de ciencias que acepten trabajos de cualquiera siempre que sean originales y hablen de alguno de los temas que se cubren.

Seleccioné el Congreso Internacional en Ciencias Computacionales (CiComp) el cual celebra en la ciudad de Ensenada, B.C. México del 5 al 7 de Noviembre de 2014. Enlace al sitio.

CiComp acepta trabajos en diferentes áreas de ciencias computacionales, desde ingeniería de software en general hasta temas complejos como inteligencia artificial.

Para que el artículo sea aceptado debe cumplir una serie de requisitos:
  • Estar escrito en idioma inglés (Si se quiere formar parte de la publicación Research in Computer Science (ISSN 1870-4069)).
  • Máximo 8 páginas (4 si se trata de un poster).
  • Cumplir con el formato LNCS. Enlace al sitio.
Mi artículo por ahora tiene 16 páginas y las figuras son directamente las que utilizo en la tesis, aún tienen colores lo cual no es permitido según el formato LNCS, igualmente los cuadros les falta el formato especificado.

Avance de proyecto

Esta semana no hay avance de proyecto, para las próximas semanas se espera terminar las pruebas de rendimiento.

viernes, 9 de mayo de 2014

[INVESTIGACIÓN] Preparación de un póster

Para esta semana se realizó un póster de investigación basado en la tesis.

Se utilizó el paquete "a0poster" de LaTeX.

La información utilizada para el póster se tuvo que resumir a mencionar los procedimientos y la metodología utilizada para el desarrollo del proyecto, con la intención de dar a conocer la forma en que éste funciona. Al término de la etapa de experimentación quizá se incluyan las tablas con los datos obtenidos (si es que se tienen antes del 22 de mayo).

Avance de proyecto

Esta semana no hay avance de proyecto.

jueves, 1 de mayo de 2014

[INVESTIGACIÓN] Preparación de una presentación

Para esta semana la tarea era generar una presentación con la información que tenemos en la tesis hasta ahora.

Se utilizó el paquete "Beamer" de LaTeX que sirve para hacer este tipo de documentos.

Para hacer la presentación se copió la información actual en la tesis y una vez que ya era compilable se procedió a resumir la información.

También para esta semana se encargó tener un borrador de tesis, por lo que me di a la tarea de terminar el resto de redacción que me faltaba, aunque aún existen algunas figuras pendientes, partes de redacción que aún no se definen hasta que se llegue a la siguiente fase del proyecto, en este caso terminar las pruebas y aún falta agregar algunas referencias y modificar algunas que me parecen poco convincentes.

Avance de proyecto

Durante este periodo de tiempo se trabajo en modificar la rutina de análisis que anteriormente se había mencionado que era poco eficiente.

Se modificaron algunos aspectos mínimos para agilizar el proceso, como por ejemplo; antes se procesaban posibles patrones que contenían diferencias las cuales inutilizaban esos datos, ahora se detectan esas diferencias antes del análisis y se descartan, ahorrando varios minutos de procesamiento.

Adicionalmente a estas modificaciones, se reescribió la rutina de análisis por completo en el lenguaje Java. En un principio la carga de datos era muy pesada causando errores de falta de memoria. La solución fue lanzar el subproceso con parámetros específicos que aumentan la capacidad de la máquina virtual de Java:

Al ejecutar con estos parámetros, la máquina virtual se ejecuta con 2 GB de memoria y en modo 64 bits.

El análisis pasó de tardar de 3 a 4 minutos por canción a 15 a 20 segundos por canción.

Al tener buenos tiempos de ejecución ahora puedo continuar con la fase de transición entre pistas y por lo pronto pensar en métodos para seleccionar las pistas a procesar, probablemente se emplee un heurístico que se base en las pistas recientes. La intención de ésto es porque aunque la velocidad de análisis es buena, cuando en el directorio haya demasiadas pistas probablemente el procesamiento tardará más de lo que tarde la pista en finalizar.

jueves, 10 de abril de 2014

[INVESTIGACIÓN] Conclusiones y trabajo a futuro

Para esta semana se pidió redactar la parte de conclusiones y trabajo a futuro. Debido a que las conclusiones aún no son ciertas del todo, marqué en rojo aquellas partes de la discusión que pueden ser cambiadas o removidas.
  • Se redactó un resumen del proyecto en general, abarcando principalmente la implementación de software y explicando lo que hace (tomando en cuenta que aún está en desarrollo).
  • Se explicaron algunos resultados de las pruebas y las conclusiones a las que se llegó con esos resultados, mencionando lo que se podría hacer para mejorar.
  • Se agregó la parte del trabajo a futuro, donde se mencionan algunas cosas que no se lograron durante el desarrollo propuesto pero que siguen en planes para implementar en un futuro.
Avance de proyecto

Durante esta semana se trabajo en mejorar algunos aspectos de funcionamiento del programa, específicamente analizar algunos errores que se generan a veces y modificar algunas rutinas que causan que el programa se quede congelado.

Para evitar los congelamientos repentinos, cambié algunas rutinas y las separé de la implementación principal. Ahora en lugar de ejecutar una parte del programa en un hilo, ejecuto un script en un subproceso distinto.

Aún ejecuto un hilo que espera una respuesta del subproceso, sin embargo, es un hilo que tiene poca carga, por lo tanto no causa congelamientos.

Una ventaja es que la lógica del script es que puede ser implementada en un lenguaje distinto a Python, lo cual puede causar una mejora de rendimiento, la cual es necesaria ya que el procesamiento tarda varios minutos actualmente en terminar, si deseo alcanzar la meta de procesamiento en tiempo real, será necesario hacer algo al respecto con ello.

En cuanto a los errores que se detectaron, parece ser que la causa es el procesar un archivo el cual no presenta patrones reconocibles. Como solución rápida, al detectar el error, en lugar de regresar la pista siguiente obtenida mediante el análisis, se regresa una pista al azar diferente a la actual.

Normalmente cuando no hay errores, se obtiene una lista de reproducción constante como la siguiente:

La primera parte corresponde al archivo a reproducir, la segunda dice la forma en que se obtuvo ya sea mediante el análisis (process) o mediante la selección al azar (random).

Cuando sucede el error ésto es lo que internamente sucede en el programa:

Se puede observar que el archivo conflictivo es "Qtam1t-120.wav", ya que después de reproducirse causa un error.

Por ahora continuaré trabajando en mejorar el análisis y hacerlo más rápido, muy probablemente cambie el lenguaje de programación exclusivamente para esta parte (una vez que ya sea eficiente).

También analizaré los datos de este archivo conflictivo y dar una solución más viable.

El desarrollo de los efectos de transición y la interfaz gráfica aún están en proceso.

miércoles, 2 de abril de 2014

[INVESTIGACIÓN] Análisis de experimentos

Para esta semana se redactó parte de lo que será la sección de análisis de experimentos la cual consiste en verificar los resultados de las evaluaciones obtenidas.

Cada prueba se analiza por separado y se explican las variables de cada prueba, así como el por qué se decidió utilizar tales variables. También se explica el por qué se realiza ese experimento y la intención de saber sus resultados.

Los análisis finales se redactarán una vez concluidas las pruebas, en ellos se explicará el motivo del comportamiento de los resultados obtenidos.

Avance de proyecto

Durante esta semana se trabajó en la selección automática de pistas. En la entrada anterior se explico que para encontrar patrones se analizan coincidencias de intensidades y se almacenan los tiempos y la cantidad de coincidencias.

Para seleccionar una pista de todas las existentes primero se analiza para cada una sus patrones y se obtienen sus tiempos y los patrones que puedan coincidir.

En cada lista se tienen los patrones compatibles con la pista actual y se procede a encontrar en cada lista un patrón que tenga la cantidad máxima de coincidencias posibles pero el tiempo de inicio mínimo posible.

Por cada lista se obtiene un candidato de tiempo de inicio y se guarda su número de coincidencias. Se evalúa de la misma forma con el candidato de cada pista y de esa manera se obtiene una sola.

A continuación se muestra en el video una prueba de la reproducción y la selección de pistas de forma automática:

video

Como se puede observar en el video se nota un patrón de reproducción con las pistas siguientes en orden: Stam1h-120.wav > Fill1s-120.wav > Qtam1t-120.wav, siendo la cuarta pista siempre variable.

Debido a que a veces se tiende a presentar este tipo de repetición, se agregó un factor aleatorio para cambiar a una pista compatible. Sin embargo es posible que en el futuro se cambie por una lista tabú, o algún método más eficiente en la selección de pistas.

Por ahora se genera una reproducción basada en la compatibilidad de patrones entre pistas y no una lista de reproducción en sí.

Para el resto del proyecto se trabajará en mejorar aspectos de este algoritmo y en producir una transición suave entre pistas.

También para esta última etapa se empezarán con las pruebas, inicialmente con ciertas pruebas de rendimiento, una vez que el proyecto esté completo se concluirán con las pruebas de rendimiento restantes y finalmente se realizarán las pruebas con usuarios.

jueves, 27 de marzo de 2014

[INVESTIGACIÓN] Reportaje de resultados experimentales

Estas dos semanas se utilizaron para generar el reporte de resultados de los experimentos.

Para las pruebas de rendimiento se generaron tres cuadros.
  • El primer cuadro describe los resultados de velocidad de procesamiento, tomando en cuenta el sistema operativo y la cantidad de procesos que hay corriendo.
  • el segundo cuadro describe la eficiencia algorítmica, que consiste en analizar los resultados de la generación automática de listas con una lista predeterminada, se toman en cuenta criterios como un umbral de reconocimiento y la cantidad de bandas en la frecuencia.
  • el tercer cuadro solo es una prueba de funcionamiento, se corre todo el programa y se miden criterios del sistema operativo como la memoria o porcentaje de cpu utilizado.
Para las pruebas con usuarios se generaron 3 gráficas circulares. Las evaluaciones son: Muy Bueno, Bueno, Regular, Malo y Muy Malo.
  • La primera gráfica describe el grado de aceptación de los usuarios en cuanto a la generación automática de listas contra su propio criterio.
  • La segunda gráfica describe el nivel de aceptación de los usuarios para los efectos de transición entre pistas.
  • La tercera gráfica describe la facilidad con que los usuarios realizaron sus tareas.
Tanto las gráficas como los cuadros están en archivos independientes, la idea es generar un script que corra estas pruebas y modifique los archivos correspondientes para evitar escribir a mano cada uno.

Avance de proyecto

Durante este tiempo se trabajo en el reconocimiento de patrones al grado de encontrar los instantes de tiempo candidatos entre ambas pistas y la cantidad de coincidencias de patrón en ese instante de tiempo.

  • En la captura se muestra en la primera fila el nombre del archivo a comparar.
  • En las filas siguientes se tiene los instantes de tiempo en que se encuentra un patrón.
    • Las filas están ordenadas de mejor a peor candidato a ser un patrón.
    • Al mismo tiempo en cada fila se ordenan los instantes de tiempo del candidato de mejor a peor.
Para seleccionar un candidato, debo de calcular en cada uno de ellos, un patrón con un instante de tiempo lo suficientemente grande para dar buen tiempo de reproducción al archivo actual pero lo suficientemente amplio para dar la mejor calidad a la hora de hacer la transición entre pistas.

Para las siguientes semanas se trabajará en realizar la selección de candidato y con esto tendré la generación automática de listas. Una vez terminado esto, iniciaré con los efectos de transición.

jueves, 13 de marzo de 2014

[INVESTIGACIÓN] Diseño experimental

En esta semana se trabajó con el siguiente capítulo de tesis llamado diseño experimental. Consiste en describir los procesos de evaluación para el proyecto.

Decidí hacer dos tipos de pruebas: pruebas de rendimiento y pruebas con usuarios.

Las pruebas de rendimiento consisten en correr el programa bajo ciertas circunstancias y analizar su comportamiento, son las siguientes:
  • Velocidad de procesamiento: Se hace una prueba de velocidad de procesamiento mientras se reproduce un archivo.
  • Presición algorítmica: Se evalúa que tan acertado es el programa al generar datos.
  • Eficiencia de ejecución: Se evalúan aspectos de rendimiento en cuanto a la plataforma.
La intención es correr estas pruebas en las plataformas distintas plataformas disponibles en distintas circunstancias de software y hardware.

Por otra parte, las pruebas con usuarios solo son encuestas de retroalimentación, son las siguientes:
  • Generación automática de listas de reproducción: El usuario evalúa presición y calidad.
  • Transición y mezclado entre pistas: El usuario evalúa que tan bueno o malo es el efecto de transición y mezclado de pistas.
  • Interfaz gráfica: El usuario evalúa la usabilidad del software.
Avance de proyecto

Durante esta semana se trabajo en el reconocimiento de patrones y se modificaron cosas menores.

Para la detección de patrones utilizo la información obtenida de las pistas y busco coincidencias numéricas. Una vez encontradas todas las coincidencias se procede a comparar rangos de valores para intentar agrupar patrones.

Para hacer una prueba utilicé esta pista:

120 BPM

La pista de audio es muy constante, aunque las intensidades varían un poco el tiempo entre picos es similar, casi 2 picos por segundo dando un tempo de 120 BPM aproximado.

Al correr el programa de detección de patrones éste es el resultado:

Como se puede observar el resultado es una serie de listas con valores. El primer número fuera de la lista representa la posición temporal, por ahora manejo un índice. Los valores de la lista son los graficados anteriormente.

La primera fila contiene todos los valores graficados en orden. La cual es útil para analizar el orden de los patrones.

El resto de filas se organizan por patrones basados en similitudes.

Los siguientes datos describen un patrón con los valores [14070, 120]:

1 [14070, 120]
3 [14070, 120]
5 [14070, 120, 18760, 120]
9 [14070, 120]
11 [14070, 120, 28140, 120, 18760, 120]
17 [14070, 120, 18760, 120]
21 [14070, 120]
23 [14070, 120]
25 [14070, 120]
27 [14070, 120]
29 [14070, 120, 18760, 120]
33 [14070, 120, 18760, 120]
37 [14070, 120]
39 [14070, 120]
41 [14070, 120]
43 [14070, 120, 11260, 120, 18760, 120]
49 [14070, 120, 18760, 120, 28140, 120, 18760, 120, 18760, 120, 18760]

Por otra parte los datos valores describen un patron invertido:

2 [120, 14070]
4 [120, 14070]
6 [120, 18760]
8 [120, 14070]
10 [120, 14070]
12 [120, 28140]
14 [120, 18760]
16 [120, 14070]
18 [120, 18760]
20 [120, 14070]
22 [120, 14070]
24 [120, 14070]
26 [120, 14070]
28 [120, 14070]
30 [120, 18760]
32 [120, 14070]
34 [120, 18760]
36 [120, 14070]
38 [120, 14070]
40 [120, 14070]
42 [120, 14070]
44 [120, 11260]
46 [120, 18760]
48 [120, 14070]
50 [120, 18760]
52 [120, 28140]
54 [120, 18760]
56 [120, 18760]
58 [120, 18760]

El resto de datos también describen patrones con valores variados pero para muchos de esos valores ya se describió un patron que incluye al menos una vez su posición temporal.

Con la posición temporal y los datos obtenidos es posible calcular el inicio y final de una pista, los cuales son útiles para generar una transición entre pistas.

Para las siguientes semanas se trabajará en mejorar el algoritmo y se iniciará con las primeras pruebas en la generación de pistas de reproducción basadas en simples comparaciones de datos y el tiempo de separación entre picos.

jueves, 6 de marzo de 2014

[INVESTIGACIÓN] Implementación de la solución propuesta

Durante esta semana se continuó con la redacción de la solución propuesta.

En el capitulo se tienen 4 secciones:
  • Diseño e implementación: Se habla del diseño de interfaz y del funcionamiento del software.
  • Obtencion de información relevante: Se habla de la información obtenida de las pistas y del analisis que se realiza con esta.
  • Generación de listas de reproducción: Describe los algoritmos utilizados para generar listas de forma automática.
  • Transición inteligente entre pistas: Describe la forma en que se hace la transición entre pistas y como funciona.
Se agregaron figuras temporales que representan ejemplos gráficos de la implementación y diagramas de funcionamiento.

Avance de proyecto

En ésta semana no hubo mucho avance en cuanto a código pues sigo experimentando con métodos que me permitan comparar la información de forma eficiente y buscar una lógica de comparación entre los datos.

Por otra parte ahora se toma en cuenta otro parámetro para la obtención de información. Ahora se toman en cuenta rangos mayores y menores a una variable dada, dependiendo del rango son los datos que se obtienen.

En uno de los sonidos del post anterior este era el resultado de sus datos:

Ahora los resultados son así:

Aparentemente ahora la gráfica muestra cambios con respecto al ritmo más parecidos a los de la pista.

miércoles, 26 de febrero de 2014

[INVESTIGACIÓN] Diseño de la solución propuesta

Durante la semana se trabajó en diseñar la estructura del capítulo de solución propuesta. En un inicio se tenía un capítulo tentativamente exclusivo para la solución propuesta, pero dado a la cantidad de información que se describe, he decidido dividir en dos capítulos, uno donde se muestra la metodología y otro donde se muestra la implementación final.

Para el capítulo de metodología decidí abarcar conceptos básicos como:
  • La mención de las herramientas utilizadas para el proyecto, en este caso introducir el lenguaje de programación utilizado y describir módulos y librerías que utilizaré para lograr el objetivo.
  • Hablar de las fases que habrá en el proyecto: 
    • Fase de procesamiento, la cual es donde se lleva a cabo la extracción de información de las pistas de audio.
    • Fase de clasificación de datos, donde la información procesada es clasificada en relación a las pistas de audio.
Para el capítulo de implementación, llamado "Solución propuesta", es en donde en realidad se describen aspectos de diseño e implementación de software:
  • Ya definidas las fases en el capitulo de metodología, se procede a mencionar su implementación describiendo los algoritmos utilizados.
  • Adicionalmente se agrega una sección donde se describen los datos que se procesan y el porqué se optó en guardarlos en ese formato, además de mencionar la forma en que se realiza la comparación y clasificación de los mismos.
Avance de proyecto

En esta semana se trabajo en la modificación de la interfaz y acoplarla para la lectura de múltiples archivos. Además de una versión inicial de lo que en un futuro será un mezclador inteligente y un generador de listas de reproducción.

Por ahora todo funciona en forma aleatoria, pues la parte de clasificación aún no está del todo desarrollada, sin embargo ya es posible obtener los datos de la pista a ser clasificados.

Para la prueba de esta semana se utilizaron seis archivos de sonido en formato WAV, a continuación se muestran junto con sus datos de procesamiento.







Estos datos de procesamiento son casi constantes a su sonido, con pequeñas diferencias entre reproducciones.

La idea es modelar algún algorítmo que tome los datos actuales de una pista y calcule cual de las pistas restantes es la mejor opción de acuerdo con el ritmo.

Una aproximación de lo que podría suceder con este algoritmo sería algo como lo siguiente:

video

El objetivo para la siguiente semana es lograr desarrollar algúna rutina que analice los datos de los archivos y logre regresar la mejor opción de pista a reproducir. Con lo que se podría tener un prototipo del generador de listas de reproducción.

jueves, 20 de febrero de 2014

[INVESTIGACIÓN] Resumen de trabajos relacionados relevantes

Para esta semana se realizó un cuadro comparativo de los trabajos relacionados seleccionados la semana pasada y se resumió en pocas palabras como se relacionan con el proyecto de tesis.

Para ello se seleccionó de los trabajos aquellos que pudieran representar una alternativa, no a la aplicación de lo que se investiga sino al área de investigación que se estudia.

Para el cuadro comparativo se tomaron en cuenta 7 criterios:
  • Procesamiento de señales: Indica si realiza alguna clase de manipulación a una señal de audio.
  • Detección rítmica: Indica si detecta alguna forma de rítmo para su funcionamiento.
  • Clasificador de patrones: Indica si es posible clasificar los datos analizados.
  • Procesamiento en tiempo real: Indica si es posible realizar esto mientras se reproduce el contenido.
  • Datos preprocesados: Indica si es necesario leer algún archivo o base de datos para su funcionamiento.
  • Mezcla inteligente de audio: Indica si el proyecto está pensado para generar mezclas de sonido. En este caso esta también es una de las intenciones del proyecto de tesis.
  • Listas de reproducción autogeneradas: Indica si el proyecto está pensado para autogenerar listas en base a algúna circunstancia. Ésta es una de las intenciones del proyecto.

Avance de proyecto

Durante esta semana se siguió trabajando en la detección de tempo pero ahora de forma analítica.

Decidí analizar la información tal y como la obtenía anteriormente con unas pequeñas modificaciones de tiempo para mejorar la presición.

Los datos observados no son el tempo tal cual se defíne, pero igualmente pueden ser funcionales para mis objetivos.

Esta gráficas muestran la cantidad de BPM contra el tiempo de duración de la pista en segundos.


Como se puede observar, estas gráficas muestran valores algo constantes, se puede ver a simple vista que los valores rondan los 450, 600 o cerca de los 1000 BPM, siendo los de 600 predominantes.

Las pistas utilizadas fueron "Queen of Apology" y "Mine for Life" del grupo The Sounds, canciones que son del género New Wave y comparten ciertas cualidades en los datos que se analizaron.

La siguiente gráfica es de los datos obtenidos al analizar una versión Dubstep de la canción "Rock You"

Se puede observar que presenta valores aproximados a los 400 y 900 BPM, algo distintos a los valores de las gráficas anteriores.

Por ahora todo apunta a que es hora de proceder a la segunda etapa que consiste en tratar de comparar pistas de sonido y tratar de acomodarlas en un orden basado en estos datos. Igualmente continuaré mejorando la presición con que se toman.

jueves, 13 de febrero de 2014

[INVESTIGACIÓN] Búsqueda y clasificación de trabajos relacionados


En esta semana se realizó una búsqueda de artículos y trabajos relacionados al tema de la tesis.

Los trabajos encontrados son descritos en la siguente tabla junto a la base de datos a la que pertenecen y las palabras clave utilizadas para encontrarlos.

TituloBase de datosPalabras clave
Estimating tempo, swing and beat locations in audio recordingsIEEE Xplore Digital Librarymusic bpm detection
Large-scale cover song recognition using hashed chroma landmarksIEEE Xplore Digital Librarymusic player pattern
Towards a Class-Based Representation of Perceptual Tempo for Music RetrievalIEEE Xplore Digital Librarytempo
Music tempo estimation and beat tracking by applying source separation and metrical relationsIEEE Xplore Digital Librarytempo
Real-time perceptual tempo estimation for music signal based on envelope autocorrelationIEEE Xplore Digital Librarytempo
A system for the automatic segmentation and classification of chord sequencesACM Digital Librarypattern recognition sounds
Automatic and instant ring tone generation based on music structure analysisACM Digital Librarypattern recognition sounds
Tempo induction algorithm in MP3 compressed domainACM Digital Librarybpm detection music
A tempo-sensitive music search engine with multimodal inputsACM Digital Librarybpm detection music
SVR-based music mood classification and context-based music recommendationACM Digital Librarybpm detection music
Using quadratic programming to estimate feature relevance in structural analyses of musicACM Digital Librarybpm detection music
Rhythm pattern representations for tempo detection in musicACM Digital Librarybpm detection music
Toward segmentation of popular musicACM Digital Libraryrhythm detection audio
Automatic Recognition and Matching of Tempo and Phase of Pieces of Music, and an Interactive Music PlayerGoogle Patentsmusic bpm recognition
System and method of bpm determinationGoogle Patentsmusic bpm

Avance de proyecto

Durante etstas semanas he estado analizando las frecuencias provenientes de un archivo wav. Esta vez decidí utilizar la parte real de la transformada rápida de Fourier pues es la que denota una mayor intensidad visualmente en la gráfica a la hora de detectar el ritmo.

He decidido dividir la gráfica generada en segmentos de 16 bloques que facilitan un poco la tarea visual de ver una relación entre el ritmo que percibo y la gráfica.

video

Se agregó el tiempo restante de la pista solo para motivos informativos.

Para ayudar un poco más se agregó una escala temporal para cada bloque que consiste en los valores de cada uno imprimidos en la terminal con un color que determina su intensidad siendo azul de baja intensidad y rojo de alta intensidad, pasando por verde y amarillo.

También se trató de analizar (sin mucho éxito) el ritmo medido en BPMs (beats per minute) o pulsos por minuto mediante el procesamiento de las frecuencias. El ritmo obtenido se puede ver en la esquina inferior derecha del video. En un principio se obtenían los pulsos en un segundo y se multiplicaban por 60 para dar un aproximado. Despues lo que se trató de hacer fue calcular el tiempo entre pulsos y calcular directamente una aproximación. De ambas formas el cálculo aveces es bueno pero la mayor parte de las veces falla.

Las metas son obtener un ritmo aproximado de mayor presición, en base a eso obtener una predicción de pulsos para facilitar el análisis y finalmente comparar ritmos entre canciones y analizar similitudes.

jueves, 6 de febrero de 2014

[INVESTIGACIÓN] Identificación y estructuración de antecedentes

Durante esta semana se encargó buscar antecedentes con respecto a nuestro tema de tesis.

Para ello me puse a investigar sobre cómo son y cual es la forma en que se redactan los antecedentes.

En pocas palabras, los antecedentes se forman con la literatura existente y trabajos relacionados que hablan de conceptos clave en mi tema. Los cuales se remarcan para dar énfasis a lo que se quiere poner atención.

En mi caso, mi tema habla sobre manipulación de sonido y reconocimiento de patrones en señales por lo que he decidido dividir mis antecedentes en dos subtemas principales:
  • Procesamiento de señales: Explico lo básico sobre la forma en que se codifica una señal y agrego subtemas donde explico el significado de algunos conceptos clave relevantes.
  • Reconocimiento de patrones: Explico en forma resumida que es y en que consiste el reconocimiento de patrones y algunos métodos.

A demás de un subtema llamado Conceptos generales, donde explico detalles muy básicos sobre los archivos de sonido y su funcionamiento.

Al principio del tema agregué una breve descripción a modo de introducción hablando sobre la forma en que el humano percibe las ondas de sonido.

Con esos conceptos se pretende abarcar lo más importante que se verá a lo largo del tema.

Avance de proyecto

En esta semana realicé cambios al programa, esta vez ademas de analizar las ondas de sonido tambien analizo frecuencia contra poder.

El programa tiene cuatro gráficas, la primera es la misma de la vez pasada, en las otras tres se analiza la frecuencia contra el poder mediante el uso de la transformada rápida de Fourier, un algoritmo muy utilizado en el tratamiento digital de señales, proporcionado por la librería numpy.

En la segunda gráfica se analiza la parte real de la transformada, en la tercera se analiza la parte imaginaria y en la cuarta es la suma de ambas.

A continuación se muestra un video del programa corriendo:

video

jueves, 30 de enero de 2014

[INVESTIGACIÓN] Hipótesis y objetivos

Para esta semana se encargó realizar una versión inicial de la hipótesis y objetivos de la tesis.

Hipótesis

Para poder formular mi hipótesis fue necesario observar el panorama en el cual centré mi tema, en este caso formulé preguntas que me ayudaron a ver el problema:
  • ¿Qué me llevó a elegir el tema?
  • ¿Qué propones para el tema?
  • ¿Para qué serviría la propuesta?
Recordando un poco el tema de mi tesis es "Sistema de Mezclado de Audio basado en Reconocimiento de Patrones Sonoros" por lo que pretendo trabajar con la manipulación de archivos de sonido así que la respuesta de la primer pregunta es sencilla; he tenido experiencias con reproductores multimedia y he llegado a la conclusión de que se puede hacer algo más con ellos.

Para la segunda pregunta la propuesta es una herramienta que mezcle las pistas de audio de tal forma que se produzca una reproducción sin pausas entre pistas.


Sabiendo que mi meta principal es crear una herramienta o al menos la base de ésta, puedo saber que tal herramienta será para que cualquiera pueda usarla para disfrutar de una mejor experiencia de reproducción de audio, lo que contesta la tercera pregunta.


Ahora, en mi introducción (aún temporal a este momento) menciono que existe un momento cuando escuchamos música en que nos gustaría que la pista de audio actual no acabara. Lo menciono como un estado de armonía, que sería algo como un momento de paz y concentración.


Para formular la hipótesis me hice la siguiente pregunta:

¿Como evitar la interrupción de la sensación que produce escuchar una pista de sonido?

Mi hipótesis formulada sería:

Hay que evitar la interrupción de la pista para dar una sensación de continuidad, pues las personas prefieren escuchar una sola melodía que siga un ritmo sin interrupción a escuchar varias melodías con variaciones en su ritmo. 

Objetivos

Una vez que tengo la hipótesis puedo pasar a formular los objetivos. Los objetivos hay de dos tipos, los generales y los específicos. 

El objetivo general es aquel que describe la finalidad del proyecto y la propuesta que se hace. Los objetivos específicos dan a conocer lo que se tendrá que realizar antes de poder llegar al objetivo principal.


En este caso el objetivo general es la creación de una herramienta de análisis de patrones de sonido para una reproducción de medios sin pausas.


Los objetivos específicos son:

  • Obtener datos sobre el ritmo de una pista para su comparación. Con estos datos se puede buscar una pista candidata a ser reproducida si presentan ritmos similares.
  • Lograr una mezcla de fragmentos de sonido cuyos ritmos tienen un gran nivel de similitud. De esta manera lograr acoplar el inicio de una pista y el final de otra de tal manera que se produzca una sola pista.
Avances de proyecto
Durante esta semana trabajé en crear un analizador sonido.

Utilicé la librería pyaudio para poder reproducir el archivo wav desde el programa y pylab para graficar los fragmentos de sonido.


Durante la reproducción de sonido la ventana muestra una gráfica que muestra los fragmentos reproducidos conforme avanza la pista.


Con los fragmentos obtengo las ondas que grafico las cuales me servirán posteriormente para analizarlas y obtener datos importantes como la velocidad rítmica que me será muy útil a la hora de comparar fragmentos entre pistas.

Liga al repositorio del proyecto: https://github.com/victoralex911/proyecto-tesis


Referencias:

sábado, 18 de enero de 2014

[INVESTIGACIÓN] Planteamiento del tema y preparación de la plantilla

En este último semestre seleccioné el módulo de investigación, en el cual se llevará acabo un proyecto de investigación científica y/o desarrollo tecnológico con el cual se pretende realizar una tesis de licenciatura para la acreditación de la materia.

Todo esto bajo la supervisión de la Dra. Elisa Schaeffer.

Durante 16 semanas se llevará acabo una reunión inicial y una reunión final, cada una con un valor del 10% de la calificación correspondiente a la semana, dando el 20% de la calificación total. Durante cada semana se realizará la parte que corresponde al avance algorítmico (40%) y también al avance escrito (40%). Dando un total de 160 puntos, de los cuales se deben acreditar 112 puntos correspondientes al 70% de la calificación.

Para acreditar el módulo es necesario tener 3 cosas:
  • Blog: En el cuál se reportan los avances semanales.
  • Dropbox: En el que se tiene una carpeta compartida con los archivos LaTex correspondientes a la tesis en desarrollo.
  • Repositorio: En donde se encuentra el código del proyecto.

Evidencia de la primera semana
La primera reunión se llevó acabo el día viernes 17 de enero del 2014 en el cual se establecieron los requicitos necesarios para la primera semana.

Los requicitos són:
  • Asistencia a la primera reunión, creación del blog, repositorio y la carpeta copartida en Dropbox.
  • Subir al repositorio el primer avance como prueba con código.
  • Generar un esqueleto con los archivos LaTex de lo que será la tesis.
  • Asistencia a la reunión final.

Acerca de mi proyecto de tesis
Tuve varias opciones para un tema de tesis, despues de revisar que me convenía más decidí por el siguiente tema tentativo:

"Sistema de Mezclado de Audio basado en Reconocimiento de Patrones Sonoros"

Motivación
La mayoría de las personas escuchan música para entretenerse o relajarse mientras realizan sus actividades diarias. En cualquier lugar, siempre hay alguien escuchando música ya sea en su dispositivo móvil, computadora, en su auto, etc.

Muchas personas suelen escuchar música producida por DJ’s que generalmente se trata de mezclas de sonidos electrónicos producidos con sintetizadores. Otra característica es que su música generalmente es sin pausa, esto significa que mezclan varias pistas de audio utilizando ya sea técnicas como el Crossfading que consiste en fundir sonidos para dar continuidad a la pista, o bien utilizan una mezcla de sonidos que sigan el ritmo de la pista para que la música continue sin pausa.

Muchas aplicaciones suelen incluir un crossfade manual en el que se le configura un tiempo en el cual sucede una fundición entre la pista actual y la nueva pista de audio, disminuyendo gradualmente el volumen de la primera y aumentando el de la segunda, durante ese tiempo se corre un algoritmo de reconocimiento de patrones que trata de encontrar los primeros segundos de sonido de la segunda pista en los últimos segundos de la primera para dar continuidad. Un efecto agradable en pistas de audio grabadas en conciertos, pero una no siempre buena transición en música producida en estudios.

Meta
La meta de mi proyecto para tesis consiste en la creación de una herramienta que reconozca patrones similares en pistas de audio proporcionadas. Con tal herramienta y dependiendo de las librerías existentes se puede lograr crear aplicaciones que logren crear una transición entre pistas sin pausa para una mejor experiencia de sonido, o aplicaciones que creen mezclas de forma inteligente basándose en muestras de audio proporcionadas por el usuario.

Como lenguaje de programación decidí utilizar python por su facilidad de uso que me permitirá un desarrollo rápido y claro. Siempre con la filosofía de que quien sabe programar sabe hacerlo en cualquier lenguaje o plataforma, pues la intención es llevar esto a varias plataformas ya sea plataformas móviles o de escritorio.

Se utilizarán tentativamente las herramientas incluidas en python tales como:
  • audioop: Permite manipular información de audio.
  • wave: Una interface para el formato WAV.
  • ossaudiodev: Permite acceder a los dispositivos de sonido en sistemas Linux

Entre otras herramientas. Tambien se planea utilizar herramientas que la comunidad ha creado, pues algunas de estas librerías facilitarían mi tarea. Ya se mencionarán en siguientes entradas conforme se vayan implementando.

Trabajos relacionados
Virtual DJ: Un programa muy conocido que sirve para hacer mezclas, tiene una función llamada “Automix” que consiste en mezclar automáticamente 2 pistas ajustando el ritmo de la segunda pista para que concuerde con la primera y reajustando su ritmo de nuevo para regresarlo a su estado original, logrando un efecto de transición suavizado entre pistas.

Muxica: Una aplicación para iOS que utiliza un sistema inteligente para generar mezclas al estilo de la radio en forma de una transición suave. No puede realizar estas funciones con archivos protegidos con DRM.

Spotify: Todas las versiones de Spotify incluyen un ajuste de crossfade manual en el cual se analiza el audio para obtener una muestra que coincida entre la finalización de la primera pista con el inicio de la segunda. Perfecto para canciones grabadas en conciertos pero no muy bueno para canciones de estudio. Un valor de tiempo bajo o alto podría causar que no se consiga el efecto deseado.

Liga al repositorio: https://github.com/victoralex911/proyecto-tesis