from machine import Pin, PWM
import utime
# Configuración del buzzer en el pin GP18
buzzer = PWM(Pin(18))
# Frecuencias de las notas musicales en Hz
NOTES = {
"C4": 262, # Do
"D4": 294, # Re
"E4": 330, # Mi
"F4": 349, # Fa
"G4": 392, # Sol
"A4": 440, # La
"B4": 494, # Si
"C5": 523, # Do (octava superior)
"D5": 587, # Re (octava superior)
"E5": 659, # Mi (octava superior)
"F5": 698, # Fa (octava superior)
"G5": 784 # Sol (octava superior)
}
# Canciones - Coros principales y partes más representativas
songs = {
"Sabes Una Cosa": [
("E4", 0.4), ("G4", 0.4), ("A4", 0.4), ("G4", 0.4),
("F4", 0.4), ("E4", 0.4), ("D4", 0.4), ("E4", 0.4),
],
"Mario Bros": [
("E5", 0.2), ("E5", 0.2), ("pause", 0.2), ("E5", 0.2),
("pause", 0.2), ("C5", 0.2), ("E5", 0.2), ("G5", 0.4),
],
"Himno a la Alegría": [
("E4", 0.4), ("E4", 0.4), ("F4", 0.4), ("G4", 0.4),
("G4", 0.4), ("F4", 0.4), ("E4", 0.4), ("D4", 0.4),
("C4", 0.4), ("C4", 0.4), ("D4", 0.4), ("E4", 0.4),
]
}
# Función para ajustar la duración total de una canción
def adjust_song_duration(song, target_duration):
total_duration = sum(duration for _, duration in song)
factor = target_duration / total_duration
return [(note, duration * factor) for note, duration in song]
# Función para reproducir una nota
def play_note(note, duration):
if note == "pause": # Silencio
buzzer.duty_u16(0)
else:
frequency = NOTES[note]
buzzer.freq(frequency)
buzzer.duty_u16(32768) # 50% de ciclo de trabajo (volumen)
utime.sleep(duration)
buzzer.duty_u16(0) # Apagar buzzer entre notas
utime.sleep(0.05) # Pausa entre notas
# Orden específico para las canciones
song_order = [
"Sabes Una Cosa",
"Mario Bros",
"Himno a la Alegría"
]
# Reproducir las canciones en el orden especificado
for song_name in song_order:
print(f"Reproduciendo: {song_name}")
adjusted_song = adjust_song_duration(songs[song_name], 10) # Ajuste de duración más corto
for note, duration in adjusted_song:
play_note(note, duration)
utime.sleep(1) # Pausa entre canciones
print("¡Todas las canciones han terminado!")