A simple library for playing notes

Dependents:   DCGame el14m2l_Dungeon_Crawler_Game

Committer:
Martyrtle
Date:
Thu May 05 14:27:18 2016 +0000
Revision:
0:446604264b9e
Done

Who changed what in which revision?

UserRevisionLine numberNew 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