from machine import Pin, PWM
import time
# ----- CONFIG BUZZER -----
buzzer = PWM(Pin(15))
buzzer.duty_u16(0)
def play(freq, dur):
if freq == 0:
buzzer.duty_u16(0)
time.sleep(dur)
return
buzzer.freq(int(freq))
buzzer.duty_u16(24000)
time.sleep(dur)
buzzer.duty_u16(0)
time.sleep(0.02)
# ----- FRECUENCIAS -----
N = {
"C4":261.63,"C#4":277.18,"D4":293.66,"D#4":311.13,
"E4":329.63,"F4":349.23,"F#4":369.99,"G4":392.00,
"G#4":415.30,"A4":440.00,"A#4":466.16,"B4":493.88,
"C5":523.25,"D5":587.33,"E5":659.25,"F5":698.46,
"G5":783.99,"A5":880.00
}
# ----- DURACIONES MUSICALES -----
BPM = 82
BEAT = 60 / BPM
def n(x): return x * BEAT # negra
def c(x): return (x/2) * BEAT # corchea
def s(x): return (x/4) * BEAT # semicorchea
# ----- MELODÍA -----
# intro + verso + estribillo (melodía vocal principal)
melody = [
# INTRO (piano principal)
("C4", c(1)), ("F4", c(1)), ("A4", c(1)), ("G4", c(1)),
("F4", c(1)), ("E4", c(1)), ("D4", c(1)), ("C4", c(1)),
# “Slip inside the eye of your mind”
("E4", n(1)), ("D4", n(1)),
("D4", c(1)), ("C4", c(1)), ("C4", n(1)),
# “Don’t you know you might find”
("D4", c(1)), ("C4", c(1)), ("E4", c(1)), ("D4", n(1)),
# “A better place to play”
("C4", n(2)), ("A4", c(1)),
# puente al estribillo
("G4", n(1)), ("E4", n(1)), ("F4", n(1)), ("E4", n(1)),
("D4", c(1)), ("C4", c(1)), ("D4", c(1)), ("C4", n(2)),
# ---- ESTRIBILLO ----
# “So Sally can wait”
("C4", c(1)), ("G4", c(1)), ("A4", c(1)), ("E4", c(1)),
("F4", n(1)), ("G4", n(1)),
# “She knows it's too late”
("C4", c(1)), ("A4", c(1)), ("G4", n(1)),
("E4", n(1)), ("D4", c(1)), ("C4", c(1)),
# “As we're walking on by”
("G4", c(1)), ("A4", c(1)), ("G4", n(1)),
("F4", c(1)), ("E4", c(1)), ("D4", n(1)),
# “Her soul slides away”
("C4", n(2)), ("G4", c(1)),
# “But don't look back in anger…”
("A4", c(1)), ("G4", n(1)),
("F4", n(1)), ("E4", n(1)), ("D4", n(1)),
("C4", n(2)),
]
# ----- REPRODUCCIÓN -----
try:
for note, dur in melody:
play(N.get(note, 0), dur)
finally:
buzzer.deinit()
Loading
pi-pico-w
pi-pico-w