Portal Theme on Microbit
One feature of the microbit I haven't explored too much in the past was the music module. This module lets you play simple tunes using a dsl for pitches, octaves and durations (and, of course, rests). You can read the details of the API here.
I thought it would be fun to write a program to play Jonathan Coulton's end theme from the game Portal.
from microbit import *
import music
still_alive = [
# this was a tri
"R:4", "g6:1", "f#", "e", "e",
# umph
"f#:4", "R:4",
# I'm making a note
"R:2", "R:1", "a5:1", "g6", "f#:1", "e", "e:2",
# here Huge Success
"f#:3", "d:2", "e:1", "a5:5",
# it's
"R:3", "a:1",
# hard to overstate
"e6:2", "f#:1", "g:3", "e:1", "c#:2",
# my satisfact
"d:3", "e:2", "a5:3",
# tion
"f#6:3", "R:4",
# aperture science
"R:4", "g:1", "f#", "e", "e",
"f#:4", "R:4",
# we do what we must
"R:2", "R:1", "a5:1", "g6", "f#:1", "e", "e:3",
# because we can
"f#:1", "d:3", "e:1", "a5:5",
"R:4",
# for the good of all
"e6:2", "f#:1", "g:3", "e:1", "c#:3",
# of us except for the
"d:1", "e:2", "a5:1", "d6", "e",
# ones who are dead. But theres
"f", "e", "d", "c", "R:2", "a5:1", "a#:1",
# no sense crying over
"c6:2", "f:2", "e:1", "d", "d", "c",
# every mistake you just
"d:1", "c6:1", "c6:2", "c6:2", "a5:1", "a#:1",
# keep on trying till you
"c6:2", "f:2", "g:1", "f:1", "e:1", "d:1",
# run out of cake and the
"d:1", "e6:1", "f6:2", "f:2", "g:1", "a:1",
# science gets done and you
"a#:1", "a#:1", "a:2", "g:2", "f:1", "g:1",
# make a neat gun for the
"a:1", "a:1", "g:2", "f:2", "d:1", "c:1",
# people who are still alive
"d:1", "f", "f", "e:2", "f#:1", "f#:1"
]
music.set_tempo(bpm=60)
music.play(still_alive)
The challenge was in notating it correctly with the right timings and pitches. Having everything in one list makes it a little bit difficult to maintain and to work out where you are if there is a problem but it does give you a nice compact music format very similar to the sonic pi dsl.