Library to play tones and melodies over the DAC.
Dependents: 1620_Project_Template 1620_App_Board_DAC 1620_App_Board_DAC_Melody 1620_Project_Template ... more
Tone.h@0:836cdf67dbdb, 2017-03-08 (annotated)
- Committer:
- eencae
- Date:
- Wed Mar 08 17:15:42 2017 +0000
- Revision:
- 0:836cdf67dbdb
- Child:
- 1:f17240b3e85e
Changed note and duration arrays to int
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
eencae | 0:836cdf67dbdb | 1 | #ifndef TONE_H |
eencae | 0:836cdf67dbdb | 2 | #define TONE_H |
eencae | 0:836cdf67dbdb | 3 | |
eencae | 0:836cdf67dbdb | 4 | #include "mbed.h" |
eencae | 0:836cdf67dbdb | 5 | |
eencae | 0:836cdf67dbdb | 6 | #define PI 3.14159265359 |
eencae | 0:836cdf67dbdb | 7 | |
eencae | 0:836cdf67dbdb | 8 | class Tone { |
eencae | 0:836cdf67dbdb | 9 | |
eencae | 0:836cdf67dbdb | 10 | public: |
eencae | 0:836cdf67dbdb | 11 | |
eencae | 0:836cdf67dbdb | 12 | // constructor/destructor |
eencae | 0:836cdf67dbdb | 13 | Tone(PinName dacPin); |
eencae | 0:836cdf67dbdb | 14 | ~Tone(); |
eencae | 0:836cdf67dbdb | 15 | |
eencae | 0:836cdf67dbdb | 16 | // initialise the sine lookup table with number of notes |
eencae | 0:836cdf67dbdb | 17 | void init(); |
eencae | 0:836cdf67dbdb | 18 | |
eencae | 0:836cdf67dbdb | 19 | // play single note of specific duration |
eencae | 0:836cdf67dbdb | 20 | void play(const float frequency,const float duration); |
eencae | 0:836cdf67dbdb | 21 | |
eencae | 0:836cdf67dbdb | 22 | // play array of notes and duration, must send length and beats per minute |
eencae | 0:836cdf67dbdb | 23 | void play_melody(int length,const int *notes,const int *durations,float bpm,bool repeat); |
eencae | 0:836cdf67dbdb | 24 | |
eencae | 0:836cdf67dbdb | 25 | private: |
eencae | 0:836cdf67dbdb | 26 | |
eencae | 0:836cdf67dbdb | 27 | AnalogOut *dac; |
eencae | 0:836cdf67dbdb | 28 | Ticker *ticker; |
eencae | 0:836cdf67dbdb | 29 | Timeout *timeout; |
eencae | 0:836cdf67dbdb | 30 | Timeout *note_timeout; |
eencae | 0:836cdf67dbdb | 31 | |
eencae | 0:836cdf67dbdb | 32 | float *_sample_array; |
eencae | 0:836cdf67dbdb | 33 | const int *_notes; |
eencae | 0:836cdf67dbdb | 34 | const int *_durations; |
eencae | 0:836cdf67dbdb | 35 | |
eencae | 0:836cdf67dbdb | 36 | int _n; |
eencae | 0:836cdf67dbdb | 37 | int _melody_length; |
eencae | 0:836cdf67dbdb | 38 | volatile unsigned int _sample; |
eencae | 0:836cdf67dbdb | 39 | volatile unsigned int _note; |
eencae | 0:836cdf67dbdb | 40 | float _bpm; |
eencae | 0:836cdf67dbdb | 41 | bool _repeat; |
eencae | 0:836cdf67dbdb | 42 | |
eencae | 0:836cdf67dbdb | 43 | void ticker_isr(); |
eencae | 0:836cdf67dbdb | 44 | void timeout_isr(); |
eencae | 0:836cdf67dbdb | 45 | void note_timeout_isr(); |
eencae | 0:836cdf67dbdb | 46 | void play_next_note(); |
eencae | 0:836cdf67dbdb | 47 | |
eencae | 0:836cdf67dbdb | 48 | }; |
eencae | 0:836cdf67dbdb | 49 | |
eencae | 0:836cdf67dbdb | 50 | // Note definitions from Arduino.cc |
eencae | 0:836cdf67dbdb | 51 | #define NOTE_B0 31 |
eencae | 0:836cdf67dbdb | 52 | #define NOTE_C1 33 |
eencae | 0:836cdf67dbdb | 53 | #define NOTE_CS1 35 |
eencae | 0:836cdf67dbdb | 54 | #define NOTE_D1 37 |
eencae | 0:836cdf67dbdb | 55 | #define NOTE_DS1 39 |
eencae | 0:836cdf67dbdb | 56 | #define NOTE_E1 41 |
eencae | 0:836cdf67dbdb | 57 | #define NOTE_F1 44 |
eencae | 0:836cdf67dbdb | 58 | #define NOTE_FS1 46 |
eencae | 0:836cdf67dbdb | 59 | #define NOTE_G1 49 |
eencae | 0:836cdf67dbdb | 60 | #define NOTE_GS1 52 |
eencae | 0:836cdf67dbdb | 61 | #define NOTE_A1 55 |
eencae | 0:836cdf67dbdb | 62 | #define NOTE_AS1 58 |
eencae | 0:836cdf67dbdb | 63 | #define NOTE_B1 62 |
eencae | 0:836cdf67dbdb | 64 | #define NOTE_C2 65 |
eencae | 0:836cdf67dbdb | 65 | #define NOTE_CS2 69 |
eencae | 0:836cdf67dbdb | 66 | #define NOTE_D2 73 |
eencae | 0:836cdf67dbdb | 67 | #define NOTE_DS2 78 |
eencae | 0:836cdf67dbdb | 68 | #define NOTE_E2 82 |
eencae | 0:836cdf67dbdb | 69 | #define NOTE_F2 87 |
eencae | 0:836cdf67dbdb | 70 | #define NOTE_FS2 93 |
eencae | 0:836cdf67dbdb | 71 | #define NOTE_G2 98 |
eencae | 0:836cdf67dbdb | 72 | #define NOTE_GS2 104 |
eencae | 0:836cdf67dbdb | 73 | #define NOTE_A2 110 |
eencae | 0:836cdf67dbdb | 74 | #define NOTE_AS2 117 |
eencae | 0:836cdf67dbdb | 75 | #define NOTE_B2 123 |
eencae | 0:836cdf67dbdb | 76 | #define NOTE_C3 131 |
eencae | 0:836cdf67dbdb | 77 | #define NOTE_CS3 139 |
eencae | 0:836cdf67dbdb | 78 | #define NOTE_D3 147 |
eencae | 0:836cdf67dbdb | 79 | #define NOTE_DS3 156 |
eencae | 0:836cdf67dbdb | 80 | #define NOTE_E3 165 |
eencae | 0:836cdf67dbdb | 81 | #define NOTE_F3 175 |
eencae | 0:836cdf67dbdb | 82 | #define NOTE_FS3 185 |
eencae | 0:836cdf67dbdb | 83 | #define NOTE_G3 196 |
eencae | 0:836cdf67dbdb | 84 | #define NOTE_GS3 208 |
eencae | 0:836cdf67dbdb | 85 | #define NOTE_A3 220 |
eencae | 0:836cdf67dbdb | 86 | #define NOTE_AS3 233 |
eencae | 0:836cdf67dbdb | 87 | #define NOTE_B3 247 |
eencae | 0:836cdf67dbdb | 88 | #define NOTE_C4 262 |
eencae | 0:836cdf67dbdb | 89 | #define NOTE_CS4 277 |
eencae | 0:836cdf67dbdb | 90 | #define NOTE_D4 294 |
eencae | 0:836cdf67dbdb | 91 | #define NOTE_DS4 311 |
eencae | 0:836cdf67dbdb | 92 | #define NOTE_E4 330 |
eencae | 0:836cdf67dbdb | 93 | #define NOTE_F4 349 |
eencae | 0:836cdf67dbdb | 94 | #define NOTE_FS4 370 |
eencae | 0:836cdf67dbdb | 95 | #define NOTE_G4 392 |
eencae | 0:836cdf67dbdb | 96 | #define NOTE_GS4 415 |
eencae | 0:836cdf67dbdb | 97 | #define NOTE_A4 440 |
eencae | 0:836cdf67dbdb | 98 | #define NOTE_AS4 466 |
eencae | 0:836cdf67dbdb | 99 | #define NOTE_B4 494 |
eencae | 0:836cdf67dbdb | 100 | #define NOTE_C5 523 |
eencae | 0:836cdf67dbdb | 101 | #define NOTE_CS5 554 |
eencae | 0:836cdf67dbdb | 102 | #define NOTE_D5 587 |
eencae | 0:836cdf67dbdb | 103 | #define NOTE_DS5 622 |
eencae | 0:836cdf67dbdb | 104 | #define NOTE_E5 659 |
eencae | 0:836cdf67dbdb | 105 | #define NOTE_F5 698 |
eencae | 0:836cdf67dbdb | 106 | #define NOTE_FS5 740 |
eencae | 0:836cdf67dbdb | 107 | #define NOTE_G5 784 |
eencae | 0:836cdf67dbdb | 108 | #define NOTE_GS5 831 |
eencae | 0:836cdf67dbdb | 109 | #define NOTE_A5 880 |
eencae | 0:836cdf67dbdb | 110 | #define NOTE_AS5 932 |
eencae | 0:836cdf67dbdb | 111 | #define NOTE_B5 988 |
eencae | 0:836cdf67dbdb | 112 | #define NOTE_C6 1047 |
eencae | 0:836cdf67dbdb | 113 | #define NOTE_CS6 1109 |
eencae | 0:836cdf67dbdb | 114 | #define NOTE_D6 1175 |
eencae | 0:836cdf67dbdb | 115 | #define NOTE_DS6 1245 |
eencae | 0:836cdf67dbdb | 116 | #define NOTE_E6 1319 |
eencae | 0:836cdf67dbdb | 117 | #define NOTE_F6 1397 |
eencae | 0:836cdf67dbdb | 118 | #define NOTE_FS6 1480 |
eencae | 0:836cdf67dbdb | 119 | #define NOTE_G6 1568 |
eencae | 0:836cdf67dbdb | 120 | #define NOTE_GS6 1661 |
eencae | 0:836cdf67dbdb | 121 | #define NOTE_A6 1760 |
eencae | 0:836cdf67dbdb | 122 | #define NOTE_AS6 1865 |
eencae | 0:836cdf67dbdb | 123 | #define NOTE_B6 1976 |
eencae | 0:836cdf67dbdb | 124 | #define NOTE_C7 2093 |
eencae | 0:836cdf67dbdb | 125 | #define NOTE_CS7 2217 |
eencae | 0:836cdf67dbdb | 126 | #define NOTE_D7 2349 |
eencae | 0:836cdf67dbdb | 127 | #define NOTE_DS7 2489 |
eencae | 0:836cdf67dbdb | 128 | #define NOTE_E7 2637 |
eencae | 0:836cdf67dbdb | 129 | #define NOTE_F7 2794 |
eencae | 0:836cdf67dbdb | 130 | #define NOTE_FS7 2960 |
eencae | 0:836cdf67dbdb | 131 | #define NOTE_G7 3136 |
eencae | 0:836cdf67dbdb | 132 | #define NOTE_GS7 3322 |
eencae | 0:836cdf67dbdb | 133 | #define NOTE_A7 3520 |
eencae | 0:836cdf67dbdb | 134 | #define NOTE_AS7 3729 |
eencae | 0:836cdf67dbdb | 135 | #define NOTE_B7 3951 |
eencae | 0:836cdf67dbdb | 136 | #define NOTE_C8 4186 |
eencae | 0:836cdf67dbdb | 137 | #define NOTE_CS8 4435 |
eencae | 0:836cdf67dbdb | 138 | #define NOTE_D8 4699 |
eencae | 0:836cdf67dbdb | 139 | #define NOTE_DS8 4978 |
eencae | 0:836cdf67dbdb | 140 | |
eencae | 0:836cdf67dbdb | 141 | #endif |