I dedicate this post to one of my favorite composers, Johann Sebastian Bach. I was walking through Paris years ago when I approached a cathedral where someone had played this piece. It is the fugue of the Bach Toccata, BWV 565. At first, I thought that a virtuos organist must be at work here. Only when I got closer did I realize that the music came from a harmonica player!
I found the scores here and tried to reproduce the melody as well as possible on the micro:bit with a single voice. I provide them for download, in case it disappears or the link breaks down.
Since the piece is rather long and I didn’t find a suitable location to stop early, the piece stops rather abruptly. But it is enough to get a first impression.
And maybe it will tempt you to learn to play the piece yourself or at least to listen to a professional recording of a musician playing the piece on a real instrument.
The following python script elicits the beginning of the fugue part from the micro:bit.
If you don’t own a micro:bit, you can either buy one here or copy/paste the source code into this online emulator and let it run there to listen to the music. 🙂
from microbit import *
import music
music.set_tempo(bpm=120)
while True:
if button_a.was_pressed() or button_b.was_pressed():
display.scroll("J.S.Bach, Fugue in D Minor, BWV 565", wait=False, loop=True, delay=60)
# BACH TOCCATA FUGE: http://www.musanim.com/pdf/bwv565-a4.pdf
# tune = ["C4:4", "C#4:4", "E4:4", "Eb4:4" ]
tune = ["A4:2", "G4:2", "A4:2", "F4:2", "A4:2", "E4:2", "A4:2",
"D4:2", "A4:2", "C#4:2", "A4:2", "D4:2", "A4:2", "E4:2", "A4:2", "F4:2", "A4:2",
"A3:2", "A4:2", "B3:2", "A4:2", "C#4:2", "A4:2", "D4:2", "A4:2",
"C#4:2", "A4:2", "D4:2", "A4:2", "E4:2", "A4:2", "F4:2", "D5:2",
"C5:2", "D5:2", "Bb4:2", "D5:2", "A4:2", "D5:2", "G4:2", "D5:2",
"F#4:2", "D5:2", "G4:2", "D5:2", "A4:2", "D5:2", "Bb4:2", "D5:2",
"D4:2", "D5:2", "E4:2", "D5:2", "F#4:2", "D5:2", "G4:2", "D5:2",
"F#4:2", "D5:2", "G4:2", "D5:2", "A4:2", "D5:2",
"Bb4:2", "G4:2", "D5:2", "G4:2", "Bb4:2", "G4:2", "D5:2", "G4:2",
"Eb5:2", "Eb4:2", "G4:2", "Eb4:2", "Eb5:2", "Eb4:2", "G4:2", "Eb4:2",
"C5:2", "F4:2", "A4:2", "F4:2", "C5:2", "F4:2", "A4:2", "F4:2",
"D5:2", "D4:2", "F4:2", "D4:2", "D5:2", "D4:2", "F4:2", "D4:2",
"Bb4:2", "E4:2", "G4:2", "E4:2", "Bb4:2", "E4:2", "G4:2", "E4:2",
"C#5:2", "C#4:2", "E4:2", "C#4:2", "C#5:2", "C#4:2", "E4:2", "C#4:2",
"A4:2", "D4:2", "F4:2", "D4:2", "A4:2", "D4:2", "F4:2", "D4:2",
"G4:2", "Bb3:2", "C#4:2", "Bb3:2", "G4:2", "Bb3:2", "C#4:2", "Bb3:2",
"F4:2", "A3:2", "D4:2", "A3:2", "F4:2", "A3:2", "D4:2", "A3:2", # LINIE 1 SEITE 6 FERTIG
"E4:2", "G3:2", "Bb3:2", "G3:2", "E4:2", "G3:2", "Bb3:2", "G3:2",
"A3:2", "A5:2", "G5:2", "A5:2", "F5:2", "A5:2", "E5:2", "A5:2",
"D5:2", "A5:2", "C#5:2", "A5:2", "D5:2", "A5:2", "E5:2", "A5:2",
"F5:2", "A5:2", "A4:2", "A5:2", "B4:2", "A5:2", "C#5:2", "A5:2",
"D5:2", "A5:2", "C#5:2", "A5:2", "D5:2", "A5:2", "E5:2", "A5:2",
"F5:2", "A5:2", "E5:2", "A5:2", "D5:2", "A5:2", "C5:2", "A5:2", # LINIE 2 SEITE 6 FERTIG
"Bb4:2", "A5:2", "C5:2", "A5:2", "D5:2", "G5:2", "Bb4:2", "G5:2",
"E5:2", "G5:2", "D5:2", "G5:2", "C5:2", "G5:2", "Bb4:2", "G5:2",
"A4:2", "G5:2", "Bb4:2", "G5:2", "C5:2", "F5:2", "A4:2", "F5:2",
"D5:2", "F5:2", "C5:2", "F5:2", "Bb4:2", "F5:2", "A4:2", "F5:2",
"G4:2", "F5:2", "A4:2", "F5:2", "Bb4:2", "E5:2", "G4:2", "E5:2",
"C#5:2", "E5:2", "Bb4:2", "E5:2", "A4:2", "E5:2", "G4:2", "E5:2", # LINIE 3 SEITE 6 FERTIG
"F4:2", "E5:2", "G4:2", "E5:2", "A4:2", "D5:2", "F4:2", "D5:2", # <- SEITE 7 LINIE 1
"E4:2", "E5:2", "E4:2", "E5:2", "F4:2", "D5:2", "F4:2", "D5:2", # S7 L1 T1 ENDE
"Bb4:2", "C#5:2", "Bb4:2", "C#5:2", "A4:2", "D5:2", "F4:2", "D5:2",
"E4:2", "E5:2", "E4:2", "E5:2", "G4:2", "D5:2", "G4:2", "D5:2", # S7 L1 T2 ENDE
"E4:2", "D5:2", "C#5:2", "D5:2", "B4:2", "D5:2", "C#5:2", "B4:2",
"C#5:2", "A4:2", "G4:2", "A4:2", "E4:2", "G4:2", "F4:2", "E4:2", # S7 L1 ENDE
"F4:2", "D5:2", "C#5:2", "D5:2", "F5:2", "D5:2", "C#5:2", "B4:2",
"A3:2", "A4:2", "G4:2", "A4:2", "C#4:2", "G4:2", "F4:2", "E4:2", # S7 L2 T1 ENDE
"F4:8", "E4:2", "A3:2", "G3:2", "A3:2", "F#3:2", "D4:2", "C#4:2",
"D4:2", "G3:2", "F4:2", "Eb4:2", "D4:2", "C#4:2", "E4:2", "A3:2",
"C#4:2", "D3:2", "Eb4:2", "D4:2", "C4:2", "B3:2", "D4:2", "G3:2",
"B3:2", "C3:2", "D4:2", "C4:2", "Bb3:2"]
music.play(tune)
display.scroll('')