Skip to content

Instantly share code, notes, and snippets.

@WangYihang
Last active August 14, 2020 03:22
Show Gist options
  • Save WangYihang/2ba53e1d6c528662027b3da134519ba8 to your computer and use it in GitHub Desktop.
Save WangYihang/2ba53e1d6c528662027b3da134519ba8 to your computer and use it in GitHub Desktop.
Play super mario theme with passive buzzer on Raspberry Pi.
# Inspired from: https://create.arduino.cc/projecthub/jrance/super-mario-theme-song-w-piezo-buzzer-and-arduino-1cc2e4
from gpiozero import TonalBuzzer
from gpiozero.tones import Tone
import time
music = {
"recipe":["overworld", "overworld", "underworld"],
"overworld": [
("E5", 12), ("E5", 12), (None, 12), ("E5", 12),
(None, 12), ("C5", 12), ("E5", 12), (None, 12),
("G5", 12), (None, 12), (None, 12), (None, 12),
("G4", 12), (None, 12), (None, 12), (None, 12),
("C5", 12), (None, 12), (None, 12), ("G4", 12),
(None, 12), (None, 12), ("E4", 12), (None, 12),
(None, 12), ("A4", 12), (None, 12), ("B4", 12),
(None, 12), ("A#4", 12), ("A4", 12), (None, 12),
("G4", 9), ("E5", 9), ("G5", 9),
("A5", 12), (None, 12), ("F5", 12), ("G5", 12),
(None, 12), ("E5", 12), (None, 12), ("C5", 12),
("D5", 12), ("B4", 12), (None, 12), (None, 12),
("C5", 12), (None, 12), (None, 12), ("G4", 12),
(None, 12), (None, 12), ("E4", 12), (None, 12),
(None, 12), ("A4", 12), (None, 12), ("B4", 12),
(None, 12), ("A#4", 12), ("A4", 12), (None, 12),
("G4", 9), ("E5", 9), ("G5", 9),
("A5", 12), (None, 12), ("F5", 12), ("G5", 12),
(None, 12), ("E5", 12), (None, 12), ("C5", 12),
("D5", 12), ("B4", 12), (None, 12), (None, 12),
],
"underworld": [
("C4", 12), ("C5", 12), ("A3", 12), ("A4", 12),
("A#3", 12), ("A#4", 12), (None, 6),
(None, 3),
("C4", 12), ("C5", 12), ("A3", 12), ("A4", 12),
("A#3", 12), ("A#4", 12), (None, 6),
(None, 3),
("F3", 12), ("F4", 12), ("D3", 12), ("D4", 12),
("D#3", 12), ("D#4", 12), (None, 6),
(None, 3),
("F3", 12), ("F4", 12), ("D3", 12), ("D4", 12),
("D#3", 12), ("D#4", 12), (None, 6),
(None, 6), ("D#4", 18), ("C#4", 18), ("D4", 18),
("C#4", 6), ("D#4", 6),
("D#4", 6), ("G#3", 6),
("G3", 6), ("C#4", 6),
("C4", 18), ("F#4", 18), ("F4", 18), ("E3", 18), ("A#4", 18), ("A4", 18),
("G#4", 10), ("D#4", 10), ("B3", 10),
("A#3", 10), ("A3", 10), ("G#3", 10),
(None, 3), (None, 3), (None, 3),
],
}
class Player:
def __init__(self, buzzer):
self.buzzer = buzzer
self.note = 2.0
def play(self, music):
for r in music["recipe"]:
print("Playing {}".format(r))
for tone in music[r]:
print("{}".format(tone))
self.beep(tone)
def beep(self, tone):
frequency = tone[0]
tempo = tone[1]
if frequency != None:
self.buzzer.play(Tone(frequency))
time.sleep(self.note / tempo)
self.buzzer.stop()
else:
time.sleep(self.note / tempo)
def main():
player = Player(TonalBuzzer(17))
player.play(music)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment