Informe Proyecto
Estudiante |
ROL |
Josschua Machuca |
202030005-4 |
Daniela Stuven |
202030014-3 |
Diego Tobar |
201930050-4 |
Javier Zamora |
202004084-2 |
Disen˜o
y Programaci´on
Orientados a Objetos - ELO329
Profesor Paralelo
Agust´ın
Gonz´alez 1
6 de julio de 2023
´Indice
4 Definici´on de requerimientos 4
4.1 Obtenci´on de BPM Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.2 Obtenci´on de BPM Mediante archivo de audio . . . . . . . . . . . . . . . . . . . . . . . . 4
4.3 Obtenci´on de BPM mediante micr´ofono . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
5 Diagramas 5
5.1 Diagrama Caso de uso 4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
6 Resultados 7
6.1 Caso Uso: BPM manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
6.2 Caso de Uso: BPM Autom´atico (Mediante archivo) . . . . . . . . . . . . . . . . . . . . . . 8
6.3 Caso de Uso: BPM autom´atico (Mediante micr´ofono) 11
6.4 Caso de Uso: Manejo de Excel................................................................................................................. 12
6.5 Caso de Uso: delete a song.................................................................................................................. 14
6.6 Caso de Uso: Filter/Undo filter.................................................................................................................. 14
7 Referencias 14
Este proyecto se bas´o en la problem´atica para encontrar los BPM (o beats por minuto) de una o varias canciones y aparte, tenerlas guardadas en un archivo de forma ordenada.
Esto se debe a la complejidad que existe para calcular este dato manualmente y los pocos repositorios que se encuentran en internet, por lo tanto, la gente debe realizarlos manualmente buscando la informaci´on necesaria en un lugar (internet) y almacen´andola en otro (ya sea Excel o un archivo de texto simple).
En muchas ´areas relacionadas con el ´ambito musical es muy importante tener la cantidad de beats que tiene una canci´on en cierta cantidad de tiempo ya que esto indica la velocidad de la canci´on. Esto sirve desde la coordinaci´on de un grupo musical hasta ayudar a un DJ a calcular en que momento debe poner la nueva canci´on para que el ritmo siga sin romper el tempo.
A pesar de que esta informaci´on se puede sacar de forma manual, requiere mucha experiencia y ha- bilidad auditiva y de reacci´on, pues necesita que el oyente siga los pulsos de una canci´on al mismo tiempo que va contando por cierto periodo de tiempo para luego sacar la media aproximada para un minuto. Esto, por la complejidad, lo vuelve muy inexacto al depender de factores externos y humanos. Tambi´en, se pueden encontrar p´aginas de internet con bases de datos de distintas canciones que pueden llegar a ser u´tiles pero aparte de tener que buscar canci´on por canci´on y ser poco confiables ya que distintas p´aginas tienen distintos valores para cada una de ´estas, se debe buscar una forma para almacenar la informaci´on obtenida.
Para solucionar los problemas anteriormente mencionados, se realiz´o un programa escrito en lengua- je C++ con distintas funciones que facilitan la obtenci´on, organizaci´on, accesibilidad y visualizaci´on de distintas canciones con sus respectivos BPM.
Entre las funciones principales del programa se encuentran obtener el BPM de forma autom´atica de un archivo de audio seleccionado por el usuario, an˜adir el BPM obtenido, junto con la informaci´on perti- nente de la canci´on, al archivo de texto que contiene la informaci´on de las canciones que se despliega en pantalla,y la eliminaci´on del archivo de canciones indicando su numero de indexaci´on en la pantalla. Cabe destacar, que para agregar una canci´on es necesario rellenar todos los campos (BPM, artista y nombre canci´on) o este entrega un mensaje de error indicando que el ingreso fue inv´alido. Entre las funciones menos importantes y menos mencionadas dentro de este informe, se encuentra un bot´on para filtrar el archivo segu´n BPM, artista o canci´on y su respectivo bot´on para eliminar el filtro.
En cuanto a la obtenci´on de los BPM, el principal enfoque fue realizar todo el desarrollo en C++, sin embargo, no encontramos librer´ıas/c´odigos que nos permitieran realizar esto f´acilmente, por lo que buscamos otros lenguajes que nos fueran u´tiles. Python, a trav´es de una librer´ıa externa de libre uso [1] nos permiti´o obtener los BPM de una canci´on , ya sea, en formato wav o mp3, y adem´as, permite realizar una grabaci´on con el micr´ofono y crear un archivo mp3 a partir de la grabaci´on.
Posteriormente, intentamos ejecutar el script de Python dentro de C++, sin embargo, tampoco logramos hacerlo de forma exitosa, por lo que la soluci´on a este problema fue realizar un programa en Python que se ejecute en paralelo con el programa principal que se comunicara con este a trav´es de archivos .txt para
obtener el nombre del archivo del cual se obtendr´an los BPM y posteriormente colocar en otro .txt el valor obtenido para que el programa principal lo lea y lo coloque en la tabla con su artista y nombre de canci´on correspondiente. Una vez se cierra la ventana principal, tambi´en se cerrar´a el script de Python autom´aticamente.
Esta secci´on juega un papel crucial al comprender los casos de uso de nuestro proyecto y determinar el car´acter funcional necesario para garantizar su desarrollo exitoso.
Nos adentraremos en una descripci´on detallada de los casos de uso clave. Estos detalles servir´an como gu´ıa para entender como funciona el programa y los distintos usos que se le puede dar.
La primera funcionalidad que incluimos en nuestro proyecto fue la opci´on de obtener manualmente los BPM de una canci´on a trav´es de la pulsaci´on de un bot´on al ritmo de una canci´on.
Este caso est´a especialmente pensado para quienes no tienen un archivo de audio o la posibilidad de prender micr´ofono para que el programa calcule esta informaci´on autom´aticamente. Este m´etodo puede causar problemas de exactitud ya que depende de factores externos al programa, como la capacidad del oyente de reconocer las pulsaciones y/o su capacidad de “clickear” en el momento correcto.
El usuario notar´a que ha conseguido los BPM de la canci´on cuando los valores que aparezcan al lado del bot´on se estabilicen.
Esta funci´on es especial para los casos en donde se tiene un archivo de audio (ya sea .mp3, .wav o
.m4a) y necesitamos los BPM de la canci´on que contiene.
Al presionar el bot´on “ADD SONG (AUTO BPM INPUT)” el programa comienza a correr un programa python (que es el que calcula los BPM), abre el explorador de archivos del usuario para que seleccione el archivo de la canci´on y el programa copie este archivo en el directorio para luego ser utilizado en el archivo .py obteniendo la informaci´on solicitada. Finalmente guarda esta informaci´on en el archivo con los datos ya guardados y solicita informaci´on extra como el artista y el nombre de la canci´on para terminar el formato necesario para an˜adir una canci´on al archivo.
Es una funci´on creada para poder detectar a trav´es del micr´ofono un audio y luego lo guarda como
.mp3 para poder analizarlo y devolver los BPM al programa la informaci´on necesaria para poder guardar dentro del archivo de texto que se muestra en la interfaz con un sistema de casillas separando BPM, artista y nombre de la canci´on.
Este m´etodo es ideal para los casos en que el usuario no tiene el archivo de la canci´on, no lo quiere hacer de forma manual pero si puede reproducir la canci´on desde un dispositivo externo.
Figura 1: Diagrama UML de clases
Nombre: Obtener BPM mediante archivo de audio
Prop´osito: Verificar el correcto funcionamiento de la interfaz en conjunto con la l´ogica utilizada para obtener los BPM
Actores: Usuario, Sistema.
Pre-condiciones: El archivo de audio seleccionado esta en formato mp3 o wav.
Post-condiciones: El sistema obtiene correctamente los bpm y el usuario al ingresar artista y nombre de la canci´on se registra exitosamente en el sistema.
Evento: Usuario presiona el boton ADD SONG (AUTO INPUT)
Figura 2: Curso normal de eventos
Figura 3: Curso alternativo de eventos
Figura 4: Diagrama UML de Secuencia
Figura 5: P´agina principal programa indicando sector GET BPM MANUALLY
Se obtienen los bpm manualmente con el bot´on indicado en Figura 4, se presiona ADD SONG (MA- NUAL BPM INPUT). Luego, se abren la ventanas de dialogo.
Figura 6: Ventanas de di´alogo para ingresar datos/ingreso inv´alido
Se rellenan las ventanas de di´alogos con los datos solicitados, si existe algu´n campo en blanco, la operaci´on sera invalida y no se agregara a la tabla. En caso de completar los campos correctamente el resultado de la operaci´on sera a la que se muestra en la Figura 7.
Figura 7: Resultado de BPM manually e ingreso de datos al archivo
Figura 8: Terminal, ejecutando main.py ubicado en directorio del proyecto
Figura 9: P´agina principal programa indicando sector ADD SONG (AUTO INPUT)
Al seleccionar esta opci´on, se abrir´a el administrador de archivos, donde el usuario tendr´a que elegir algu´n archivo de con extinci´on mp3, mp4 o wav. Ver figura 10.
Figura 10: Administrador de archivos del sistema operativo
Figura 11: P´agina principal del programa
En el caso de que el archivo ya se utiliz´o, es decir, ya se copi´o, se debe reiniciar el programa y volver a ejecutar el main.py. Ver Figura 11.
Figura 12: P´agina principal del programa
En el caso de que el archivo no se ha analizado anteriormente, se mostrar´a por pantalla que el bpm esta siendo analizado por el .py. Ver Figura 12. Pasando el tiempo de espera del an´alisis se abrir´an pestan˜as de di´alogos, preguntando sobre el nombre del artista y la canci´on tal como se muestra en la Figura 13.
Figura 13: Ventanas de di´alogos
Figura 14: P´agina principal del programa, Muestra obtenci´on del BPM desde python
Figura 15: Resultados de la Obtenci´on del bpm por medio de un archivo de audio
Figura 16: Terminal, ejecutando main.py ubicado en directorio del proyecto
Figura 17: P´agina principal del programa indicando sector RECORD SONG AND INPUT
Una vez seleccionada esta opci´on, se indica por medio de la interfaz los efectos que indicaran que el programa esta utilizando el micr´ofono y por ende grabando el audio. Ver figura 18.
Figura 18: P´agina principal del programa indicando que el micr´ofono esta siendo utilizado
.
Finalizando la captura del audio, se abrir´an las mismas ventanas de di´alogos mostradas en la Figura
13. En estas, al igual que en los casos anteriores, el no ingresar los datos lo considerara como una operaci´on invalida. Luego de esto los efectos que indican que se esta utilizando el micr´ofono del programa volver´an a su estado inicial.
Figura 19: P´agina principal del programa muestra resultados y se indica que el micr´ofono deja de ser utilizado
En esta secci´on ya no se requiere el uso externo del main.py.
Figura 20: P´agina principal del programa (default)
En la Figura 20 en la parte superior podemos notar varias opciones tales como la pestan˜a BPM, artist o song, las cuales si se presionan ordenan de manera ascendente o descendente tomando como referencia la columna seleccionada.
Figura 21: P´agina principal del programa (ordenanda por bpm)
Los primeros datos en aparecer son los bpm sin ingresar (por esta razon en la Figura 21 parte con los datos en blanco) Pero al continuar bajando se notaran las canciones ordenadas por bpm como se muestra en la Figura 22.
Figura 22: P´agina principal del programa (ordenanda por bpm)
Figura 23: P´agina principal del programa indicando sector DELETE A SONG
Al seleccionar esta opci´on se abrir´a una ventana la cual nos pedir´a ingresar la fila a eliminar, cabe destacar que al hacer esta operaci´on el programa no debe tener activo el filtro.
Por u´ltimo, tenemos la opci´on de filtrar o eliminar un filtro ya establecido, seleccionando el bot´on FIL- TER o UNDO FILTER respectivamente, presentes en la p´agina principal. En el caso del bot´on FILTER, mostrar´a por pantalla un ventana de di´alogo (ver Figura 24) en donde se debe indicar por que palabra se desea filtrar.
Figura 24: ventana de di´alogo
[1] McFee, Brian, Colin Raffel, Dawen Liang, Daniel PW Ellis, Matt McVicar, Eric Battenberg, and Oriol Nieto. ”librosa: Audio and music signal analysis in python.¨In Proceedings of the 14th python in science conference, pp. 18-25. 2015.