A simple library for playing notes
Dependents: DCGame el14m2l_Dungeon_Crawler_Game
music.h@0:446604264b9e, 2016-05-05 (annotated)
- Committer:
- Martyrtle
- Date:
- Thu May 05 14:27:18 2016 +0000
- Revision:
- 0:446604264b9e
Done
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Martyrtle | 0:446604264b9e | 1 | /** |
Martyrtle | 0:446604264b9e | 2 | @file music.h |
Martyrtle | 0:446604264b9e | 3 | @brief Header file containing function prototypes, defines for the music.cpp file. |
Martyrtle | 0:446604264b9e | 4 | @brief Version 1.0.0 |
Martyrtle | 0:446604264b9e | 5 | @author Marty Laverick |
Martyrtle | 0:446604264b9e | 6 | @date 5th May 2016 |
Martyrtle | 0:446604264b9e | 7 | */ |
Martyrtle | 0:446604264b9e | 8 | |
Martyrtle | 0:446604264b9e | 9 | #ifndef _MUSIC_H |
Martyrtle | 0:446604264b9e | 10 | #define _MUSIC_H |
Martyrtle | 0:446604264b9e | 11 | |
Martyrtle | 0:446604264b9e | 12 | #include "mbed.h" |
Martyrtle | 0:446604264b9e | 13 | |
Martyrtle | 0:446604264b9e | 14 | #define PI 3.14159265359 |
Martyrtle | 0:446604264b9e | 15 | |
Martyrtle | 0:446604264b9e | 16 | // frequency of the notes |
Martyrtle | 0:446604264b9e | 17 | #define NOTE_B0 31 |
Martyrtle | 0:446604264b9e | 18 | #define NOTE_C1 33 |
Martyrtle | 0:446604264b9e | 19 | #define NOTE_CS1 35 |
Martyrtle | 0:446604264b9e | 20 | #define NOTE_D1 37 |
Martyrtle | 0:446604264b9e | 21 | #define NOTE_DS1 39 |
Martyrtle | 0:446604264b9e | 22 | #define NOTE_E1 41 |
Martyrtle | 0:446604264b9e | 23 | #define NOTE_F1 44 |
Martyrtle | 0:446604264b9e | 24 | #define NOTE_FS1 46 |
Martyrtle | 0:446604264b9e | 25 | #define NOTE_G1 49 |
Martyrtle | 0:446604264b9e | 26 | #define NOTE_GS1 52 |
Martyrtle | 0:446604264b9e | 27 | #define NOTE_A1 55 |
Martyrtle | 0:446604264b9e | 28 | #define NOTE_AS1 58 |
Martyrtle | 0:446604264b9e | 29 | #define NOTE_B1 62 |
Martyrtle | 0:446604264b9e | 30 | #define NOTE_C2 65 |
Martyrtle | 0:446604264b9e | 31 | #define NOTE_CS2 69 |
Martyrtle | 0:446604264b9e | 32 | #define NOTE_D2 73 |
Martyrtle | 0:446604264b9e | 33 | #define NOTE_DS2 78 |
Martyrtle | 0:446604264b9e | 34 | #define NOTE_E2 82 |
Martyrtle | 0:446604264b9e | 35 | #define NOTE_F2 87 |
Martyrtle | 0:446604264b9e | 36 | #define NOTE_FS2 93 |
Martyrtle | 0:446604264b9e | 37 | #define NOTE_G2 98 |
Martyrtle | 0:446604264b9e | 38 | #define NOTE_GS2 104 |
Martyrtle | 0:446604264b9e | 39 | #define NOTE_A2 110 |
Martyrtle | 0:446604264b9e | 40 | #define NOTE_AS2 117 |
Martyrtle | 0:446604264b9e | 41 | #define NOTE_B2 123 |
Martyrtle | 0:446604264b9e | 42 | #define NOTE_C3 131 |
Martyrtle | 0:446604264b9e | 43 | #define NOTE_CS3 139 |
Martyrtle | 0:446604264b9e | 44 | #define NOTE_D3 147 |
Martyrtle | 0:446604264b9e | 45 | #define NOTE_DS3 156 |
Martyrtle | 0:446604264b9e | 46 | #define NOTE_E3 165 |
Martyrtle | 0:446604264b9e | 47 | #define NOTE_F3 175 |
Martyrtle | 0:446604264b9e | 48 | #define NOTE_FS3 185 |
Martyrtle | 0:446604264b9e | 49 | #define NOTE_G3 196 |
Martyrtle | 0:446604264b9e | 50 | #define NOTE_GS3 208 |
Martyrtle | 0:446604264b9e | 51 | #define NOTE_A3 220 |
Martyrtle | 0:446604264b9e | 52 | #define NOTE_AS3 233 |
Martyrtle | 0:446604264b9e | 53 | #define NOTE_B3 247 |
Martyrtle | 0:446604264b9e | 54 | #define NOTE_C4 262 |
Martyrtle | 0:446604264b9e | 55 | #define NOTE_CS4 277 |
Martyrtle | 0:446604264b9e | 56 | #define NOTE_D4 294 |
Martyrtle | 0:446604264b9e | 57 | #define NOTE_DS4 311 |
Martyrtle | 0:446604264b9e | 58 | #define NOTE_E4 330 |
Martyrtle | 0:446604264b9e | 59 | #define NOTE_F4 349 |
Martyrtle | 0:446604264b9e | 60 | #define NOTE_FS4 370 |
Martyrtle | 0:446604264b9e | 61 | #define NOTE_G4 392 |
Martyrtle | 0:446604264b9e | 62 | #define NOTE_GS4 415 |
Martyrtle | 0:446604264b9e | 63 | #define NOTE_A4 440 |
Martyrtle | 0:446604264b9e | 64 | #define NOTE_AS4 466 |
Martyrtle | 0:446604264b9e | 65 | #define NOTE_B4 494 |
Martyrtle | 0:446604264b9e | 66 | #define NOTE_C5 523 |
Martyrtle | 0:446604264b9e | 67 | #define NOTE_CS5 554 |
Martyrtle | 0:446604264b9e | 68 | #define NOTE_D5 587 |
Martyrtle | 0:446604264b9e | 69 | #define NOTE_DS5 622 |
Martyrtle | 0:446604264b9e | 70 | #define NOTE_E5 659 |
Martyrtle | 0:446604264b9e | 71 | #define NOTE_F5 698 |
Martyrtle | 0:446604264b9e | 72 | #define NOTE_FS5 740 |
Martyrtle | 0:446604264b9e | 73 | #define NOTE_G5 784 |
Martyrtle | 0:446604264b9e | 74 | #define NOTE_GS5 831 |
Martyrtle | 0:446604264b9e | 75 | #define NOTE_A5 880 |
Martyrtle | 0:446604264b9e | 76 | #define NOTE_AS5 932 |
Martyrtle | 0:446604264b9e | 77 | #define NOTE_B5 988 |
Martyrtle | 0:446604264b9e | 78 | #define NOTE_C6 1047 |
Martyrtle | 0:446604264b9e | 79 | #define NOTE_CS6 1109 |
Martyrtle | 0:446604264b9e | 80 | #define NOTE_D6 1175 |
Martyrtle | 0:446604264b9e | 81 | #define NOTE_DS6 1245 |
Martyrtle | 0:446604264b9e | 82 | #define NOTE_E6 1319 |
Martyrtle | 0:446604264b9e | 83 | #define NOTE_F6 1397 |
Martyrtle | 0:446604264b9e | 84 | #define NOTE_FS6 1480 |
Martyrtle | 0:446604264b9e | 85 | #define NOTE_G6 1568 |
Martyrtle | 0:446604264b9e | 86 | #define NOTE_GS6 1661 |
Martyrtle | 0:446604264b9e | 87 | #define NOTE_A6 1760 |
Martyrtle | 0:446604264b9e | 88 | #define NOTE_AS6 1865 |
Martyrtle | 0:446604264b9e | 89 | #define NOTE_B6 1976 |
Martyrtle | 0:446604264b9e | 90 | #define NOTE_C7 2093 |
Martyrtle | 0:446604264b9e | 91 | #define NOTE_CS7 2217 |
Martyrtle | 0:446604264b9e | 92 | #define NOTE_D7 2349 |
Martyrtle | 0:446604264b9e | 93 | #define NOTE_DS7 2489 |
Martyrtle | 0:446604264b9e | 94 | #define NOTE_E7 2637 |
Martyrtle | 0:446604264b9e | 95 | #define NOTE_F7 2794 |
Martyrtle | 0:446604264b9e | 96 | #define NOTE_FS7 2960 |
Martyrtle | 0:446604264b9e | 97 | #define NOTE_G7 3136 |
Martyrtle | 0:446604264b9e | 98 | #define NOTE_GS7 3322 |
Martyrtle | 0:446604264b9e | 99 | #define NOTE_A7 3520 |
Martyrtle | 0:446604264b9e | 100 | #define NOTE_AS7 3729 |
Martyrtle | 0:446604264b9e | 101 | #define NOTE_B7 3951 |
Martyrtle | 0:446604264b9e | 102 | #define NOTE_C8 4186 |
Martyrtle | 0:446604264b9e | 103 | #define NOTE_CS8 4435 |
Martyrtle | 0:446604264b9e | 104 | #define NOTE_D8 4699 |
Martyrtle | 0:446604264b9e | 105 | #define NOTE_DS8 4978 |
Martyrtle | 0:446604264b9e | 106 | |
Martyrtle | 0:446604264b9e | 107 | //length of notes |
Martyrtle | 0:446604264b9e | 108 | #define BREVE 2.0f |
Martyrtle | 0:446604264b9e | 109 | #define SEMIBREVE 1.0f |
Martyrtle | 0:446604264b9e | 110 | #define MINIM 0.5f |
Martyrtle | 0:446604264b9e | 111 | #define CROTCHET 0.25f |
Martyrtle | 0:446604264b9e | 112 | #define QUAVER 0.125f |
Martyrtle | 0:446604264b9e | 113 | #define SEMIQUAVER 0.0625f |
Martyrtle | 0:446604264b9e | 114 | |
Martyrtle | 0:446604264b9e | 115 | class speaker |
Martyrtle | 0:446604264b9e | 116 | { |
Martyrtle | 0:446604264b9e | 117 | public: |
Martyrtle | 0:446604264b9e | 118 | /** Create a speaker object connected to the specified pin |
Martyrtle | 0:446604264b9e | 119 | * |
Martyrtle | 0:446604264b9e | 120 | * @param speaker_pin connected to PWM on the piezo buzzer |
Martyrtle | 0:446604264b9e | 121 | * |
Martyrtle | 0:446604264b9e | 122 | */ |
Martyrtle | 0:446604264b9e | 123 | speaker(PinName speaker_pin) { |
Martyrtle | 0:446604264b9e | 124 | Speaker = new PwmOut(speaker_pin); |
Martyrtle | 0:446604264b9e | 125 | n=32; |
Martyrtle | 0:446604264b9e | 126 | for (int i = 0; i < n ; i++) { |
Martyrtle | 0:446604264b9e | 127 | y[i] = 0.5 + 0.5*sin(i*2*PI/n); |
Martyrtle | 0:446604264b9e | 128 | } |
Martyrtle | 0:446604264b9e | 129 | }; |
Martyrtle | 0:446604264b9e | 130 | /** Play Note |
Martyrtle | 0:446604264b9e | 131 | * |
Martyrtle | 0:446604264b9e | 132 | * Plays a specified note for a specified duration. |
Martyrtle | 0:446604264b9e | 133 | * @param frequency - the note frequency |
Martyrtle | 0:446604264b9e | 134 | * @param duration - the note duration |
Martyrtle | 0:446604264b9e | 135 | */ |
Martyrtle | 0:446604264b9e | 136 | void tone(float frequency,float duration); |
Martyrtle | 0:446604264b9e | 137 | |
Martyrtle | 0:446604264b9e | 138 | private: |
Martyrtle | 0:446604264b9e | 139 | PwmOut *Speaker; |
Martyrtle | 0:446604264b9e | 140 | int n; |
Martyrtle | 0:446604264b9e | 141 | float y[32]; |
Martyrtle | 0:446604264b9e | 142 | Timer note_timer; |
Martyrtle | 0:446604264b9e | 143 | |
Martyrtle | 0:446604264b9e | 144 | }; |
Martyrtle | 0:446604264b9e | 145 | |
Martyrtle | 0:446604264b9e | 146 | #endif |