Sync a Song
A fun, nostalgic music game for two players, built with the Arduino Plug and Make kit. It’s inspired by those old-school reel-to-reel tape recorders.
Components and supplies
2
Arduino Plug and Make Kit
Tools and machines
1
3D printer
Apps and platforms
1
Arduino IDE
Project description
Code
SyncASong.ino
c
Main sketch for the project
1#include <Modulino.h> 2#include <Scheduler.h> 3#include <BleValueSync.h> 4#include "ArduinoGraphics.h" 5#include "Arduino_LED_Matrix.h" 6#include "animation.h" 7#include "superMario.h" 8#include "got.h" 9#include "harry.h" 10#include "takeonme.h" 11#include "nevergiveup.h" 12 13 14#define TIMESPEED 350 15#define MAXSPEED 32 16#define BLE_SYNC 17#define SOUND 18#define COMPLEX_SOUND 19 20ArduinoLEDMatrix matrix; 21 22ModulinoBuzzer buzzer1(16); 23ModulinoBuzzer buzzer2(18); 24ModulinoPixels leds1(12); 25ModulinoPixels leds2(14); 26ModulinoKnob knob1(8); 27ModulinoKnob knob2(10); 28ModulinoButtons buttons; 29 30bool button_a = false; 31bool button_b = false; 32bool button_c = false; 33int melodySelection = 0; 34 35int melody1[3][16]={{ 440, 494, 523, 587, 659, 523, 494, 440, 659, 587, 523, 494, 440, 494, 523, 659 },{ 261, 293, 329, 349, 392, 440, 493, 523, 493, 440, 392, 349, 329, 293, 261, 293 },{ 196, 220, 246, 261, 293, 329, 392, 440, 392, 329, 293, 261, 246, 220, 196, 220 }}; 36int melody2[3][16]={{ 349, 392, 440, 494, 523, 440, 392, 349, 523, 494, 440, 392, 349, 392, 440, 523 },{ 196, 220, 246, 261, 293, 261, 220, 196, 293, 261, 246, 220, 196, 220, 261, 293 },{ 146, 164, 174, 196, 220, 196, 174, 164, 220, 196, 174, 164, 146, 164, 196, 220 }}; 37 38 39ModulinoColor OFF(0, 0, 0); 40ModulinoColor ORANGE(224, 90, 0); 41ModulinoColor YELLOW(240, 180, 30); 42int brightness = 25; 43int speed1; 44int speed2; 45int position1; 46int position2; 47int oldposition1; 48int oldposition2; 49int speedlight1; 50int speedlight2; 51int playtime; 52int n = 0; 53int notelenght = 250; 54 55#ifdef BLE_SYNC 56/* BT Service and properties */ 57BleSync ble("SyncASong", "8314d68e-d34f-476d-bc64-5bacb6673b84", 3); 58BleSyncValue bleRecord("89d26d31-9d35-4a8b-833d-32ddd63dbcbc", BLERead | BLEWrite); 59BleSyncValue bleRecord1("a4b97d98-e166-4f41-aa44-2cf2c77c2b53", BLERead | BLEWrite); 60BleSyncValue bleRecord2("d85c147f-391a-49f7-82fd-c1096d3a498f", BLERead | BLEWrite); 61#endif 62 63#ifdef COMPLEX_SOUND 64int notes, wholenote, divider, tempo, *currentMelody; 65#endif 66 67int32_t totalMs[3] = {0,0,0}; 68long stopTime = 0; 69bool syncBlue = false; 70 71void setup() { 72 Serial.begin(115200); 73 Modulino.begin(); 74 buzzer1.begin(); 75 buzzer2.begin(); 76 leds1.begin(); 77 leds2.begin(); 78 knob1.begin(); 79 knob2.begin(); 80 buttons.begin(); 81 matrix.begin(); 82 matrix.loadSequence(animation); 83 buttons.setLeds(true, false, false); 84 85 Scheduler.startLoop(encoderSx); 86 Scheduler.startLoop(encoderDx); 87 88 #ifdef BLE_SYNC 89 ble.addValue(&bleRecord); 90 ble.addValue(&bleRecord1); 91 ble.addValue(&bleRecord2); 92 ble.initBLE(); 93 #endif 94 95 setMario(); 96} 97 98void encoderDx() { 99 if(syncBlue){ 100 delay(1); 101 return; 102 } 103 104 oldposition1 = position1; 105 position1 = knob1.get(); 106 speed1 = position1-oldposition1; 107 108 if (speed1>MAXSPEED) { 109 speed1 = MAXSPEED; 110 } 111 112 if (speed1<0) { 113 for (int i = 0; i < 8; i++) { 114 setPixel1(i, RED); 115 delay(1); 116 } 117 118 delay(150); 119 120 for (int i = 0; i < 8; i++) { 121 setPixel1(i, OFF); 122 delay(1); 123 } 124 125 return; 126 } 127 128 speedlight1 = map(abs(speed1),1,MAXSPEED,0,8); 129 130 for (int i = 0; i < speedlight1; i++) { 131 if (i == 0) { 132 setPixel1(i, RED); 133 } else if (i == 1) { 134 setPixel1(i, ORANGE); 135 } else if (i == 2) { 136 setPixel1(i, YELLOW); 137 } else if(i == 3 || i == 4){ 138 setPixel1(i, GREEN); 139 } else if(i == 5){ 140 setPixel1(i, YELLOW); 141 } else if (i == 6) { 142 setPixel1(i, ORANGE); 143 } else if (i == 7) { 144 setPixel1(i, RED); 145 } 146 delay(1); 147 } 148 149 for (int i = speedlight1; i < 8; i++) { 150 setPixel1(i, OFF); 151 delay(1); 152 } 153 154 delay(TIMESPEED); 155} 156 157void encoderSx(){ 158 159 160 161 if(syncBlue){ 162 delay(1); 163 return; 164 } 165 166 oldposition2 = position2; 167 position2 = knob2.get(); 168 speed2 = position2-oldposition2; 169 if (speed2>MAXSPEED) { 170 speed2 = MAXSPEED; 171 } 172 173 if (speed2<0) { 174 Serial.println("EncoderSX"); 175 for (int i = 0; i < 8; i++) { 176 setPixel2(i, RED); 177 delay(1); 178 } 179 180 delay(150); 181 182 for (int i = 0; i < 8; i++) { 183 setPixel2(i, OFF); 184 delay(1); 185 } 186 187 return; 188 } 189 190 speedlight2 = map(abs(speed2),1,MAXSPEED,0,8); 191 192 for (int i = 0; i < speedlight2; i++) { 193 if (i == 0) { 194 setPixel2(i, RED); 195 } else if (i == 1) { 196 setPixel2(i, ORANGE); 197 } else if (i == 2) { 198 setPixel2(i, YELLOW); 199 } else if(i == 3 || i == 4){ 200 setPixel2(i, GREEN); 201 } else if(i == 5){ 202 setPixel2(i, YELLOW); 203 } else if (i == 6) { 204 setPixel2(i, ORANGE); 205 } else if (i == 7) { 206 setPixel2(i, RED); 207 } 208 delay(1); 209 } 210 211 for (int i = speedlight2; i < 8; i++) { 212 setPixel2(i, OFF); 213 delay(1); 214 } 215 216 delay(TIMESPEED); 217} 218 219void loop() { 220 221 delay(1); 222 223 if (buttons.update()) { 224 if (buttons.isPressed(0)) { 225 Serial.println("Button A pressed!"); 226 buttons.setLeds(true, false, false); 227 textMatrix('A'); 228 melodySelection = 0; 229 } else if (buttons.isPressed(1)) { 230 Serial.println("Button B pressed!"); 231 buttons.setLeds(false, true, false); 232 textMatrix('B'); 233 melodySelection = 1; 234 } else if (buttons.isPressed(2)) { 235 Serial.println("Button C pressed!"); 236 buttons.setLeds(false, false, true); 237 textMatrix('C'); 238 melodySelection = 2; 239 } 240 241 #ifdef COMPLEX_SOUND 242 if(melodySelection == 0){ 243 setMario(); 244 } 245 246 if(melodySelection == 1){ 247 //setGot(); 248 setTakeOnMe(); 249 //setNevergiveup(); 250 } 251 252 if(melodySelection == 2){ 253 setHarry(); 254 } 255 #endif 256 } 257 258 if(speed1 < 0 || speed2 < 0) { 259 return; 260 } 261 262 if(speed1 == 0 && speed2 == 0){ 263 if(stopTime == 0){ 264 stopTime = millis(); 265 } else if(millis() - stopTime >= 3000){ 266 stopTime = 0; 267 syncBlue = true; 268 bleRecord.setValue(bleRecord.getValue()+totalMs[0]); 269 totalMs[0] = 0; 270 bleRecord1.setValue(bleRecord1.getValue()+totalMs[1]); 271 totalMs[1] = 0; 272 bleRecord2.setValue(bleRecord2.getValue()+totalMs[2]); 273 totalMs[2] = 0; 274 ble.sync(3000); 275 syncBlue = false; 276 } 277 278 return; 279 } 280 281 stopTime = 0; 282 283 if ((speedlight1 == 4 || speedlight1 == 5 ) && (speedlight2 == 4 || speedlight2 == 5 )) { 284 if ((millis() - playtime) > notelenght) { 285 playtime = millis(); 286 #if defined(SOUND) && !defined(COMPLEX_SOUND) 287 buzzer1.tone(melody1[melodySelection][n], notelenght); 288 delay(50); // useful to make the two notes distinguishable 289 buzzer2.tone(melody2[melodySelection][n], notelenght); 290 n++; 291 if (n == 16) { 292 n = 0; 293 } 294 #endif 295 296 #ifdef COMPLEX_SOUND 297 // calculates the duration of each note 298 divider = currentMelody[n + 1]; 299 if (divider > 0) { 300 // regular note, just proceed 301 notelenght = (wholenote) / divider; 302 } else if (divider < 0) { 303 // dotted notes are represented with negative durations!! 304 notelenght = (wholenote) / abs(divider); 305 notelenght *= 1.5; // increases the duration in half for dotted notes 306 } 307 308 //Serial.print(n); 309 //Serial.print(","); 310 //Serial.println(currentMelody[n]); 311 buzzer1.tone(currentMelody[n], notelenght); 312 buzzer2.tone(currentMelody[n], notelenght); 313 314 n = n+2; 315 if(n >= notes*2){ 316 Serial.println("Restarting melody"); 317 n = 0; 318 } 319 #endif 320 321 322 totalMs[melodySelection] += notelenght; 323 } 324 } 325 326 if (speed1 > 0 && speed2 > 0) { 327 matrix.play(false); 328 delay(1); 329 } 330 331} 332 333void setMario() { 334 tempo = mario_tempo; 335 currentMelody = mario; 336 notes = sizeof(mario) / sizeof(mario[0]) / 2; 337 wholenote = (60000*4)/tempo; 338 divider = 0; 339 notelenght = 0; 340 n = 0; 341} 342 343void setGot() { 344 tempo = got_tempo; 345 currentMelody = got; 346 notes = sizeof(got) / sizeof(got[0]) / 2; 347 wholenote = (60000*4)/tempo; 348 divider = 0; 349 notelenght = 0; 350 n = 0; 351} 352 353void setHarry() { 354 tempo = harry_tempo; 355 currentMelody = harry; 356 notes = sizeof(harry) / sizeof(harry[0]) / 2; 357 wholenote = (60000*4)/tempo; 358 divider = 0; 359 notelenght = 0; 360 n = 0; 361} 362 363void setTakeOnMe() { 364 tempo = takeonme_tempo; 365 currentMelody = takeonme; 366 notes = sizeof(takeonme) / sizeof(takeonme[0]) / 2; 367 wholenote = (60000*4)/tempo; 368 divider = 0; 369 notelenght = 0; 370 n = 0; 371} 372 373void setNevergiveup() { 374 tempo = nevergiveup_tempo; 375 currentMelody = nevergiveup; 376 notes = sizeof(nevergiveup) / sizeof(nevergiveup[0]) / 2; 377 wholenote = (60000*4)/tempo; 378 divider = 0; 379 notelenght = 0; 380 n = 0; 381} 382 383void setPixel1(int pixel, ModulinoColor color) { 384 leds1.set(pixel, color, brightness); 385 leds1.show(); 386} 387 388void setPixel2(int pixel, ModulinoColor color) { 389 leds2.set(pixel, color, brightness); 390 leds2.show(); 391} 392 393void textMatrix(char letter) { 394 matrix.loadFrame(LEDMATRIX_MUSIC_NOTE); 395 delay(500); 396 matrix.beginDraw(); 397 matrix.stroke(0xFFFFFFFF); 398 char text[2]; // Un array di due elementi: uno per il carattere e uno per il terminatore della stringa 399 text[0] = letter; // Assegna il carattere al primo elemento dell'array 400 text[1] = '\0'; // Termina la stringa con il carattere nullo 401 matrix.textFont(Font_5x7); 402 matrix.beginText(4, 1, 0xFFFFFF); 403 matrix.println(text); // Stampa il testo (che è una stringa) 404 matrix.endText(); 405 matrix.endDraw(); 406 delay(1000); 407 matrix.loadSequence(animation); 408}
nevergiveup.h
c
.h file for a song
1// change this to make the song slower or faster 2int nevergiveup_tempo = 114; 3 4// change this to whichever pin you want to us 5// notes of the moledy followed by the duration. 6// a 4 means a quarter note, 8 an eighteenth , 16 sixteenth, so on 7// !!negative numbers are used to represent dotted notes, 8// so -4 means a dotted quarter note, that is, a quarter plus an eighteenth!! 9int nevergiveup[] = { 10 11 // Never Gonna Give You Up - Rick Astley 12 // Score available at https://musescore.com/chlorondria_5/never-gonna-give-you-up_alto-sax 13 // Arranged by Chlorondria 14 15 NOTE_D5,-4, NOTE_E5,-4, NOTE_A4,4, //1 16 NOTE_E5,-4, NOTE_FS5,-4, NOTE_A5,16, NOTE_G5,16, NOTE_FS5,8, 17 NOTE_D5,-4, NOTE_E5,-4, NOTE_A4,2, 18 NOTE_A4,16, NOTE_A4,16, NOTE_B4,16, NOTE_D5,8, NOTE_D5,16, 19 NOTE_D5,-4, NOTE_E5,-4, NOTE_A4,4, //repeat from 1 20 NOTE_E5,-4, NOTE_FS5,-4, NOTE_A5,16, NOTE_G5,16, NOTE_FS5,8, 21 NOTE_D5,-4, NOTE_E5,-4, NOTE_A4,2, 22 NOTE_A4,16, NOTE_A4,16, NOTE_B4,16, NOTE_D5,8, NOTE_D5,16, 23 REST,4, NOTE_B4,8, NOTE_CS5,8, NOTE_D5,8, NOTE_D5,8, NOTE_E5,8, NOTE_CS5,-8, 24 NOTE_B4,16, NOTE_A4,2, REST,4, 25 26 REST,8, NOTE_B4,8, NOTE_B4,8, NOTE_CS5,8, NOTE_D5,8, NOTE_B4,4, NOTE_A4,8, //7 27 NOTE_A5,8, REST,8, NOTE_A5,8, NOTE_E5,-4, REST,4, 28 NOTE_B4,8, NOTE_B4,8, NOTE_CS5,8, NOTE_D5,8, NOTE_B4,8, NOTE_D5,8, NOTE_E5,8, REST,8, 29 REST,8, NOTE_CS5,8, NOTE_B4,8, NOTE_A4,-4, REST,4, 30 REST,8, NOTE_B4,8, NOTE_B4,8, NOTE_CS5,8, NOTE_D5,8, NOTE_B4,8, NOTE_A4,4, 31 NOTE_E5,8, NOTE_E5,8, NOTE_E5,8, NOTE_FS5,8, NOTE_E5,4, REST,4, 32 33 NOTE_D5,2, NOTE_E5,8, NOTE_FS5,8, NOTE_D5,8, //13 34 NOTE_E5,8, NOTE_E5,8, NOTE_E5,8, NOTE_FS5,8, NOTE_E5,4, NOTE_A4,4, 35 REST,2, NOTE_B4,8, NOTE_CS5,8, NOTE_D5,8, NOTE_B4,8, 36 REST,8, NOTE_E5,8, NOTE_FS5,8, NOTE_E5,-4, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, 37 NOTE_FS5,-8, NOTE_FS5,-8, NOTE_E5,-4, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, 38 39 NOTE_E5,-8, NOTE_E5,-8, NOTE_D5,-8, NOTE_CS5,16, NOTE_B4,-8, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, //18 40 NOTE_D5,4, NOTE_E5,8, NOTE_CS5,-8, NOTE_B4,16, NOTE_A4,8, NOTE_A4,8, NOTE_A4,8, 41 NOTE_E5,4, NOTE_D5,2, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, 42 NOTE_FS5,-8, NOTE_FS5,-8, NOTE_E5,-4, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, 43 NOTE_A5,4, NOTE_CS5,8, NOTE_D5,-8, NOTE_CS5,16, NOTE_B4,8, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, 44 45 NOTE_D5,4, NOTE_E5,8, NOTE_CS5,-8, NOTE_B4,16, NOTE_A4,4, NOTE_A4,8, //23 46 NOTE_E5,4, NOTE_D5,2, REST,4, 47 REST,8, NOTE_B4,8, NOTE_D5,8, NOTE_B4,8, NOTE_D5,8, NOTE_E5,4, REST,8, 48 REST,8, NOTE_CS5,8, NOTE_B4,8, NOTE_A4,-4, REST,4, 49 REST,8, NOTE_B4,8, NOTE_B4,8, NOTE_CS5,8, NOTE_D5,8, NOTE_B4,8, NOTE_A4,4, 50 REST,8, NOTE_A5,8, NOTE_A5,8, NOTE_E5,8, NOTE_FS5,8, NOTE_E5,8, NOTE_D5,8, 51 52 REST,8, NOTE_A4,8, NOTE_B4,8, NOTE_CS5,8, NOTE_D5,8, NOTE_B4,8, //29 53 REST,8, NOTE_CS5,8, NOTE_B4,8, NOTE_A4,-4, REST,4, 54 NOTE_B4,8, NOTE_B4,8, NOTE_CS5,8, NOTE_D5,8, NOTE_B4,8, NOTE_A4,4, REST,8, 55 REST,8, NOTE_E5,8, NOTE_E5,8, NOTE_FS5,4, NOTE_E5,-4, 56 NOTE_D5,2, NOTE_D5,8, NOTE_E5,8, NOTE_FS5,8, NOTE_E5,4, 57 NOTE_E5,8, NOTE_E5,8, NOTE_FS5,8, NOTE_E5,8, NOTE_A4,8, NOTE_A4,4, 58 59 REST,-4, NOTE_A4,8, NOTE_B4,8, NOTE_CS5,8, NOTE_D5,8, NOTE_B4,8, //35 60 REST,8, NOTE_E5,8, NOTE_FS5,8, NOTE_E5,-4, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, 61 NOTE_FS5,-8, NOTE_FS5,-8, NOTE_E5,-4, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, 62 NOTE_E5,-8, NOTE_E5,-8, NOTE_D5,-8, NOTE_CS5,16, NOTE_B4,8, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, 63 NOTE_D5,4, NOTE_E5,8, NOTE_CS5,-8, NOTE_B4,16, NOTE_A4,4, NOTE_A4,8, 64 65 NOTE_E5,4, NOTE_D5,2, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, //40 66 NOTE_FS5,-8, NOTE_FS5,-8, NOTE_E5,-4, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, 67 NOTE_A5,4, NOTE_CS5,8, NOTE_D5,-8, NOTE_CS5,16, NOTE_B4,8, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, 68 NOTE_D5,4, NOTE_E5,8, NOTE_CS5,-8, NOTE_B4,16, NOTE_A4,4, NOTE_A4,8, 69 NOTE_E5,4, NOTE_D5,2, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, 70 71 NOTE_FS5,-8, NOTE_FS5,-8, NOTE_E5,-4, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, //45 72 NOTE_A5,4, NOTE_CS5,8, NOTE_D5,-8, NOTE_CS5,16, NOTE_B4,8, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, 73 NOTE_D5,4, NOTE_E5,8, NOTE_CS5,-8, NOTE_B4,16, NOTE_A4,4, NOTE_A4,8, 74 NOTE_E5,4, NOTE_D5,2, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, 75 NOTE_FS5,-8, NOTE_FS5,-8, NOTE_E5,-4, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, //45 76 77 NOTE_A5,4, NOTE_CS5,8, NOTE_D5,-8, NOTE_CS5,16, NOTE_B4,8, NOTE_A4,16, NOTE_B4,16, NOTE_D5,16, NOTE_B4,16, 78 NOTE_D5,4, NOTE_E5,8, NOTE_CS5,-8, NOTE_B4,16, NOTE_A4,4, NOTE_A4,8, 79 80 NOTE_E5,4, NOTE_D5,2, REST,4 81};
harry.h
c
.h file for a song
1int harry_tempo = 144; 2 3// notes of the moledy followed by the duration. 4// a 4 means a quarter note, 8 an eighteenth , 16 sixteenth, so on 5// !!negative numbers are used to represent dotted notes, 6// so -4 means a dotted quarter note, that is, a quarter plus an eighteenth!! 7int harry[] = { 8 9 10 // Hedwig's theme fromn the Harry Potter Movies 11 // Socre from https://musescore.com/user/3811306/scores/4906610 12 13 REST, 2, NOTE_D4, 4, 14 NOTE_G4, -4, NOTE_AS4, 8, NOTE_A4, 4, 15 NOTE_G4, 2, NOTE_D5, 4, 16 NOTE_C5, -2, 17 NOTE_A4, -2, 18 NOTE_G4, -4, NOTE_AS4, 8, NOTE_A4, 4, 19 NOTE_F4, 2, NOTE_GS4, 4, 20 NOTE_D4, -1, 21 NOTE_D4, 4, 22 23 NOTE_G4, -4, NOTE_AS4, 8, NOTE_A4, 4, //10 24 NOTE_G4, 2, NOTE_D5, 4, 25 NOTE_F5, 2, NOTE_E5, 4, 26 NOTE_DS5, 2, NOTE_B4, 4, 27 NOTE_DS5, -4, NOTE_D5, 8, NOTE_CS5, 4, 28 NOTE_CS4, 2, NOTE_B4, 4, 29 NOTE_G4, -1, 30 NOTE_AS4, 4, 31 32 NOTE_D5, 2, NOTE_AS4, 4,//18 33 NOTE_D5, 2, NOTE_AS4, 4, 34 NOTE_DS5, 2, NOTE_D5, 4, 35 NOTE_CS5, 2, NOTE_A4, 4, 36 NOTE_AS4, -4, NOTE_D5, 8, NOTE_CS5, 4, 37 NOTE_CS4, 2, NOTE_D4, 4, 38 NOTE_D5, -1, 39 REST,4, NOTE_AS4,4, 40 41 NOTE_D5, 2, NOTE_AS4, 4,//26 42 NOTE_D5, 2, NOTE_AS4, 4, 43 NOTE_F5, 2, NOTE_E5, 4, 44 NOTE_DS5, 2, NOTE_B4, 4, 45 NOTE_DS5, -4, NOTE_D5, 8, NOTE_CS5, 4, 46 NOTE_CS4, 2, NOTE_AS4, 4, 47 NOTE_G4, -1, 48 49};
superMario.h
c
.h file for a song
1#include "notes.h" 2int mario_tempo = 200; 3 4int mario[] = { 5 6 // Super Mario Bros theme 7 // Score available at https://musescore.com/user/2123/scores/2145 8 // Theme by Koji Kondo 9 10 11 NOTE_E5,8, NOTE_E5,8, REST,8, NOTE_E5,8, REST,8, NOTE_C5,8, NOTE_E5,8, //1 12 NOTE_G5,4, REST,4, NOTE_G4,8, REST,4, 13 NOTE_C5,-4, NOTE_G4,8, REST,4, NOTE_E4,-4, // 3 14 NOTE_A4,4, NOTE_B4,4, NOTE_AS4,8, NOTE_A4,4, 15 NOTE_G4,-8, NOTE_E5,-8, NOTE_G5,-8, NOTE_A5,4, NOTE_F5,8, NOTE_G5,8, 16 REST,8, NOTE_E5,4,NOTE_C5,8, NOTE_D5,8, NOTE_B4,-4, 17 NOTE_C5,-4, NOTE_G4,8, REST,4, NOTE_E4,-4, // repeats from 3 18 NOTE_A4,4, NOTE_B4,4, NOTE_AS4,8, NOTE_A4,4, 19 NOTE_G4,-8, NOTE_E5,-8, NOTE_G5,-8, NOTE_A5,4, NOTE_F5,8, NOTE_G5,8, 20 REST,8, NOTE_E5,4,NOTE_C5,8, NOTE_D5,8, NOTE_B4,-4, 21 22 23 REST,4, NOTE_G5,8, NOTE_FS5,8, NOTE_F5,8, NOTE_DS5,4, NOTE_E5,8,//7 24 REST,8, NOTE_GS4,8, NOTE_A4,8, NOTE_C4,8, REST,8, NOTE_A4,8, NOTE_C5,8, NOTE_D5,8, 25 REST,4, NOTE_DS5,4, REST,8, NOTE_D5,-4, 26 NOTE_C5,2, REST,2, 27 28 REST,4, NOTE_G5,8, NOTE_FS5,8, NOTE_F5,8, NOTE_DS5,4, NOTE_E5,8,//repeats from 7 29 REST,8, NOTE_GS4,8, NOTE_A4,8, NOTE_C4,8, REST,8, NOTE_A4,8, NOTE_C5,8, NOTE_D5,8, 30 REST,4, NOTE_DS5,4, REST,8, NOTE_D5,-4, 31 NOTE_C5,2, REST,2, 32 33 NOTE_C5,8, NOTE_C5,4, NOTE_C5,8, REST,8, NOTE_C5,8, NOTE_D5,4,//11 34 NOTE_E5,8, NOTE_C5,4, NOTE_A4,8, NOTE_G4,2, 35 36 NOTE_C5,8, NOTE_C5,4, NOTE_C5,8, REST,8, NOTE_C5,8, NOTE_D5,8, NOTE_E5,8,//13 37 REST,1, 38 NOTE_C5,8, NOTE_C5,4, NOTE_C5,8, REST,8, NOTE_C5,8, NOTE_D5,4, 39 NOTE_E5,8, NOTE_C5,4, NOTE_A4,8, NOTE_G4,2, 40 NOTE_E5,8, NOTE_E5,8, REST,8, NOTE_E5,8, REST,8, NOTE_C5,8, NOTE_E5,4, 41 NOTE_G5,4, REST,4, NOTE_G4,4, REST,4, 42 NOTE_C5,-4, NOTE_G4,8, REST,4, NOTE_E4,-4, // 19 43 44 NOTE_A4,4, NOTE_B4,4, NOTE_AS4,8, NOTE_A4,4, 45 NOTE_G4,-8, NOTE_E5,-8, NOTE_G5,-8, NOTE_A5,4, NOTE_F5,8, NOTE_G5,8, 46 REST,8, NOTE_E5,4, NOTE_C5,8, NOTE_D5,8, NOTE_B4,-4, 47 48 NOTE_C5,-4, NOTE_G4,8, REST,4, NOTE_E4,-4, // repeats from 19 49 NOTE_A4,4, NOTE_B4,4, NOTE_AS4,8, NOTE_A4,4, 50 NOTE_G4,-8, NOTE_E5,-8, NOTE_G5,-8, NOTE_A5,4, NOTE_F5,8, NOTE_G5,8, 51 REST,8, NOTE_E5,4, NOTE_C5,8, NOTE_D5,8, NOTE_B4,-4, 52 53 NOTE_E5,8, NOTE_C5,4, NOTE_G4,8, REST,4, NOTE_GS4,4,//23 54 NOTE_A4,8, NOTE_F5,4, NOTE_F5,8, NOTE_A4,2, 55 NOTE_D5,-8, NOTE_A5,-8, NOTE_A5,-8, NOTE_A5,-8, NOTE_G5,-8, NOTE_F5,-8, 56 57 NOTE_E5,8, NOTE_C5,4, NOTE_A4,8, NOTE_G4,2, //26 58 NOTE_E5,8, NOTE_C5,4, NOTE_G4,8, REST,4, NOTE_GS4,4, 59 NOTE_A4,8, NOTE_F5,4, NOTE_F5,8, NOTE_A4,2, 60 NOTE_B4,8, NOTE_F5,4, NOTE_F5,8, NOTE_F5,-8, NOTE_E5,-8, NOTE_D5,-8, 61 NOTE_C5,8, NOTE_E4,4, NOTE_E4,8, NOTE_C4,2, 62 63 NOTE_E5,8, NOTE_C5,4, NOTE_G4,8, REST,4, NOTE_GS4,4,//repeats from 23 64 NOTE_A4,8, NOTE_F5,4, NOTE_F5,8, NOTE_A4,2, 65 NOTE_D5,-8, NOTE_A5,-8, NOTE_A5,-8, NOTE_A5,-8, NOTE_G5,-8, NOTE_F5,-8, 66 67 NOTE_E5,8, NOTE_C5,4, NOTE_A4,8, NOTE_G4,2, //26 68 NOTE_E5,8, NOTE_C5,4, NOTE_G4,8, REST,4, NOTE_GS4,4, 69 NOTE_A4,8, NOTE_F5,4, NOTE_F5,8, NOTE_A4,2, 70 NOTE_B4,8, NOTE_F5,4, NOTE_F5,8, NOTE_F5,-8, NOTE_E5,-8, NOTE_D5,-8, 71 NOTE_C5,8, NOTE_E4,4, NOTE_E4,8, NOTE_C4,2, 72 NOTE_C5,8, NOTE_C5,4, NOTE_C5,8, REST,8, NOTE_C5,8, NOTE_D5,8, NOTE_E5,8, 73 REST,1, 74 75 NOTE_C5,8, NOTE_C5,4, NOTE_C5,8, REST,8, NOTE_C5,8, NOTE_D5,4, //33 76 NOTE_E5,8, NOTE_C5,4, NOTE_A4,8, NOTE_G4,2, 77 NOTE_E5,8, NOTE_E5,8, REST,8, NOTE_E5,8, REST,8, NOTE_C5,8, NOTE_E5,4, 78 NOTE_G5,4, REST,4, NOTE_G4,4, REST,4, 79 NOTE_E5,8, NOTE_C5,4, NOTE_G4,8, REST,4, NOTE_GS4,4, 80 NOTE_A4,8, NOTE_F5,4, NOTE_F5,8, NOTE_A4,2, 81 NOTE_D5,-8, NOTE_A5,-8, NOTE_A5,-8, NOTE_A5,-8, NOTE_G5,-8, NOTE_F5,-8, 82 83 NOTE_E5,8, NOTE_C5,4, NOTE_A4,8, NOTE_G4,2, //40 84 NOTE_E5,8, NOTE_C5,4, NOTE_G4,8, REST,4, NOTE_GS4,4, 85 NOTE_A4,8, NOTE_F5,4, NOTE_F5,8, NOTE_A4,2, 86 NOTE_B4,8, NOTE_F5,4, NOTE_F5,8, NOTE_F5,-8, NOTE_E5,-8, NOTE_D5,-8, 87 NOTE_C5,8, NOTE_E4,4, NOTE_E4,8, NOTE_C4,2, 88 89 //game over sound 90 NOTE_C5,-4, NOTE_G4,-4, NOTE_E4,4, //45 91 NOTE_A4,-8, NOTE_B4,-8, NOTE_A4,-8, NOTE_GS4,-8, NOTE_AS4,-8, NOTE_GS4,-8, 92 NOTE_G4,8, NOTE_D4,8, NOTE_E4,-2, 93};
got.h
c
.h file for a song
1int got_tempo = 85; 2 3// notes of the moledy followed by the duration. 4// a 4 means a quarter note, 8 an eighteenth , 16 sixteenth, so on 5// !!negative numbers are used to represent dotted notes, 6// so -4 means a dotted quarter note, that is, a quarter plus an eighteenth!! 7int got[] = { 8 9 // Game of Thrones 10 // Score available at https://musescore.com/user/8407786/scores/2156716 11 12 NOTE_G4,8, NOTE_C4,8, NOTE_DS4,16, NOTE_F4,16, NOTE_G4,8, NOTE_C4,8, NOTE_DS4,16, NOTE_F4,16, //1 13 NOTE_G4,8, NOTE_C4,8, NOTE_DS4,16, NOTE_F4,16, NOTE_G4,8, NOTE_C4,8, NOTE_DS4,16, NOTE_F4,16, 14 NOTE_G4,8, NOTE_C4,8, NOTE_E4,16, NOTE_F4,16, NOTE_G4,8, NOTE_C4,8, NOTE_E4,16, NOTE_F4,16, 15 NOTE_G4,8, NOTE_C4,8, NOTE_E4,16, NOTE_F4,16, NOTE_G4,8, NOTE_C4,8, NOTE_E4,16, NOTE_F4,16, 16 NOTE_G4,-4, NOTE_C4,-4,//5 17 18 NOTE_DS4,16, NOTE_F4,16, NOTE_G4,4, NOTE_C4,4, NOTE_DS4,16, NOTE_F4,16, //6 19 NOTE_D4,-1, //7 and 8 20 NOTE_F4,-4, NOTE_AS3,-4, 21 NOTE_DS4,16, NOTE_D4,16, NOTE_F4,4, NOTE_AS3,-4, 22 NOTE_DS4,16, NOTE_D4,16, NOTE_C4,-1, //11 and 12 23 24 //repeats from 5 25 NOTE_G4,-4, NOTE_C4,-4,//5 26 27 NOTE_DS4,16, NOTE_F4,16, NOTE_G4,4, NOTE_C4,4, NOTE_DS4,16, NOTE_F4,16, //6 28 NOTE_D4,-1, //7 and 8 29 NOTE_F4,-4, NOTE_AS3,-4, 30 NOTE_DS4,16, NOTE_D4,16, NOTE_F4,4, NOTE_AS3,-4, 31 NOTE_DS4,16, NOTE_D4,16, NOTE_C4,-1, //11 and 12 32 NOTE_G4,-4, NOTE_C4,-4, 33 NOTE_DS4,16, NOTE_F4,16, NOTE_G4,4, NOTE_C4,4, NOTE_DS4,16, NOTE_F4,16, 34 35 NOTE_D4,-2,//15 36 NOTE_F4,-4, NOTE_AS3,-4, 37 NOTE_D4,-8, NOTE_DS4,-8, NOTE_D4,-8, NOTE_AS3,-8, 38 NOTE_C4,-1, 39 NOTE_C5,-2, 40 NOTE_AS4,-2, 41 NOTE_C4,-2, 42 NOTE_G4,-2, 43 NOTE_DS4,-2, 44 NOTE_DS4,-4, NOTE_F4,-4, 45 NOTE_G4,-1, 46 47 NOTE_C5,-2,//28 48 NOTE_AS4,-2, 49 NOTE_C4,-2, 50 NOTE_G4,-2, 51 NOTE_DS4,-2, 52 NOTE_DS4,-4, NOTE_D4,-4, 53 NOTE_C5,8, NOTE_G4,8, NOTE_GS4,16, NOTE_AS4,16, NOTE_C5,8, NOTE_G4,8, NOTE_GS4,16, NOTE_AS4,16, 54 NOTE_C5,8, NOTE_G4,8, NOTE_GS4,16, NOTE_AS4,16, NOTE_C5,8, NOTE_G4,8, NOTE_GS4,16, NOTE_AS4,16, 55 56 REST,4, NOTE_GS5,16, NOTE_AS5,16, NOTE_C6,8, NOTE_G5,8, NOTE_GS5,16, NOTE_AS5,16, 57 NOTE_C6,8, NOTE_G5,16, NOTE_GS5,16, NOTE_AS5,16, NOTE_C6,8, NOTE_G5,8, NOTE_GS5,16, NOTE_AS5,16, 58};
animation.h
c
File containing animations
1const uint32_t animation[][4] = { 2 { 3 0x3fc70, 4 0xed9bd9bd, 5 0x9b70e000, 6 250 7 }, 8 { 9 0x3fc70, 10 0xee9dd9bb, 11 0x9770e000, 12 250 13 }, 14 { 15 0x3fc70, 16 0xef9f891f, 17 0x9f70e000, 18 250 19 }, 20 { 21 0x3fc70, 22 0xeb97d9be, 23 0x9d70e000, 24 250 25 } 26};
notes.h
c
.h file for notes that are used in songs
1#ifndef NOTES 2#define NOTES 3 4#define NOTE_B0 31 5#define NOTE_C1 33 6#define NOTE_CS1 35 7#define NOTE_D1 37 8#define NOTE_DS1 39 9#define NOTE_E1 41 10#define NOTE_F1 44 11#define NOTE_FS1 46 12#define NOTE_G1 49 13#define NOTE_GS1 52 14#define NOTE_A1 55 15#define NOTE_AS1 58 16#define NOTE_B1 62 17#define NOTE_C2 65 18#define NOTE_CS2 69 19#define NOTE_D2 73 20#define NOTE_DS2 78 21#define NOTE_E2 82 22#define NOTE_F2 87 23#define NOTE_FS2 93 24#define NOTE_G2 98 25#define NOTE_GS2 104 26#define NOTE_A2 110 27#define NOTE_AS2 117 28#define NOTE_B2 123 29#define NOTE_C3 131 30#define NOTE_CS3 139 31#define NOTE_D3 147 32#define NOTE_DS3 156 33#define NOTE_E3 165 34#define NOTE_F3 175 35#define NOTE_FS3 185 36#define NOTE_G3 196 37#define NOTE_GS3 208 38#define NOTE_A3 220 39#define NOTE_AS3 233 40#define NOTE_B3 247 41#define NOTE_C4 262 42#define NOTE_CS4 277 43#define NOTE_D4 294 44#define NOTE_DS4 311 45#define NOTE_E4 330 46#define NOTE_F4 349 47#define NOTE_FS4 370 48#define NOTE_G4 392 49#define NOTE_GS4 415 50#define NOTE_A4 440 51#define NOTE_AS4 466 52#define NOTE_B4 494 53#define NOTE_C5 523 54#define NOTE_CS5 554 55#define NOTE_D5 587 56#define NOTE_DS5 622 57#define NOTE_E5 659 58#define NOTE_F5 698 59#define NOTE_FS5 740 60#define NOTE_G5 784 61#define NOTE_GS5 831 62#define NOTE_A5 880 63#define NOTE_AS5 932 64#define NOTE_B5 988 65#define NOTE_C6 1047 66#define NOTE_CS6 1109 67#define NOTE_D6 1175 68#define NOTE_DS6 1245 69#define NOTE_E6 1319 70#define NOTE_F6 1397 71#define NOTE_FS6 1480 72#define NOTE_G6 1568 73#define NOTE_GS6 1661 74#define NOTE_A6 1760 75#define NOTE_AS6 1865 76#define NOTE_B6 1976 77#define NOTE_C7 2093 78#define NOTE_CS7 2217 79#define NOTE_D7 2349 80#define NOTE_DS7 2489 81#define NOTE_E7 2637 82#define NOTE_F7 2794 83#define NOTE_FS7 2960 84#define NOTE_G7 3136 85#define NOTE_GS7 3322 86#define NOTE_A7 3520 87#define NOTE_AS7 3729 88#define NOTE_B7 3951 89#define NOTE_C8 4186 90#define NOTE_CS8 4435 91#define NOTE_D8 4699 92#define NOTE_DS8 4978 93#define REST 0 94 95#endif
takeonme.h
c
.h file for a song
1// change this to make the song slower or faster 2int takeonme_tempo = 140; 3 4 5 6// notes of the moledy followed by the duration. 7// a 4 means a quarter note, 8 an eighteenth , 16 sixteenth, so on 8// !!negative numbers are used to represent dotted notes, 9// so -4 means a dotted quarter note, that is, a quarter plus an eighteenth!! 10int takeonme[] = { 11 12 // Take on me, by A-ha 13 // Score available at https://musescore.com/user/27103612/scores/4834399 14 // Arranged by Edward Truong 15 16 NOTE_FS5,8, NOTE_FS5,8,NOTE_D5,8, NOTE_B4,8, REST,8, NOTE_B4,8, REST,8, NOTE_E5,8, 17 REST,8, NOTE_E5,8, REST,8, NOTE_E5,8, NOTE_GS5,8, NOTE_GS5,8, NOTE_A5,8, NOTE_B5,8, 18 NOTE_A5,8, NOTE_A5,8, NOTE_A5,8, NOTE_E5,8, REST,8, NOTE_D5,8, REST,8, NOTE_FS5,8, 19 REST,8, NOTE_FS5,8, REST,8, NOTE_FS5,8, NOTE_E5,8, NOTE_E5,8, NOTE_FS5,8, NOTE_E5,8, 20 NOTE_FS5,8, NOTE_FS5,8,NOTE_D5,8, NOTE_B4,8, REST,8, NOTE_B4,8, REST,8, NOTE_E5,8, 21 22 REST,8, NOTE_E5,8, REST,8, NOTE_E5,8, NOTE_GS5,8, NOTE_GS5,8, NOTE_A5,8, NOTE_B5,8, 23 NOTE_A5,8, NOTE_A5,8, NOTE_A5,8, NOTE_E5,8, REST,8, NOTE_D5,8, REST,8, NOTE_FS5,8, 24 REST,8, NOTE_FS5,8, REST,8, NOTE_FS5,8, NOTE_E5,8, NOTE_E5,8, NOTE_FS5,8, NOTE_E5,8, 25 NOTE_FS5,8, NOTE_FS5,8,NOTE_D5,8, NOTE_B4,8, REST,8, NOTE_B4,8, REST,8, NOTE_E5,8, 26 REST,8, NOTE_E5,8, REST,8, NOTE_E5,8, NOTE_GS5,8, NOTE_GS5,8, NOTE_A5,8, NOTE_B5,8, 27 28 NOTE_A5,8, NOTE_A5,8, NOTE_A5,8, NOTE_E5,8, REST,8, NOTE_D5,8, REST,8, NOTE_FS5,8, 29 REST,8, NOTE_FS5,8, REST,8, NOTE_FS5,8, NOTE_E5,8, NOTE_E5,8, NOTE_FS5,8, NOTE_E5,8, 30 31};
Downloadable files
3D.step file
Step files for 3D models
file.None
3D design.stl file
stl file for 3D printing
3Ddesign.stl
Comments
Only logged in users can leave comments