Se realiza el conteo de cada tecla de un instrumento para una canción desde un archivo.midi
# Pmf de notas de un instrumento
# desde archivo midi
import numpy as np
import matplotlib.pyplot as plt
import mido as md
# INGRESO
archivomid = 'el_aguacate.mid'
# instrumento
canal = 'channel=3'
# para pmf
tramos = 100
# PROCEDIMIENTO
# Abre archivo midi
partitura = md.MidiFile(archivomid)
# un instrumento, tabla de notas
transcurrido = 0
deltat = 0
accion = 'note_on'
tabla = []
for dato in partitura:
linea = str(dato)
parte = linea.split(' ')
if (parte[0]==accion):
valor = parte[4].split('=')
tiempo = float(valor[1])
transcurrido = transcurrido + tiempo
deltat = deltat+tiempo
if (parte[1]==canal):
valor = parte[2].split('=')
nota = int(valor[1])
valor = parte[3].split('=')
velocidad = int(valor[1])
tabla.append([nota, velocidad, tiempo, deltat])
deltat=0
tabla = np.array(tabla)
m = len(tabla)
notas = tabla[:,0]
x, cuenta = np.unique(notas, return_counts=True)
print(x)
print(cuenta)
frelativa = cuenta/np.sum(cuenta)
acumulada = np.cumsum(frelativa)
deltax = 1
# GRAFICAS
plt.subplot(211)
plt.bar(x,frelativa, width=deltax*0.8, align='edge')
plt.title('notas, '+ archivomid + ' , ' + canal)
plt.ylabel('pmf')
plt.subplot(212)
plt.plot(x,acumulada,'m')
plt.ylabel('cdf')
plt.show()

