소스 뷰어
from time import sleep
from picozero import Speaker, LED
led = LED(25)
speaker = Speaker(4)
BEAT = 0.4
notes_map = { "do": "c4", "re" : "d4", "mi" : "e4", "fa" : "f4", "so": "g4", "sol": "g4", "la" : "a4", "si" : "b4",
"do+": "c5", "re+" : "d5", "mi+": "e5" }
song_0 = """do, do, sol, sol, la, la, sol2, fa, fa, mi, mi, re, re, do2,
sol, sol, fa, fa, mi, mi, re2, sol, sol, fa, fa, mi, mi, re2,
do, do, sol, sol, la, la, sol2, fa, fa, mi, mi, re, re, do2,
"""
song_1 = "sol sol la la sol sol mi2 sol sol mi mi re2 sol sol la la sol sol mi2 sol mi re mi do2"
song_2 = """sol2, la, sol2, la, sol, mi, re, do2, do+2, la, sol2, mi, sol2,
la, la, sol, la, sol, mi, re, do2, re, mi, re, mi, do2,
re, re, do, re, mi, mi, do2, la, sol, la, si, do+, sol2,
do+, ra, sol, mi, re, mi, sol, la2, sol2, re, fa, mi, re, do2
"""
songs = [ song_0, song_1, song_2 ]
def to_melody( song ) :
notes = []
song = song.replace( ",", " " )
song = song.split( " " )
for s in song :
beat_ratio = 1
s = s.strip()
if len( s ) < 1 :
continue
if s[-1].isdigit():
beat_ratio = 2
s = s[0:-1]
pass
if s in notes_map :
note = notes_map[ s ]
notes.append( [ note, BEAT*beat_ratio ] )
else :
print( f"invalid note = {s}" )
pass
return notes
pass
sleep( 1 )
try :
print( "hello" )
for song in songs :
led.toggle()
speaker.play( to_melody( song ) )
sleep( 3 )
pass
except :
pass
finally:
led.off()
pass