Skip to content

Instantly share code, notes, and snippets.

@ZappaBoy
Created August 25, 2022 22:32
Show Gist options
  • Save ZappaBoy/563533bb4d9a9cbc2709a75b84bc37fb to your computer and use it in GitHub Desktop.
Save ZappaBoy/563533bb4d9a9cbc2709a75b84bc37fb to your computer and use it in GitHub Desktop.
Python play frequencies as a song
# First of all install pysine: `python -m pip install pysine`
from pysine import sine
from song import song
def play_song(notes):
for note in notes:
frequency = note[0]
duration = note[1] / 1000
sine(frequency=frequency, duration=duration)
if __name__ == '__main__':
play_song(song)
# Never Gonna Give You Up - Rick Astley
# Extracted from arduino-songs
# https://github.com/robsoncouto/arduino-songs/blob/master/nevergonnagiveyouup/nevergonnagiveyouup.ino
# Thanks to Robson Couto and Chlorondria
# This is an exanmple song (obviously a meme song)
# You can replace the following code which whatever you want.
# Simply change the following with a tumple of (frequency, duration) or better (Hz, seconds)
NOTE_B0 = 31
NOTE_C1 = 33
NOTE_CS1 = 35
NOTE_D1 = 37
NOTE_DS1 = 39
NOTE_E1 = 41
NOTE_F1 = 44
NOTE_FS1 = 46
NOTE_G1 = 49
NOTE_GS1 = 52
NOTE_A1 = 55
NOTE_AS1 = 58
NOTE_B1 = 62
NOTE_C2 = 65
NOTE_CS2 = 69
NOTE_D2 = 73
NOTE_DS2 = 78
NOTE_E2 = 82
NOTE_F2 = 87
NOTE_FS2 = 93
NOTE_G2 = 98
NOTE_GS2 = 104
NOTE_A2 = 110
NOTE_AS2 = 117
NOTE_B2 = 123
NOTE_C3 = 131
NOTE_CS3 = 139
NOTE_D3 = 147
NOTE_DS3 = 156
NOTE_E3 = 165
NOTE_F3 = 175
NOTE_FS3 = 185
NOTE_G3 = 196
NOTE_GS3 = 208
NOTE_A3 = 220
NOTE_AS3 = 233
NOTE_B3 = 247
NOTE_C4 = 262
NOTE_CS4 = 277
NOTE_D4 = 294
NOTE_DS4 = 311
NOTE_E4 = 330
NOTE_F4 = 349
NOTE_FS4 = 370
NOTE_G4 = 392
NOTE_GS4 = 415
NOTE_A4 = 440
NOTE_AS4 = 466
NOTE_B4 = 494
NOTE_C5 = 523
NOTE_CS5 = 554
NOTE_D5 = 587
NOTE_DS5 = 622
NOTE_E5 = 659
NOTE_F5 = 698
NOTE_FS5 = 740
NOTE_G5 = 784
NOTE_GS5 = 831
NOTE_A5 = 880
NOTE_AS5 = 932
NOTE_B5 = 988
NOTE_C6 = 1047
NOTE_CS6 = 1109
NOTE_D6 = 1175
NOTE_DS6 = 1245
NOTE_E6 = 1319
NOTE_F6 = 1397
NOTE_FS6 = 1480
NOTE_G6 = 1568
NOTE_GS6 = 1661
NOTE_A6 = 1760
NOTE_AS6 = 1865
NOTE_B6 = 1976
NOTE_C7 = 2093
NOTE_CS7 = 2217
NOTE_D7 = 2349
NOTE_DS7 = 2489
NOTE_E7 = 2637
NOTE_F7 = 2794
NOTE_FS7 = 2960
NOTE_G7 = 3136
NOTE_GS7 = 3322
NOTE_A7 = 3520
NOTE_AS7 = 3729
NOTE_B7 = 3951
NOTE_C8 = 4186
NOTE_CS8 = 4435
NOTE_D8 = 4699
NOTE_DS8 = 4978
REST = 0
SPEED = 2000
HALF_NOTE = SPEED // 2
QUARTER_NOTE = SPEED // 4
EIGHT_NOTE = SPEED // 8
SIXTEENTH_NOTE = SPEED // 16
DOTTED_QUARTER_NOTE = QUARTER_NOTE + EIGHT_NOTE
DOTTED_EIGHT_NOTE = EIGHT_NOTE + SIXTEENTH_NOTE
song = [
(NOTE_D5, DOTTED_QUARTER_NOTE),
(NOTE_E5, DOTTED_QUARTER_NOTE),
(NOTE_A4, QUARTER_NOTE),
(NOTE_E5, DOTTED_QUARTER_NOTE),
(NOTE_FS5, DOTTED_QUARTER_NOTE),
(NOTE_A5, SIXTEENTH_NOTE),
(NOTE_G5, SIXTEENTH_NOTE),
(NOTE_FS5, EIGHT_NOTE),
(NOTE_D5, DOTTED_QUARTER_NOTE),
(NOTE_E5, DOTTED_QUARTER_NOTE),
(NOTE_A4, HALF_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, EIGHT_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_D5, DOTTED_QUARTER_NOTE),
(NOTE_E5, DOTTED_QUARTER_NOTE),
(NOTE_A4, QUARTER_NOTE),
(NOTE_E5, DOTTED_QUARTER_NOTE),
(NOTE_FS5, DOTTED_QUARTER_NOTE),
(NOTE_A5, SIXTEENTH_NOTE),
(NOTE_G5, SIXTEENTH_NOTE),
(NOTE_FS5, EIGHT_NOTE),
(NOTE_D5, DOTTED_QUARTER_NOTE),
(NOTE_E5, DOTTED_QUARTER_NOTE),
(NOTE_A4, HALF_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, EIGHT_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(REST, QUARTER_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_CS5, EIGHT_NOTE),
(NOTE_D5, EIGHT_NOTE),
(NOTE_D5, EIGHT_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_CS5, DOTTED_EIGHT_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_A4, HALF_NOTE),
(REST, QUARTER_NOTE),
(REST, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_CS5, EIGHT_NOTE),
(NOTE_D5, EIGHT_NOTE),
(NOTE_B4, QUARTER_NOTE),
(NOTE_A4, EIGHT_NOTE),
(NOTE_A5, EIGHT_NOTE),
(REST, EIGHT_NOTE),
(NOTE_A5, EIGHT_NOTE),
(NOTE_E5, DOTTED_QUARTER_NOTE),
(REST, QUARTER_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_CS5, EIGHT_NOTE),
(NOTE_D5, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_D5, EIGHT_NOTE),
(NOTE_E5, EIGHT_NOTE),
(REST, EIGHT_NOTE),
(REST, EIGHT_NOTE),
(NOTE_CS5, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_A4, DOTTED_QUARTER_NOTE),
(REST, QUARTER_NOTE),
(REST, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_CS5, EIGHT_NOTE),
(NOTE_D5, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_A4, QUARTER_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_FS5, EIGHT_NOTE),
(NOTE_E5, QUARTER_NOTE),
(REST, QUARTER_NOTE),
(NOTE_D5, HALF_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_FS5, EIGHT_NOTE),
(NOTE_D5, EIGHT_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_FS5, EIGHT_NOTE),
(NOTE_E5, QUARTER_NOTE),
(NOTE_A4, QUARTER_NOTE),
(REST, HALF_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_CS5, EIGHT_NOTE),
(NOTE_D5, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(REST, EIGHT_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_FS5, EIGHT_NOTE),
(NOTE_E5, DOTTED_QUARTER_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_FS5, DOTTED_EIGHT_NOTE),
(NOTE_FS5, DOTTED_EIGHT_NOTE),
(NOTE_E5, DOTTED_QUARTER_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_E5, DOTTED_EIGHT_NOTE),
(NOTE_E5, DOTTED_EIGHT_NOTE),
(NOTE_D5, DOTTED_EIGHT_NOTE),
(NOTE_CS5, SIXTEENTH_NOTE),
(NOTE_B4, DOTTED_EIGHT_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, QUARTER_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_CS5, DOTTED_EIGHT_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_A4, EIGHT_NOTE),
(NOTE_A4, EIGHT_NOTE),
(NOTE_A4, EIGHT_NOTE),
(NOTE_E5, QUARTER_NOTE),
(NOTE_D5, HALF_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_FS5, DOTTED_EIGHT_NOTE),
(NOTE_FS5, DOTTED_EIGHT_NOTE),
(NOTE_E5, DOTTED_QUARTER_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_A5, QUARTER_NOTE),
(NOTE_CS5, EIGHT_NOTE),
(NOTE_D5, DOTTED_EIGHT_NOTE),
(NOTE_CS5, SIXTEENTH_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, QUARTER_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_CS5, DOTTED_EIGHT_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_A4, QUARTER_NOTE),
(NOTE_A4, EIGHT_NOTE),
(NOTE_E5, QUARTER_NOTE),
(NOTE_D5, HALF_NOTE),
(REST, QUARTER_NOTE),
(REST, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_D5, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_D5, EIGHT_NOTE),
(NOTE_E5, QUARTER_NOTE),
(REST, EIGHT_NOTE),
(REST, EIGHT_NOTE),
(NOTE_CS5, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_A4, DOTTED_QUARTER_NOTE),
(REST, QUARTER_NOTE),
(REST, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_CS5, EIGHT_NOTE),
(NOTE_D5, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_A4, QUARTER_NOTE),
(REST, EIGHT_NOTE),
(NOTE_A5, EIGHT_NOTE),
(NOTE_A5, EIGHT_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_FS5, EIGHT_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_D5, EIGHT_NOTE),
(REST, EIGHT_NOTE),
(NOTE_A4, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_CS5, EIGHT_NOTE),
(NOTE_D5, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(REST, EIGHT_NOTE),
(NOTE_CS5, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_A4, DOTTED_QUARTER_NOTE),
(REST, QUARTER_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_CS5, EIGHT_NOTE),
(NOTE_D5, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_A4, QUARTER_NOTE),
(REST, EIGHT_NOTE),
(REST, EIGHT_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_FS5, QUARTER_NOTE),
(NOTE_E5, DOTTED_QUARTER_NOTE),
(NOTE_D5, HALF_NOTE),
(NOTE_D5, EIGHT_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_FS5, EIGHT_NOTE),
(NOTE_E5, QUARTER_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_FS5, EIGHT_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_A4, EIGHT_NOTE),
(NOTE_A4, QUARTER_NOTE),
(REST, DOTTED_QUARTER_NOTE),
(NOTE_A4, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_CS5, EIGHT_NOTE),
(NOTE_D5, EIGHT_NOTE),
(NOTE_B4, EIGHT_NOTE),
(REST, EIGHT_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_FS5, EIGHT_NOTE),
(NOTE_E5, DOTTED_QUARTER_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_FS5, DOTTED_EIGHT_NOTE),
(NOTE_FS5, DOTTED_EIGHT_NOTE),
(NOTE_E5, DOTTED_QUARTER_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_E5, DOTTED_EIGHT_NOTE),
(NOTE_E5, DOTTED_EIGHT_NOTE),
(NOTE_D5, DOTTED_EIGHT_NOTE),
(NOTE_CS5, SIXTEENTH_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, QUARTER_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_CS5, DOTTED_EIGHT_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_A4, QUARTER_NOTE),
(NOTE_A4, EIGHT_NOTE),
(NOTE_E5, QUARTER_NOTE),
(NOTE_D5, HALF_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_FS5, DOTTED_EIGHT_NOTE),
(NOTE_FS5, DOTTED_EIGHT_NOTE),
(NOTE_E5, DOTTED_QUARTER_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_A5, QUARTER_NOTE),
(NOTE_CS5, EIGHT_NOTE),
(NOTE_D5, DOTTED_EIGHT_NOTE),
(NOTE_CS5, SIXTEENTH_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, QUARTER_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_CS5, DOTTED_EIGHT_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_A4, QUARTER_NOTE),
(NOTE_A4, EIGHT_NOTE),
(NOTE_E5, QUARTER_NOTE),
(NOTE_D5, HALF_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_FS5, DOTTED_EIGHT_NOTE),
(NOTE_FS5, DOTTED_EIGHT_NOTE),
(NOTE_E5, DOTTED_QUARTER_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_A5, QUARTER_NOTE),
(NOTE_CS5, EIGHT_NOTE),
(NOTE_D5, DOTTED_EIGHT_NOTE),
(NOTE_CS5, SIXTEENTH_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, QUARTER_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_CS5, DOTTED_EIGHT_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_A4, QUARTER_NOTE),
(NOTE_A4, EIGHT_NOTE),
(NOTE_E5, QUARTER_NOTE),
(NOTE_D5, HALF_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_FS5, DOTTED_EIGHT_NOTE),
(NOTE_FS5, DOTTED_EIGHT_NOTE),
(NOTE_E5, DOTTED_QUARTER_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_A5, QUARTER_NOTE),
(NOTE_CS5, EIGHT_NOTE),
(NOTE_D5, DOTTED_EIGHT_NOTE),
(NOTE_CS5, SIXTEENTH_NOTE),
(NOTE_B4, EIGHT_NOTE),
(NOTE_A4, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, SIXTEENTH_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_D5, QUARTER_NOTE),
(NOTE_E5, EIGHT_NOTE),
(NOTE_CS5, DOTTED_EIGHT_NOTE),
(NOTE_B4, SIXTEENTH_NOTE),
(NOTE_A4, QUARTER_NOTE),
(NOTE_A4, EIGHT_NOTE),
(NOTE_E5, QUARTER_NOTE),
(NOTE_D5, HALF_NOTE),
(REST, QUARTER_NOTE)
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment