Last active
November 9, 2024 14:51
-
-
Save fern89/a9eb30f9090ccb98b49f64c9d3ea6b17 to your computer and use it in GitHub Desktop.
Arduino code to play the song Thick Of It by KSI. Featuring arpeggios, wayyyy too much bitbanging, and works on a standard piezo. Notes from https://musescore.com/user/38836482/scores/21236776
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import mido, time | |
| mid = mido.MidiFile('thick.mid') | |
| def note2freq(note): | |
| if note == 0: | |
| return 0 | |
| a = 440 | |
| fq = (a / 32) * (2 ** ((note - 9) / 12)) | |
| return round(1000000 / (2 * fq)) | |
| notes = [] | |
| for track in mid.tracks: | |
| ctime = 0 | |
| cnote = 0 | |
| cp = [] | |
| for m in track: | |
| if m.type == "note_on": | |
| ctime += m.time | |
| if m.velocity != 0: | |
| #print("t =", ctime, "start", m.note) | |
| cp.append([note2freq(m.note), ctime]) | |
| else: | |
| #print("t =", ctime, "end", m.note) | |
| for x in cp: | |
| if x[0] == note2freq(m.note): | |
| notes.append(x + [ctime]) | |
| cp.remove(x) | |
| break | |
| notes.sort(key=lambda x: x[1]) | |
| nts = [] | |
| for x in notes: | |
| nts += x | |
| print(str(nts).replace("[", "{").replace("]", "}")) | |
| print(len(notes)) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const PROGMEM uint32_t chords[] = {4050, 0, 239, 2703, 240, 479, 2025, 480, 719, 2703, 720, 959, 5102, 960, 1199, 3405, 1200, 1439, 2551, 1440, 1679, 3405, 1680, 1919, 3405, 1920, 2159, 2273, 2160, 2399, 1703, 2400, 2639, 2273, 2640, 2879, 4545, 2880, 3119, 3034, 3120, 3359, 2273, 3360, 3599, 3034, 3600, 3839, 4050, 3840, 4079, 2703, 4080, 4319, 2025, 4320, 4559, 2703, 4560, 4799, 5102, 4800, 5039, 3405, 5040, 5279, 2551, 5280, 5519, 3405, 5520, 5759, 3405, 5760, 5999, 2273, 6000, 6239, 1703, 6240, 6479, 2273, 6480, 6719, 4545, 6720, 6959, 3034, 6960, 7199, 2273, 7200, 7439, 3034, 7440, 7679, 4050, 7680, 7919, 2703, 7920, 8159, 2025, 8160, 8399, 2703, 8400, 8639, 5102, 8640, 8879, 1012, 8880, 9119, 3405, 8880, 9119, 1012, 9120, 9359, 2551, 9120, 9359, 1012, 9360, 9599, 3405, 9360, 9599, 1136, 9600, 9839, 3405, 9600, 9839, 1351, 9840, 10079, 2273, 9840, 10079, 1351, 10080, 10319, 1703, 10080, 10319, 1351, 10320, 10559, 2273, 10320, 10559, 1517, 10560, 10799, 4545, 10560, 10799, 1517, 10800, 11039, 3034, 10800, 11039, 1703, 11040, 11279, 2273, 11040, 11279, 1517, 11280, 11519, 3034, 11280, 11519, 1351, 11520, 12119, 4050, 11520, 11759, 2703, 11760, 11999, 2025, 12000, 12239, 1351, 12240, 12479, 2703, 12240, 12479, 1351, 12480, 12719, 5102, 12480, 12719, 1351, 12720, 12959, 3405, 12720, 12959, 1703, 12960, 13199, 2551, 12960, 13199, 1517, 13200, 13439, 3405, 13200, 13439, 1351, 13440, 13679, 3405, 13440, 13679, 1351, 13680, 13919, 2273, 13680, 13919, 1703, 13920, 14159, 1517, 14160, 14399, 2273, 14160, 14399, 1351, 14400, 14639, 4545, 14400, 14639, 1351, 14640, 14879, 3034, 14640, 14879, 1703, 14880, 15119, 2273, 14880, 15119, 1517, 15120, 15359, 3034, 15120, 15359, 1351, 15360, 16079, 4050, 15360, 15599, 2703, 15600, 15839, 2025, 15840, 16079, 2703, 16080, 16319, 1351, 16320, 16439, 5102, 16320, 16559, 1351, 16560, 16799, 3405, 16560, 16799, 1703, 16800, 17039, 2551, 16800, 17039, 1517, 17040, 17279, 3405, 17040, 17279, 1351, 17280, 17519, 3405, 17280, 17519, 1351, 17520, 17759, 2273, 17520, 17759, 1703, 17760, 17760, 1703, 17760, 17999, 1517, 18000, 18239, 2273, 18000, 18239, 1351, 18240, 18479, 4545, 18240, 18479, 1351, 18480, 18719, 3034, 18480, 18719, 1703, 18720, 18959, 2273, 18720, 18959, 1517, 18960, 19199, 3034, 18960, 19199, 1351, 19200, 19799, 4050, 19200, 19439, 2703, 19440, 19679, 2025, 19680, 19919, 2703, 19920, 20159, 676, 20160, 20399, 5102, 20160, 20399, 676, 20400, 20639, 3405, 20400, 20639, 851, 20640, 20879, 2551, 20640, 20879, 758, 20880, 21119, 3405, 20880, 21119, 676, 21120, 21359, 3405, 21120, 21359, 676, 21360, 21599, 2273, 21360, 21599, 851, 21600, 21839, 1703, 21600, 21839, 758, 21840, 22079, 2273, 21840, 22079, 676, 22080, 22319, 4545, 22080, 22319, 758, 22320, 22559, 3034, 22320, 22559, 851, 22560, 22799, 2273, 22560, 22799, 1703, 22560, 22799, 902, 22800, 23039, 1703, 22800, 23039, 1012, 23040, 23279, 4050, 23040, 23279, 2703, 23280, 23519, 2025, 23520, 23759, 2703, 23760, 23999, 5102, 24000, 24239, 506, 24240, 24359, 3405, 24240, 24479, 506, 24480, 24599, 2551, 24480, 24719, 506, 24720, 24779, 3405, 24720, 24959, 506, 24840, 25019, 6810, 24960, 25199, 568, 25200, 25439, 4545, 25200, 25439, 568, 25440, 25679, 3405, 25440, 25679, 568, 25680, 25919, 4545, 25680, 25919, 676, 25920, 26159, 4545, 25920, 26159, 851, 26160, 26399, 3034, 26160, 26399, 851, 26400, 26639, 2273, 26400, 26639, 758, 26640, 26879, 3034, 26640, 26879, 676, 26880, 27839, 4050, 26880, 27119, 2703, 27120, 27359, 2025, 27360, 27599, 2703, 27600, 27839, 5102, 27840, 28079, 676, 28080, 28319, 3405, 28080, 28319, 676, 28320, 28559, 2551, 28320, 28559, 676, 28560, 28679, 3405, 28560, 28799, 676, 28680, 29039, 6810, 28800, 29039, 851, 29040, 29279, 4545, 29040, 29279, 851, 29280, 29519, 3405, 29280, 29519, 758, 29520, 29759, 4545, 29520, 29759, 676, 29760, 29999, 4545, 29760, 29999, 758, 30000, 30239, 3034, 30000, 30239, 851, 30240, 30479, 2273, 30240, 30479, 902, 30480, 30719, 3034, 30480, 30719, 1012, 30720, 31679, 4050, 30720, 30959, 2703, 30960, 31199, 2025, 31200, 31439, 2703, 31440, 31679, 5102, 31680, 31919, 506, 31920, 32159, 3405, 31920, 32159, 506, 32160, 32399, 2551, 32160, 32399, 506, 32400, 32639, 3405, 32400, 32639, 506, 32640, 32759, 6810, 32640, 32879, 568, 32760, 32879, 4545, 32880, 33119, 568, 33000, 33119, 568, 33120, 33359, 3405, 33120, 33359, 426, 33360, 33479, 4545, 33360, 33599, 426, 33600, 33839, 4545, 33600, 33839, 851, 33840, 34079, 3034, 33840, 34079, 851, 34080, 34319, 2273, 34080, 34319, 758, 34320, 34559, 3034, 34320, 34559, 676, 34560, 35519, 4050, 34560, 34799, 2703, 34800, 35039, 2025, 35040, 35279, 2703, 35280, 35519, 5102, 35520, 35759, 676, 35760, 35999, 3405, 35760, 35999, 676, 36000, 36239, 2551, 36000, 36239, 676, 36240, 36359, 3405, 36240, 36479, 676, 36360, 36719, 6810, 36480, 36719, 758, 36720, 36959, 4545, 36720, 36959, 758, 36960, 37199, 3405, 36960, 37199, 758, 37200, 37439, 4545, 37200, 37439, 758, 37440, 37679, 4545, 37440, 37679, 758, 37680, 37799, 3034, 37680, 37919, 676, 37800, 37919, 758, 37920, 38159, 2273, 37920, 38159, 851, 38160, 38399, 3034, 38160, 38399, 1012, 38400, 39599, 4050, 38400, 38879, 2703, 38400, 38879, 2025, 38400, 38879, 5102, 39360, 39839, 3405, 39360, 39839, 2551, 39360, 39839, 1012, 39840, 40079, 1136, 40080, 40799, 6810, 40320, 40799, 4545, 40320, 40799, 3405, 40320, 40799, 1012, 40800, 41039, 1136, 41040, 41759, 4545, 41280, 41759, 3034, 41280, 41759, 2273, 41280, 41759, 1276, 41760, 41999, 1351, 42000, 43199, 4050, 42240, 42719, 2703, 42240, 42719, 2025, 42240, 42719, 5102, 43200, 43679, 3405, 43200, 43679, 2551, 43200, 43679, 1351, 43440, 43679, 1351, 43680, 43919, 1517, 43920, 44639, 6810, 44160, 44639, 4545, 44160, 44639, 3405, 44160, 44639, 1351, 44640, 44879, 1517, 44880, 45599, 4545, 45120, 45599, 3034, 45120, 45599, 2273, 45120, 45599, 1703, 45600, 45839, 1351, 45840, 47039, 4050, 46080, 46559, 2703, 46080, 46559, 2025, 46080, 46559, 5102, 47040, 47519, 3405, 47040, 47519, 2551, 47040, 47519, 1012, 47520, 47759, 1136, 47760, 48479, 6810, 48000, 48479, 4545, 48000, 48479, 3405, 48000, 48479, 1012, 48480, 48719, 1136, 48720, 49439, 4545, 48960, 49439, 3034, 48960, 49439, 2273, 48960, 49439, 1276, 49440, 49679, 1351, 49680, 50879, 4050, 49920, 50399, 2703, 49920, 50399, 2025, 49920, 50399, 5102, 50880, 51359, 3405, 50880, 51359, 2551, 50880, 51359, 1351, 51120, 51359, 1012, 51120, 51359, 1351, 51360, 51599, 676, 51360, 51599, 1517, 51600, 52319, 758, 51600, 52319, 6810, 51840, 52319, 4545, 51840, 52319, 3405, 51840, 52319, 1351, 52320, 52559, 676, 52320, 52559, 1517, 52560, 53279, 758, 52560, 53279, 4545, 52800, 53279, 3034, 52800, 53279, 2273, 52800, 53279, 1703, 53280, 53759, 851, 53280, 53759, 1012, 53760, 54719, 4050, 53760, 53999, 2703, 54000, 54239, 2025, 54240, 54479, 2703, 54480, 54719, 5102, 54720, 54959, 1012, 54960, 55199, 3405, 54960, 55199, 1012, 55200, 55439, 2551, 55200, 55439, 1012, 55440, 55679, 3405, 55440, 55679, 1136, 55680, 55919, 3405, 55680, 55919, 1351, 55920, 56159, 2273, 55920, 56159, 1351, 56160, 56399, 1703, 56160, 56399, 1351, 56400, 56639, 2273, 56400, 56639, 1517, 56640, 56879, 4545, 56640, 56879, 1517, 56880, 57119, 3034, 56880, 57119, 1703, 57120, 57359, 2273, 57120, 57359, 1517, 57360, 57599, 3034, 57360, 57599, 1351, 57600, 58199, 4050, 57600, 57839, 2703, 57840, 58079, 2025, 58080, 58319, 1351, 58320, 58559, 2703, 58320, 58559, 1351, 58560, 58799, 5102, 58560, 58799, 1351, 58800, 59039, 3405, 58800, 59039, 1703, 59040, 59279, 2551, 59040, 59279, 1517, 59280, 59519, 3405, 59280, 59519, 1351, 59520, 59759, 3405, 59520, 59759, 1351, 59760, 59999, 2273, 59760, 59999, 1703, 60000, 60000, 1703, 60000, 60239, 1517, 60240, 60479, 2273, 60240, 60479, 1351, 60480, 60719, 4545, 60480, 60719, 1517, 60720, 60959, 3034, 60720, 60959, 1703, 60960, 61199, 2273, 60960, 61199, 1804, 61200, 61439, 3034, 61200, 61439, 2025, 61440, 61440, 4050, 61440, 61919, 2703, 61440, 61919, 2025, 61440, 61919, 1012, 61920, 62039, 1012, 62040, 62399, 1136, 62400, 62879, 5102, 62400, 62879, 3405, 62400, 62879, 2551, 62400, 62879, 1136, 62880, 62999, 1136, 63000, 63359, 1136, 63360, 63839, 6810, 63360, 63839, 4545, 63360, 63839, 3405, 63360, 63839, 1136, 63840, 63959, 1136, 63960, 64319, 851, 64320, 64799, 4545, 64320, 64799, 3034, 64320, 64799, 2273, 64320, 64799, 1517, 64800, 64919, 1517, 64920, 65279, 1351, 65280, 65519, 4050, 65280, 65759, 2703, 65280, 65759, 2025, 65280, 65759, 1351, 65520, 65759, 1351, 65760, 65999, 1351, 66000, 66239, 1517, 66240, 66479, 5102, 66240, 66719, 3405, 66240, 66719, 2551, 66240, 66719, 1517, 66480, 66719, 1517, 66720, 66959, 1517, 66960, 67199, 1517, 67200, 67439, 6810, 67200, 67679, 4545, 67200, 67679, 3405, 67200, 67679, 1517, 67440, 67679, 1517, 67680, 67919, 1517, 67920, 68159, 1517, 68160, 68399, 4545, 68160, 68639, 3034, 68160, 68639, 2273, 68160, 68639, 1351, 68400, 68639, 1517, 68640, 68879, 1703, 68880, 69119, 4050, 69120, 69359, 2703, 69360, 69599, 2025, 69600, 69839, 2703, 69840, 70079, 5102, 70080, 70319, 1012, 70320, 70439, 3405, 70320, 70559, 1012, 70560, 70679, 2551, 70560, 70799, 1012, 70800, 70859, 3405, 70800, 71039, 1012, 70920, 71099, 3405, 71040, 71279, 1136, 71280, 71519, 2273, 71280, 71519, 1136, 71520, 71759, 1703, 71520, 71759, 851, 71760, 71999, 2273, 71760, 71999, 851, 72000, 72239, 4545, 72000, 72239, 1703, 72240, 72479, 3034, 72240, 72479, 1703, 72480, 72719, 2273, 72480, 72719, 1517, 72720, 72959, 3034, 72720, 72959, 1351, 72960, 73559, 4050, 72960, 73199, 2703, 73200, 73439, 2025, 73440, 73679, 2703, 73680, 73919, 5102, 73920, 74159, 1351, 74160, 74279, 676, 74160, 74279, 3405, 74160, 74399, 1351, 74400, 74519, 676, 74400, 74519, 2551, 74400, 74639, 1351, 74640, 74699, 676, 74640, 74699, 3405, 74640, 74879, 1351, 74760, 75059, 676, 74760, 75059, 3405, 74880, 75119, 1517, 75120, 75359, 758, 75120, 75359, 2273, 75120, 75359, 1517, 75360, 75599, 758, 75360, 75599, 1703, 75360, 75599, 1517, 75600, 75839, 758, 75600, 75839, 2273, 75600, 75839, 1517, 75840, 76079, 758, 75840, 76079, 4545, 75840, 76079, 1351, 76080, 76319, 676, 76080, 76319, 3034, 76080, 76319, 1517, 76320, 76559, 758, 76320, 76559, 2273, 76320, 76559, 1703, 76560, 76799, 851, 76560, 76799, 3034, 76560, 76799, 2025, 76800, 76800, 1012, 76800, 77999, 4050, 76800, 77279, 2703, 76800, 77279, 2025, 76800, 77999, 5102, 77760, 78239, 3405, 77760, 78239, 2551, 77760, 78239, 1012, 78240, 78479, 1136, 78480, 79199, 6810, 78720, 79199, 4545, 78720, 79199, 3405, 78720, 79199, 1012, 79200, 79439, 1136, 79440, 80159, 4545, 79680, 80159, 3034, 79680, 80159, 2273, 79680, 80159, 1276, 80160, 80399, 1351, 80400, 81599, 4050, 80640, 81119, 2703, 80640, 81119, 2025, 80640, 81119, 5102, 81600, 82079, 3405, 81600, 82079, 2551, 81600, 82079, 1351, 81840, 82079, 1351, 82080, 82319, 1517, 82320, 83039, 6810, 82560, 83039, 4545, 82560, 83039, 3405, 82560, 83039, 1351, 83040, 83279, 1517, 83280, 83999, 4545, 83520, 83999, 3034, 83520, 83999, 2273, 83520, 83999, 1703, 84000, 84239, 1351, 84240, 85439, 4050, 84480, 84959, 2703, 84480, 84959, 2025, 84480, 84959, 5102, 85440, 85919, 3405, 85440, 85919, 2551, 85440, 85919, 1012, 85920, 86159, 1136, 86160, 86879, 6810, 86400, 86879, 4545, 86400, 86879, 3405, 86400, 86879, 1012, 86880, 87119, 1136, 87120, 87839, 4545, 87360, 87839, 3034, 87360, 87839, 2273, 87360, 87839, 1276, 87840, 88079, 1351, 88080, 89279, 4050, 88320, 88799, 2703, 88320, 88799, 2025, 88320, 88799, 5102, 89280, 89759, 3405, 89280, 89759, 2551, 89280, 89759, 1351, 89520, 89759, 1012, 89520, 89759, 1351, 89760, 89999, 676, 89760, 89999, 1517, 90000, 90719, 758, 90000, 90719, 6810, 90240, 90719, 4545, 90240, 90719, 3405, 90240, 90719, 1351, 90720, 90959, 676, 90720, 90959, 1517, 90960, 91679, 758, 90960, 91679, 4545, 91200, 91679, 3034, 91200, 91679, 2273, 91200, 91679, 1703, 91680, 92159, 851, 91680, 92159, 2025, 92160, 92160, 1012, 92160, 93599, 4050, 92160, 92639, 2703, 92160, 92639, 2025, 92160, 93599, 5102, 93120, 93599, 3405, 93120, 93599, 2551, 93120, 93599, 1012, 93600, 93839, 1136, 93840, 94559, 6810, 94080, 94559, 4545, 94080, 94559, 3405, 94080, 94559, 1012, 94560, 94799, 1136, 94800, 95519, 4545, 95040, 95519, 3034, 95040, 95519, 2273, 95040, 95519, 1276, 95520, 95759, 1351, 95760, 96959, 4050, 96000, 96479, 2703, 96000, 96479, 2025, 96000, 96479, 5102, 96960, 97439, 3405, 96960, 97439, 2551, 96960, 97439, 1351, 97200, 97439, 1351, 97440, 97679, 1517, 97680, 98399, 6810, 97920, 98399, 4545, 97920, 98399, 3405, 97920, 98399, 1351, 98400, 98639, 1517, 98640, 99359, 4545, 98880, 99359, 3034, 98880, 99359, 2273, 98880, 99359, 1703, 99360, 99599, 1351, 99600, 100799, 4050, 99840, 100319, 2703, 99840, 100319, 2025, 99840, 100319, 5102, 100800, 101279, 3405, 100800, 101279, 2551, 100800, 101279, 1012, 101280, 101519, 1136, 101520, 102239, 6810, 101760, 102239, 4545, 101760, 102239, 3405, 101760, 102239, 1012, 102240, 102479, 1136, 102480, 103199, 4545, 102720, 103199, 3034, 102720, 103199, 2273, 102720, 103199, 1276, 103200, 103439, 1351, 103440, 104639, 4050, 103680, 104159, 2703, 103680, 104159, 2025, 103680, 104159, 5102, 104640, 105119, 3405, 104640, 105119, 2551, 104640, 105119, 1351, 104880, 105119, 1012, 104880, 105119, 1351, 105120, 105359, 676, 105120, 105359, 1517, 105360, 106079, 758, 105360, 106079, 6810, 105600, 106079, 4545, 105600, 106079, 3405, 105600, 106079, 1351, 106080, 106319, 676, 106080, 106319, 1517, 106320, 107039, 758, 106320, 107039, 4545, 106560, 107039, 3034, 106560, 107039, 2273, 106560, 107039, 1703, 107040, 107519, 851, 107040, 107519, 2025, 107520, 107999, 1012, 107520, 107999, 4050, 107520, 107759, 2703, 107760, 107999, 2025, 108000, 108239, 2703, 108240, 108479, 5102, 108480, 108719, 1012, 108720, 108959, 3405, 108720, 108959, 1012, 108960, 109199, 2551, 108960, 109199, 1012, 109200, 109439, 3405, 109200, 109439, 1136, 109440, 109679, 3405, 109440, 109679, 1351, 109680, 109919, 2273, 109680, 109919, 1351, 109920, 110399, 1703, 109920, 110159, 2273, 110160, 110399, 1517, 110400, 110639, 4545, 110400, 110639, 1517, 110640, 110879, 3034, 110640, 110879, 1703, 110880, 111119, 2273, 110880, 111119, 1517, 111120, 111359, 3034, 111120, 111359, 1351, 111360, 111959, 4050, 111360, 111599, 2703, 111600, 111839, 2025, 111840, 112079, 1351, 112080, 112319, 2703, 112080, 112319, 1351, 112320, 112559, 5102, 112320, 112559, 1351, 112560, 112799, 3405, 112560, 112799, 1703, 112800, 113039, 2551, 112800, 113039, 1517, 113040, 113279, 3405, 113040, 113279, 1351, 113280, 113519, 3405, 113280, 113519, 1351, 113520, 113759, 2273, 113520, 113759, 1703, 113760, 113760, 1703, 113760, 113999, 1703, 114000, 114239, 1517, 114000, 114239, 2273, 114000, 114239, 1351, 114240, 114479, 4545, 114240, 114479, 1517, 114480, 114719, 3034, 114480, 114719, 1517, 114720, 114959, 2273, 114720, 114959, 1703, 114960, 115199, 3034, 114960, 115199, 1351, 115200, 115679, 4050, 115200, 115439, 2703, 115440, 115679, 1351, 115680, 115919, 2025, 115680, 115919, 2703, 115920, 116159, 1351, 116160, 116399, 5102, 116160, 116399, 1351, 116400, 116639, 3405, 116400, 116639, 1703, 116640, 116879, 2551, 116640, 116879, 1517, 116880, 117119, 3405, 116880, 117119, 1351, 117120, 117359, 3405, 117120, 117359, 1351, 117360, 117599, 2273, 117360, 117599, 1703, 117600, 117600, 1703, 117600, 117839, 1517, 117840, 118079, 2273, 117840, 118079, 1351, 118080, 118319, 4545, 118080, 118319, 1351, 118320, 118559, 3034, 118320, 118559, 1703, 118560, 118799, 2273, 118560, 118799, 1517, 118800, 119039, 3034, 118800, 119039, 1351, 119040, 119639, 4050, 119040, 119279, 2703, 119280, 119519, 2025, 119520, 119759, 2703, 119760, 119999, 1351, 120000, 120239, 5102, 120000, 120239, 1351, 120240, 120479, 3405, 120240, 120479, 1703, 120480, 120719, 2551, 120480, 120719, 1517, 120720, 120959, 3405, 120720, 120959, 1351, 120960, 121199, 3405, 120960, 121199, 1351, 121200, 121439, 2273, 121200, 121439, 1703, 121440, 121440, 1703, 121440, 121679, 1517, 121680, 121919, 2273, 121680, 121919, 1351, 121920, 122159, 4545, 121920, 122159, 1517, 122160, 122399, 3034, 122160, 122399, 1703, 122400, 122639, 2273, 122400, 122639, 1804, 122640, 122879, 3034, 122640, 122879, 4050, 122880, 123119, 2703, 123120, 123359, 2025, 123360, 123599, 2703, 123600, 123839, 5102, 123840, 124079, 506, 124080, 124199, 3405, 124080, 124319, 506, 124320, 124439, 2551, 124320, 124559, 506, 124560, 124619, 3405, 124560, 124799, 506, 124680, 124859, 3405, 124800, 125039, 568, 125040, 125279, 2273, 125040, 125279, 568, 125280, 125519, 1703, 125280, 125519, 568, 125520, 125759, 2273, 125520, 125759, 676, 125760, 125999, 4545, 125760, 125999, 851, 126000, 126239, 3034, 126000, 126239, 851, 126240, 126479, 2273, 126240, 126479, 758, 126480, 126719, 3034, 126480, 126719, 676, 126720, 127679, 4050, 126720, 126959, 2703, 126960, 127199, 2025, 127200, 127439, 2703, 127440, 127679, 5102, 127680, 127919, 676, 127920, 128159, 3405, 127920, 128159, 676, 128160, 128399, 2551, 128160, 128399, 676, 128400, 128519, 3405, 128400, 128639, 676, 128520, 128879, 3405, 128640, 128879, 851, 128880, 129119, 2273, 128880, 129119, 851, 129120, 129359, 1703, 129120, 129359, 758, 129360, 129599, 2273, 129360, 129599, 676, 129600, 129839, 4545, 129600, 129839, 758, 129840, 130079, 3034, 129840, 130079, 851, 130080, 130319, 2273, 130080, 130319, 902, 130320, 130559, 3034, 130320, 130559, 2025, 130560, 130560, 4050, 130560, 131039, 2703, 130560, 131039, 2025, 130560, 131039, 1351, 130800, 131039, 1012, 131040, 131279, 1351, 131280, 131519, 2551, 131520, 131520, 5102, 131520, 131999, 3405, 131520, 131999, 2551, 131520, 131999, 1703, 131760, 131999, 1012, 132000, 132239, 1136, 132240, 132959, 6810, 132480, 132959, 4545, 132480, 132959, 3405, 132480, 132959, 1012, 132960, 133199, 1136, 133200, 133919, 4545, 133440, 133919, 3034, 133440, 133919, 2273, 133440, 133919, 1276, 133920, 134159, 1351, 134160, 135359, 4050, 134400, 134879, 2703, 134400, 134879, 2025, 134400, 134879, 5102, 135360, 135839, 3405, 135360, 135839, 2551, 135360, 135839, 1351, 135600, 135839, 1012, 135600, 135839, 1351, 135840, 136079, 676, 135840, 136079, 1517, 136080, 136799, 758, 136080, 136799, 6810, 136320, 136799, 4545, 136320, 136799, 3405, 136320, 136799, 1351, 136800, 137039, 676, 136800, 137039, 1517, 137040, 137759, 758, 137040, 137759, 4545, 137280, 137759, 3034, 137280, 137759, 2273, 137280, 137759, 1703, 137760, 137999, 851, 137760, 137999, 1351, 138000, 139199, 676, 138000, 139199, 4050, 138240, 138719, 2703, 138240, 138719, 2025, 138240, 138719, 5102, 139200, 139679, 3405, 139200, 139679, 2551, 139200, 139679, 1012, 139680, 139919, 1136, 139920, 140639, 6810, 140160, 140639, 4545, 140160, 140639, 3405, 140160, 140639, 1012, 140640, 140879, 1136, 140880, 141599, 4545, 141120, 141599, 3034, 141120, 141599, 2273, 141120, 141599, 1276, 141600, 141839, 1351, 141840, 143039, 4050, 142080, 142559, 2703, 142080, 142559, 2025, 142080, 142559, 5102, 143040, 143519, 3405, 143040, 143519, 2551, 143040, 143519, 1012, 143280, 143519, 676, 143520, 143759, 758, 143760, 144479, 6810, 144000, 144479, 4545, 144000, 144479, 3405, 144000, 144479, 676, 144480, 144719, 758, 144720, 145439, 4545, 144960, 145439, 3034, 144960, 145439, 2273, 144960, 145439, 851, 145440, 145919, 1012, 145920, 147359, 4050, 145920, 146399, 2703, 145920, 146399, 2025, 145920, 146399, 5102, 146880, 147359, 3405, 146880, 147359, 2551, 146880, 147359, 1012, 147360, 147599, 506, 147360, 147599, 1136, 147600, 148319, 568, 147600, 148319, 6810, 147840, 148319, 4545, 147840, 148319, 3405, 147840, 148319, 1012, 148320, 148559, 506, 148320, 148559, 1136, 148560, 149279, 568, 148560, 149279, 4545, 148800, 149279, 3034, 148800, 149279, 2273, 148800, 149279, 1276, 149280, 149519, 638, 149280, 149519, 1351, 149520, 150719, 676, 149520, 150719, 4050, 149760, 150239, 2703, 149760, 150239, 2025, 149760, 150239, 5102, 150720, 151199, 3405, 150720, 151199, 2551, 150720, 151199, 1351, 150960, 151199, 676, 150960, 151199, 1351, 151200, 151439, 676, 151200, 151439, 1517, 151440, 152159, 758, 151440, 152159, 6810, 151680, 152159, 4545, 151680, 152159, 3405, 151680, 152159, 1351, 152160, 152399, 676, 152160, 152399, 1517, 152400, 153119, 758, 152400, 153119, 4545, 152640, 153119, 3034, 152640, 153119, 2273, 152640, 153119, 1703, 153120, 153359, 851, 153120, 153359, 1351, 153360, 154559, 676, 153360, 154559, 4050, 153600, 154079, 2703, 153600, 154079, 2025, 153600, 154079, 5102, 154560, 155039, 3405, 154560, 155039, 2551, 154560, 155039, 1012, 155040, 155279, 506, 155040, 155279, 1136, 155280, 155999, 568, 155280, 155999, 6810, 155520, 155999, 4545, 155520, 155999, 3405, 155520, 155999, 1012, 156000, 156239, 506, 156000, 156239, 1136, 156240, 156959, 568, 156240, 156959, 4545, 156480, 156959, 3034, 156480, 156959, 2273, 156480, 156959, 1276, 156960, 157199, 638, 156960, 157199, 1351, 157200, 158399, 676, 157200, 158399, 4050, 157440, 157919, 2703, 157440, 157919, 2025, 157440, 157919, 5102, 158400, 158879, 3405, 158400, 158879, 2551, 158400, 158879, 1012, 158640, 158879, 506, 158640, 158879, 676, 158880, 159119, 338, 158880, 159119, 758, 159120, 159839, 379, 159120, 159839, 6810, 159360, 159839, 4545, 159360, 159839, 3405, 159360, 159839, 676, 159840, 160079, 338, 159840, 160079, 758, 160080, 160799, 379, 160080, 160799, 4545, 160320, 160799, 3034, 160320, 160799, 2273, 160320, 160799, 851, 160800, 161279, 426, 160800, 161279, 1012, 161280, 161519, 506, 161280, 161519, 4050, 161280, 161759, 2703, 161280, 161759, 2025, 161280, 161759};; | |
| const int nnotes = 1042; | |
| #define DEBUG | |
| void playTone(int tone, int duration){ | |
| if(tone == 0){ | |
| delay(duration); | |
| return; | |
| } | |
| unsigned long t0 = millis(); | |
| while((millis() - t0) < duration){ | |
| digitalWrite(10, HIGH); | |
| digitalWrite(11, LOW); | |
| delayMicroseconds(tone); | |
| digitalWrite(10, LOW); | |
| digitalWrite(11, HIGH); | |
| delayMicroseconds(tone); | |
| } | |
| } | |
| void setup(){ | |
| pinMode(10, OUTPUT); | |
| pinMode(11, OUTPUT); | |
| #ifdef DEBUG | |
| Serial.begin(9600); | |
| #endif | |
| } | |
| void loop(){ | |
| unsigned long play[10] = {0}; | |
| unsigned long tend[10] = {0}; | |
| unsigned long t0 = millis(); | |
| int j=0; | |
| while(1){ | |
| if(j < nnotes){ | |
| while(j < nnotes && pgm_read_dword_near(chords+j*3+1) < (millis() - t0)){ | |
| int k = 0; | |
| while(tend[k] != 0) k++; | |
| play[k] = pgm_read_dword_near(chords+j*3); | |
| tend[k] = pgm_read_dword_near(chords+j*3+2); | |
| #ifdef DEBUG | |
| Serial.print("Started "); | |
| Serial.print(play[k]); | |
| Serial.print(" at "); | |
| Serial.println(tend[k]); | |
| #endif | |
| j++; | |
| } | |
| } | |
| for(int i=0;i<10;i++){ | |
| if(tend[i] != 0){ | |
| playTone(play[i], 10); | |
| if((millis() - t0) > tend[i]){ | |
| #ifdef DEBUG | |
| Serial.print("Ended "); | |
| Serial.print(play[i]); | |
| Serial.print(" at "); | |
| Serial.println(tend[i]); | |
| #endif | |
| tend[i] = 0; | |
| } | |
| } | |
| } | |
| if(j >= nnotes){ | |
| bool fin = true; | |
| for(int i=0;i<10;i++) if(tend[i] != 0) fin = false; | |
| if(fin) break; | |
| } | |
| } | |
| delay(5000); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment