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.

68 lines
1.7 KiB

9 months ago
import enum
# Cada nota tiene un valor, un tipo, un modificador y una octava
# El valor es un enum de eNotas, cada nota tiene un valor de 1 a 12, yendo de Do a Si en semitonos
# El tipo es un enum de tipoNota, cada tipo tiene un valor de 1 a 48, yendo de Redonda a Semicorchea (con puntillo o no)
# El modificador es un enum de modificador, cada modificador tiene un valor de 1 a 3, siendo 1 sostenido, 2 bemol y 3 ninguno
# La octava es un entero de 0 a 8, siendo 4 la octava central del piano
9 months ago
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
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]
# Calcula y devuelve la frecuencia de la nota aplicando la formula
9 months ago
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))

Powered by INFORMATICA.FP.EDU.ES.