Informe Proyecto

Easy BPM

 


 

 

 

 

 

 

 

 

Estudiante

ROL

Josschua Machuca

202030005-4

Daniela Stuven

202030014-3

Diego Tobar

201930050-4

Javier Zamora

202004084-2

 

 

Asignatura

Disen˜o y Programaci´on Orientados a Objetos - ELO329

 

 

Profesor                                  Paralelo

Agust´ın Gonz´alez                                  1

Fecha

6 de julio de 2023


´Indice

1      Descripci´on  del  problema 3

2      An´alisis  del  problema 3

3      Disen˜o  de  soluci´on 3

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


1.         Descripci´on  del  problema

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).

 

2.         An´alisis  del  problema

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.

 

3.         Disen˜o  de  soluci´on

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.

 

4.         Definicio´n  de  requerimientos

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.

 

4.1.        Obtencion de BPM Manual

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.

 

4.2.        Obtencion de BPM Mediante archivo de audio

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.

 

 

4.3.        Obtenci´on  de  BPM  mediante  micr´ofono

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.


5.         Diagramas

 


 

Figura 1: Diagrama UML de clases

 

5.1.        Diagrama Caso de uso 4.2

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


6.         Resultados

6.1.        Caso Uso: BPM manual

 


 

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

 

 

6.2.        Caso  de  Uso:  BPM  Autom´atico  (Mediante  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


6.3.        Caso  de  Uso:  BPM  autom´atico  (Mediante  micr´ofono)


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

 

 

6.4.        Caso de Uso: Manejo de Excel


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)


6.5.       

Caso de Uso: delete a song

 

 

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.

 

6.6.        Caso de Uso: Filter/Undo filter

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

 

7.     Referencias Referencias

[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.