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

Committer:
eencae
Date:
Fri Apr 20 13:59:18 2018 +0000
Revision:
1:f17240b3e85e
Parent:
0:836cdf67dbdb
Added set_bpm method.

Who changed what in which revision?

UserRevisionLine numberNew 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 1:f17240b3e85e 24
eencae 1:f17240b3e85e 25 // change the BPM
eencae 1:f17240b3e85e 26 void set_bpm(float bpm);
eencae 0:836cdf67dbdb 27
eencae 0:836cdf67dbdb 28 private:
eencae 0:836cdf67dbdb 29
eencae 0:836cdf67dbdb 30 AnalogOut *dac;
eencae 0:836cdf67dbdb 31 Ticker *ticker;
eencae 0:836cdf67dbdb 32 Timeout *timeout;
eencae 0:836cdf67dbdb 33 Timeout *note_timeout;
eencae 0:836cdf67dbdb 34
eencae 0:836cdf67dbdb 35 float *_sample_array;
eencae 0:836cdf67dbdb 36 const int *_notes;
eencae 0:836cdf67dbdb 37 const int *_durations;
eencae 0:836cdf67dbdb 38
eencae 0:836cdf67dbdb 39 int _n;
eencae 0:836cdf67dbdb 40 int _melody_length;
eencae 0:836cdf67dbdb 41 volatile unsigned int _sample;
eencae 0:836cdf67dbdb 42 volatile unsigned int _note;
eencae 0:836cdf67dbdb 43 float _bpm;
eencae 0:836cdf67dbdb 44 bool _repeat;
eencae 0:836cdf67dbdb 45
eencae 0:836cdf67dbdb 46 void ticker_isr();
eencae 0:836cdf67dbdb 47 void timeout_isr();
eencae 0:836cdf67dbdb 48 void note_timeout_isr();
eencae 0:836cdf67dbdb 49 void play_next_note();
eencae 0:836cdf67dbdb 50
eencae 0:836cdf67dbdb 51 };
eencae 0:836cdf67dbdb 52
eencae 0:836cdf67dbdb 53 // Note definitions from Arduino.cc
eencae 0:836cdf67dbdb 54 #define NOTE_B0 31
eencae 0:836cdf67dbdb 55 #define NOTE_C1 33
eencae 0:836cdf67dbdb 56 #define NOTE_CS1 35
eencae 0:836cdf67dbdb 57 #define NOTE_D1 37
eencae 0:836cdf67dbdb 58 #define NOTE_DS1 39
eencae 0:836cdf67dbdb 59 #define NOTE_E1 41
eencae 0:836cdf67dbdb 60 #define NOTE_F1 44
eencae 0:836cdf67dbdb 61 #define NOTE_FS1 46
eencae 0:836cdf67dbdb 62 #define NOTE_G1 49
eencae 0:836cdf67dbdb 63 #define NOTE_GS1 52
eencae 0:836cdf67dbdb 64 #define NOTE_A1 55
eencae 0:836cdf67dbdb 65 #define NOTE_AS1 58
eencae 0:836cdf67dbdb 66 #define NOTE_B1 62
eencae 0:836cdf67dbdb 67 #define NOTE_C2 65
eencae 0:836cdf67dbdb 68 #define NOTE_CS2 69
eencae 0:836cdf67dbdb 69 #define NOTE_D2 73
eencae 0:836cdf67dbdb 70 #define NOTE_DS2 78
eencae 0:836cdf67dbdb 71 #define NOTE_E2 82
eencae 0:836cdf67dbdb 72 #define NOTE_F2 87
eencae 0:836cdf67dbdb 73 #define NOTE_FS2 93
eencae 0:836cdf67dbdb 74 #define NOTE_G2 98
eencae 0:836cdf67dbdb 75 #define NOTE_GS2 104
eencae 0:836cdf67dbdb 76 #define NOTE_A2 110
eencae 0:836cdf67dbdb 77 #define NOTE_AS2 117
eencae 0:836cdf67dbdb 78 #define NOTE_B2 123
eencae 0:836cdf67dbdb 79 #define NOTE_C3 131
eencae 0:836cdf67dbdb 80 #define NOTE_CS3 139
eencae 0:836cdf67dbdb 81 #define NOTE_D3 147
eencae 0:836cdf67dbdb 82 #define NOTE_DS3 156
eencae 0:836cdf67dbdb 83 #define NOTE_E3 165
eencae 0:836cdf67dbdb 84 #define NOTE_F3 175
eencae 0:836cdf67dbdb 85 #define NOTE_FS3 185
eencae 0:836cdf67dbdb 86 #define NOTE_G3 196
eencae 0:836cdf67dbdb 87 #define NOTE_GS3 208
eencae 0:836cdf67dbdb 88 #define NOTE_A3 220
eencae 0:836cdf67dbdb 89 #define NOTE_AS3 233
eencae 0:836cdf67dbdb 90 #define NOTE_B3 247
eencae 0:836cdf67dbdb 91 #define NOTE_C4 262
eencae 0:836cdf67dbdb 92 #define NOTE_CS4 277
eencae 0:836cdf67dbdb 93 #define NOTE_D4 294
eencae 0:836cdf67dbdb 94 #define NOTE_DS4 311
eencae 0:836cdf67dbdb 95 #define NOTE_E4 330
eencae 0:836cdf67dbdb 96 #define NOTE_F4 349
eencae 0:836cdf67dbdb 97 #define NOTE_FS4 370
eencae 0:836cdf67dbdb 98 #define NOTE_G4 392
eencae 0:836cdf67dbdb 99 #define NOTE_GS4 415
eencae 0:836cdf67dbdb 100 #define NOTE_A4 440
eencae 0:836cdf67dbdb 101 #define NOTE_AS4 466
eencae 0:836cdf67dbdb 102 #define NOTE_B4 494
eencae 0:836cdf67dbdb 103 #define NOTE_C5 523
eencae 0:836cdf67dbdb 104 #define NOTE_CS5 554
eencae 0:836cdf67dbdb 105 #define NOTE_D5 587
eencae 0:836cdf67dbdb 106 #define NOTE_DS5 622
eencae 0:836cdf67dbdb 107 #define NOTE_E5 659
eencae 0:836cdf67dbdb 108 #define NOTE_F5 698
eencae 0:836cdf67dbdb 109 #define NOTE_FS5 740
eencae 0:836cdf67dbdb 110 #define NOTE_G5 784
eencae 0:836cdf67dbdb 111 #define NOTE_GS5 831
eencae 0:836cdf67dbdb 112 #define NOTE_A5 880
eencae 0:836cdf67dbdb 113 #define NOTE_AS5 932
eencae 0:836cdf67dbdb 114 #define NOTE_B5 988
eencae 0:836cdf67dbdb 115 #define NOTE_C6 1047
eencae 0:836cdf67dbdb 116 #define NOTE_CS6 1109
eencae 0:836cdf67dbdb 117 #define NOTE_D6 1175
eencae 0:836cdf67dbdb 118 #define NOTE_DS6 1245
eencae 0:836cdf67dbdb 119 #define NOTE_E6 1319
eencae 0:836cdf67dbdb 120 #define NOTE_F6 1397
eencae 0:836cdf67dbdb 121 #define NOTE_FS6 1480
eencae 0:836cdf67dbdb 122 #define NOTE_G6 1568
eencae 0:836cdf67dbdb 123 #define NOTE_GS6 1661
eencae 0:836cdf67dbdb 124 #define NOTE_A6 1760
eencae 0:836cdf67dbdb 125 #define NOTE_AS6 1865
eencae 0:836cdf67dbdb 126 #define NOTE_B6 1976
eencae 0:836cdf67dbdb 127 #define NOTE_C7 2093
eencae 0:836cdf67dbdb 128 #define NOTE_CS7 2217
eencae 0:836cdf67dbdb 129 #define NOTE_D7 2349
eencae 0:836cdf67dbdb 130 #define NOTE_DS7 2489
eencae 0:836cdf67dbdb 131 #define NOTE_E7 2637
eencae 0:836cdf67dbdb 132 #define NOTE_F7 2794
eencae 0:836cdf67dbdb 133 #define NOTE_FS7 2960
eencae 0:836cdf67dbdb 134 #define NOTE_G7 3136
eencae 0:836cdf67dbdb 135 #define NOTE_GS7 3322
eencae 0:836cdf67dbdb 136 #define NOTE_A7 3520
eencae 0:836cdf67dbdb 137 #define NOTE_AS7 3729
eencae 0:836cdf67dbdb 138 #define NOTE_B7 3951
eencae 0:836cdf67dbdb 139 #define NOTE_C8 4186
eencae 0:836cdf67dbdb 140 #define NOTE_CS8 4435
eencae 0:836cdf67dbdb 141 #define NOTE_D8 4699
eencae 0:836cdf67dbdb 142 #define NOTE_DS8 4978
eencae 0:836cdf67dbdb 143
eencae 0:836cdf67dbdb 144 #endif