Conversor de Frequência para Nota Musical

from tkinter import *
import math

def freq_para_nota(freq):
notas = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B']
if freq <= 0:
return 'Silêncio'
semitons = round(12 * math.log2(freq / 440))
nota_index = (semitons + 9) % 12
oitava = 4 + ((semitons + 9) // 12)
return f"{notas[nota_index]}{oitava}"

root = Tk()
root.geometry("700x300")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Conversor de Frequência para Nota Musical")

titulo = Label(text="Conversor de Frequência para Nota Musical",
font=("Arial", "23", "bold"), bg="#103030", fg="#49e3e3")
titulo.place(relx=0.05, rely=0.05)

texto_sub1 = Label(text="Frequência (Hz):",
font=("Arial", "18", "bold"), bg="#103030", fg="#49e3e3")
texto_sub1.place(relx=0.2, rely=0.25)

Frequência = StringVar()
Frequência_entrada = Entry(textvariable=Frequência,
font=("Arial", "12", "bold"),
bg="white", fg="blue", justify='center')
Frequência_entrada.place(relx=0.5, rely=0.26, relwidth=0.35)
Frequência_entrada.focus()

def limpar():
Frequência_entrada.delete(0, END)
resultado_texto.config(text="")

def app():
try:
f = float(Frequência.get())
resultado = freq_para_nota(f)
resultado_texto.config(text=resultado)
except ValueError:
resultado_texto.config(text="Digite um número válido.")

but1 = Button(text="Mostrar", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=app)
but1.place(relx=0.1, rely=0.45, relwidth=0.25, relheight=0.1)

but_limpar = Button(text="Limpar", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=limpar)
but_limpar.place(relx=0.4, rely=0.45, relwidth=0.25, relheight=0.1)

but_sair = Button(text="Sair", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=root.destroy)
but_sair.place(relx=0.7, rely=0.45, relwidth=0.25, relheight=0.1)

resultado_texto = Label(text="",
font=("Arial", 12, "bold"), bg="#cfe2f3")
resultado_texto.place(relx=0.05, rely=0.6, relwidth=0.9, relheight=0.25)

root.mainloop()

Comentários

Mensagens populares deste blogue

Criar Cartões de Visita

12 signos egípcios

Calcular a percentagem de ocupação