You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.4 KiB
77 lines
1.4 KiB
import enum
|
|
from math import exp, log
|
|
|
|
class eNotas(enum.Enum):
|
|
DO = 1
|
|
RE = 3
|
|
MI = 5
|
|
FA = 6
|
|
SOL = 8
|
|
LA = 10
|
|
SI = 12
|
|
SILENCIO = 8
|
|
|
|
class tipoNota(enum.Enum):
|
|
##Redonda, Blanca, Negra, Corchea, Semicorchea
|
|
R = 1, 4
|
|
B = 2, 2
|
|
N = 4, 1
|
|
C = 8, 0.5
|
|
S = 16, 0.25
|
|
|
|
## Redonda, Blanca, Negra, Corchea, Semicorchea con puntillo
|
|
RP = 3, 6
|
|
BP = 6, 3
|
|
NP = 12, 1.5
|
|
CP = 24, 0.75
|
|
SP = 48, 0.375
|
|
|
|
## Silencios
|
|
XR = 1, 4
|
|
XB = 2, 2
|
|
XN = 4, 1
|
|
XC = 8, 0.5
|
|
XS = 16, 0.25
|
|
|
|
## Silencios con puntillo
|
|
XRP = 3, 6
|
|
XBP = 6, 3
|
|
XNP = 12, 1.5
|
|
XCP = 24, 0.75
|
|
XSP = 48, 0.375
|
|
|
|
class modificador(enum.Enum):
|
|
##Sostenido
|
|
SS = 1
|
|
##Bemol
|
|
BE = 2
|
|
##Ninguno
|
|
NO = 3
|
|
|
|
|
|
|
|
class Nota():
|
|
|
|
##Por defecto las notas no tienen modificador y la octava es la 4
|
|
def __init__(self, nota: eNotas, tipo: tipoNota, modificador = modificador.NO, octava = 4):
|
|
self.nota = nota
|
|
self.tipo = tipo
|
|
self.modificador = modificador
|
|
self.octava = octava
|
|
|
|
|
|
def duracion(self):
|
|
return self.tipo.value[1]
|
|
|
|
|
|
def frec(self):
|
|
|
|
expo = self.octava * 12 + (self.nota.value - 58)
|
|
|
|
if self.modificador == modificador.SS:
|
|
expo += 1
|
|
|
|
if self.modificador == modificador.BE:
|
|
expo -= 1
|
|
|
|
return int(440 * ((2 ** (1 / 12)) ** expo)) |