This music synthesizer accepts user input via a keyboard using a PS/2 interface. The user has the ability to control two parameters: waveforms and octaves. Waveforms are generated by means of the direct digital synthesis algorithm. The user may select from six waveforms: sine, square, sawtooth, triangle, EKG, and sinc. The synthesizer covers the seven octaves present on an 88-key piano in addition to the two incomplete octaves for a total of nine octaves.
mbed_synth.h@0:175ad26d17ce, 2011-02-28 (annotated)
- Committer:
- lbaddam3
- Date:
- Mon Feb 28 16:55:00 2011 +0000
- Revision:
- 0:175ad26d17ce
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lbaddam3 | 0:175ad26d17ce | 1 | /***************************************************************************/ |
lbaddam3 | 0:175ad26d17ce | 2 | /* mbed_synth.h */ |
lbaddam3 | 0:175ad26d17ce | 3 | /* */ |
lbaddam3 | 0:175ad26d17ce | 4 | /* ----------------------------------------------------------------------- */ |
lbaddam3 | 0:175ad26d17ce | 5 | /* Author: Ron Grier, Lakshmi Baddam */ |
lbaddam3 | 0:175ad26d17ce | 6 | /* Target: nxp lpc1768 */ |
lbaddam3 | 0:175ad26d17ce | 7 | /* */ |
lbaddam3 | 0:175ad26d17ce | 8 | /***************************************************************************/ |
lbaddam3 | 0:175ad26d17ce | 9 | #ifndef MBED_SYNTH_H |
lbaddam3 | 0:175ad26d17ce | 10 | #define MBED_SYNTH_H |
lbaddam3 | 0:175ad26d17ce | 11 | |
lbaddam3 | 0:175ad26d17ce | 12 | #include "mbed.h" |
lbaddam3 | 0:175ad26d17ce | 13 | #include "PS2Keyboard.h" |
lbaddam3 | 0:175ad26d17ce | 14 | |
lbaddam3 | 0:175ad26d17ce | 15 | /* Macros */ |
lbaddam3 | 0:175ad26d17ce | 16 | #define SAMP_FREQ (40000.0) // Sampling frequency |
lbaddam3 | 0:175ad26d17ce | 17 | #define SAMP_NUM (256) // Number of samples per wavetable |
lbaddam3 | 0:175ad26d17ce | 18 | #define SHFT_FCTR (0x01000000) // Used to shift result of frequency |
lbaddam3 | 0:175ad26d17ce | 19 | // tuning word to the top8 bits |
lbaddam3 | 0:175ad26d17ce | 20 | |
lbaddam3 | 0:175ad26d17ce | 21 | #define OCT_NUM (9) |
lbaddam3 | 0:175ad26d17ce | 22 | #define NOTE_NUM (12) |
lbaddam3 | 0:175ad26d17ce | 23 | |
lbaddam3 | 0:175ad26d17ce | 24 | /* Declaration of Notes as Frequencies*/ |
lbaddam3 | 0:175ad26d17ce | 25 | ///////////////// |
lbaddam3 | 0:175ad26d17ce | 26 | #define C_0 (16) |
lbaddam3 | 0:175ad26d17ce | 27 | #define Cs_0 (17) |
lbaddam3 | 0:175ad26d17ce | 28 | #define D_0 (18) |
lbaddam3 | 0:175ad26d17ce | 29 | #define Ds_0 (19) |
lbaddam3 | 0:175ad26d17ce | 30 | #define E_0 (21) |
lbaddam3 | 0:175ad26d17ce | 31 | #define F_0 (22) |
lbaddam3 | 0:175ad26d17ce | 32 | #define Fs_0 (23) |
lbaddam3 | 0:175ad26d17ce | 33 | #define G_0 (25) |
lbaddam3 | 0:175ad26d17ce | 34 | #define Gs_0 (26) |
lbaddam3 | 0:175ad26d17ce | 35 | ///////////////// |
lbaddam3 | 0:175ad26d17ce | 36 | #define A_0 (28) |
lbaddam3 | 0:175ad26d17ce | 37 | #define As_0 (29) |
lbaddam3 | 0:175ad26d17ce | 38 | #define B_0 (31) |
lbaddam3 | 0:175ad26d17ce | 39 | |
lbaddam3 | 0:175ad26d17ce | 40 | #define C_1 (33) |
lbaddam3 | 0:175ad26d17ce | 41 | #define Cs_1 (35) |
lbaddam3 | 0:175ad26d17ce | 42 | #define D_1 (37) |
lbaddam3 | 0:175ad26d17ce | 43 | #define Ds_1 (39) |
lbaddam3 | 0:175ad26d17ce | 44 | #define E_1 (41) |
lbaddam3 | 0:175ad26d17ce | 45 | #define F_1 (44) |
lbaddam3 | 0:175ad26d17ce | 46 | #define Fs_1 (46) |
lbaddam3 | 0:175ad26d17ce | 47 | #define G_1 (49) |
lbaddam3 | 0:175ad26d17ce | 48 | #define Gs_1 (52) |
lbaddam3 | 0:175ad26d17ce | 49 | #define A_1 (55) |
lbaddam3 | 0:175ad26d17ce | 50 | #define As_1 (58) |
lbaddam3 | 0:175ad26d17ce | 51 | #define B_1 (62) |
lbaddam3 | 0:175ad26d17ce | 52 | |
lbaddam3 | 0:175ad26d17ce | 53 | #define C_2 (65) |
lbaddam3 | 0:175ad26d17ce | 54 | #define Cs_2 (69) |
lbaddam3 | 0:175ad26d17ce | 55 | #define D_2 (73) |
lbaddam3 | 0:175ad26d17ce | 56 | #define Ds_2 (78) |
lbaddam3 | 0:175ad26d17ce | 57 | #define E_2 (82) |
lbaddam3 | 0:175ad26d17ce | 58 | #define F_2 (87) |
lbaddam3 | 0:175ad26d17ce | 59 | #define Fs_2 (93) |
lbaddam3 | 0:175ad26d17ce | 60 | #define G_2 (98) |
lbaddam3 | 0:175ad26d17ce | 61 | #define Gs_2 (104) |
lbaddam3 | 0:175ad26d17ce | 62 | #define A_2 (110) |
lbaddam3 | 0:175ad26d17ce | 63 | #define As_2 (117) |
lbaddam3 | 0:175ad26d17ce | 64 | #define B_2 (125) |
lbaddam3 | 0:175ad26d17ce | 65 | |
lbaddam3 | 0:175ad26d17ce | 66 | #define C_3 (131) |
lbaddam3 | 0:175ad26d17ce | 67 | #define Cs_3 (139) |
lbaddam3 | 0:175ad26d17ce | 68 | #define D_3 (147) |
lbaddam3 | 0:175ad26d17ce | 69 | #define Ds_3 (156) |
lbaddam3 | 0:175ad26d17ce | 70 | #define E_3 (165) |
lbaddam3 | 0:175ad26d17ce | 71 | #define F_3 (175) |
lbaddam3 | 0:175ad26d17ce | 72 | #define Fs_3 (185) |
lbaddam3 | 0:175ad26d17ce | 73 | #define G_3 (196) |
lbaddam3 | 0:175ad26d17ce | 74 | #define Gs_3 (208) |
lbaddam3 | 0:175ad26d17ce | 75 | #define A_3 (220) |
lbaddam3 | 0:175ad26d17ce | 76 | #define As_3 (233) |
lbaddam3 | 0:175ad26d17ce | 77 | #define B_3 (247) |
lbaddam3 | 0:175ad26d17ce | 78 | |
lbaddam3 | 0:175ad26d17ce | 79 | #define C_4 (262) |
lbaddam3 | 0:175ad26d17ce | 80 | #define Cs_4 (277) |
lbaddam3 | 0:175ad26d17ce | 81 | #define D_4 (294) |
lbaddam3 | 0:175ad26d17ce | 82 | #define Ds_4 (311) |
lbaddam3 | 0:175ad26d17ce | 83 | #define E_4 (330) |
lbaddam3 | 0:175ad26d17ce | 84 | #define F_4 (349) |
lbaddam3 | 0:175ad26d17ce | 85 | #define Fs_4 (367) |
lbaddam3 | 0:175ad26d17ce | 86 | #define G_4 (392) |
lbaddam3 | 0:175ad26d17ce | 87 | #define Gs_4 (415) |
lbaddam3 | 0:175ad26d17ce | 88 | #define A_4 (440) |
lbaddam3 | 0:175ad26d17ce | 89 | #define As_4 (466) |
lbaddam3 | 0:175ad26d17ce | 90 | #define B_4 (494) |
lbaddam3 | 0:175ad26d17ce | 91 | |
lbaddam3 | 0:175ad26d17ce | 92 | #define C_5 (523) |
lbaddam3 | 0:175ad26d17ce | 93 | #define Cs_5 (554) |
lbaddam3 | 0:175ad26d17ce | 94 | #define D_5 (587) |
lbaddam3 | 0:175ad26d17ce | 95 | #define Ds_5 (622) |
lbaddam3 | 0:175ad26d17ce | 96 | #define E_5 (659) |
lbaddam3 | 0:175ad26d17ce | 97 | #define F_5 (698) |
lbaddam3 | 0:175ad26d17ce | 98 | #define Fs_5 (740) |
lbaddam3 | 0:175ad26d17ce | 99 | #define G_5 (784) |
lbaddam3 | 0:175ad26d17ce | 100 | #define Gs_5 (831) |
lbaddam3 | 0:175ad26d17ce | 101 | #define A_5 (880) |
lbaddam3 | 0:175ad26d17ce | 102 | #define As_5 (932) |
lbaddam3 | 0:175ad26d17ce | 103 | #define B_5 (988) |
lbaddam3 | 0:175ad26d17ce | 104 | |
lbaddam3 | 0:175ad26d17ce | 105 | #define C_6 (1047) |
lbaddam3 | 0:175ad26d17ce | 106 | #define Cs_6 (1109) |
lbaddam3 | 0:175ad26d17ce | 107 | #define D_6 (1175) |
lbaddam3 | 0:175ad26d17ce | 108 | #define Ds_6 (1245) |
lbaddam3 | 0:175ad26d17ce | 109 | #define E_6 (1319) |
lbaddam3 | 0:175ad26d17ce | 110 | #define F_6 (1397) |
lbaddam3 | 0:175ad26d17ce | 111 | #define Fs_6 (1480) |
lbaddam3 | 0:175ad26d17ce | 112 | #define G_6 (1568) |
lbaddam3 | 0:175ad26d17ce | 113 | #define Gs_6 (1661) |
lbaddam3 | 0:175ad26d17ce | 114 | #define A_6 (1760) |
lbaddam3 | 0:175ad26d17ce | 115 | #define As_6 (1865) |
lbaddam3 | 0:175ad26d17ce | 116 | #define B_6 (1976) |
lbaddam3 | 0:175ad26d17ce | 117 | |
lbaddam3 | 0:175ad26d17ce | 118 | #define C_7 (2093) |
lbaddam3 | 0:175ad26d17ce | 119 | #define Cs_7 (2218) |
lbaddam3 | 0:175ad26d17ce | 120 | #define D_7 (2349) |
lbaddam3 | 0:175ad26d17ce | 121 | #define Ds_7 (2489) |
lbaddam3 | 0:175ad26d17ce | 122 | #define E_7 (2637) |
lbaddam3 | 0:175ad26d17ce | 123 | #define F_7 (2794) |
lbaddam3 | 0:175ad26d17ce | 124 | #define Fs_7 (2960) |
lbaddam3 | 0:175ad26d17ce | 125 | #define G_7 (3136) |
lbaddam3 | 0:175ad26d17ce | 126 | #define Gs_7 (3322) |
lbaddam3 | 0:175ad26d17ce | 127 | #define A_7 (3520) |
lbaddam3 | 0:175ad26d17ce | 128 | #define As_7 (3729) |
lbaddam3 | 0:175ad26d17ce | 129 | #define B_7 (3951) |
lbaddam3 | 0:175ad26d17ce | 130 | |
lbaddam3 | 0:175ad26d17ce | 131 | #define C_8 (4186) |
lbaddam3 | 0:175ad26d17ce | 132 | /////////////////// |
lbaddam3 | 0:175ad26d17ce | 133 | #define Cs_8 (4435) |
lbaddam3 | 0:175ad26d17ce | 134 | #define D_8 (4698) |
lbaddam3 | 0:175ad26d17ce | 135 | #define Ds_8 (4978) |
lbaddam3 | 0:175ad26d17ce | 136 | #define E_8 (5274) |
lbaddam3 | 0:175ad26d17ce | 137 | #define F_8 (5588) |
lbaddam3 | 0:175ad26d17ce | 138 | #define Fs_8 (5920) |
lbaddam3 | 0:175ad26d17ce | 139 | #define G_8 (6272) |
lbaddam3 | 0:175ad26d17ce | 140 | #define Gs_8 (6645) |
lbaddam3 | 0:175ad26d17ce | 141 | #define A_8 (7040) |
lbaddam3 | 0:175ad26d17ce | 142 | #define As_8 (7459) |
lbaddam3 | 0:175ad26d17ce | 143 | #define B_8 (7902) |
lbaddam3 | 0:175ad26d17ce | 144 | /////////////////// |
lbaddam3 | 0:175ad26d17ce | 145 | |
lbaddam3 | 0:175ad26d17ce | 146 | /* Keyboard Bindings */ |
lbaddam3 | 0:175ad26d17ce | 147 | #define KEY_ON (0x0) |
lbaddam3 | 0:175ad26d17ce | 148 | #define KEY_OFF (0x1) |
lbaddam3 | 0:175ad26d17ce | 149 | |
lbaddam3 | 0:175ad26d17ce | 150 | #define A_key (0x1c) |
lbaddam3 | 0:175ad26d17ce | 151 | #define S_key (0x1b) |
lbaddam3 | 0:175ad26d17ce | 152 | #define D_key (0x23) |
lbaddam3 | 0:175ad26d17ce | 153 | #define F_key (0x2b) |
lbaddam3 | 0:175ad26d17ce | 154 | #define J_key (0x3b) |
lbaddam3 | 0:175ad26d17ce | 155 | #define K_key (0x42) |
lbaddam3 | 0:175ad26d17ce | 156 | #define L_key (0x4b) |
lbaddam3 | 0:175ad26d17ce | 157 | #define Sc_key (0x4c) |
lbaddam3 | 0:175ad26d17ce | 158 | #define W_key (0x1d) |
lbaddam3 | 0:175ad26d17ce | 159 | #define E_key (0x24) |
lbaddam3 | 0:175ad26d17ce | 160 | #define T_key (0x2c) |
lbaddam3 | 0:175ad26d17ce | 161 | #define I_key (0x43) |
lbaddam3 | 0:175ad26d17ce | 162 | #define O_key (0x44) |
lbaddam3 | 0:175ad26d17ce | 163 | #define Left_key (0x6b) |
lbaddam3 | 0:175ad26d17ce | 164 | #define Right_key (0x74) |
lbaddam3 | 0:175ad26d17ce | 165 | #define Minus_key (0x4e) |
lbaddam3 | 0:175ad26d17ce | 166 | #define Plus_key (0x55) |
lbaddam3 | 0:175ad26d17ce | 167 | |
lbaddam3 | 0:175ad26d17ce | 168 | #define C_NOTE (0x0) |
lbaddam3 | 0:175ad26d17ce | 169 | #define Cs_NOTE (0x1) |
lbaddam3 | 0:175ad26d17ce | 170 | #define D_NOTE (0x2) |
lbaddam3 | 0:175ad26d17ce | 171 | #define Ds_NOTE (0x3) |
lbaddam3 | 0:175ad26d17ce | 172 | #define E_NOTE (0x4) |
lbaddam3 | 0:175ad26d17ce | 173 | #define F_NOTE (0x5) |
lbaddam3 | 0:175ad26d17ce | 174 | #define Fs_NOTE (0x6) |
lbaddam3 | 0:175ad26d17ce | 175 | #define G_NOTE (0x7) |
lbaddam3 | 0:175ad26d17ce | 176 | #define Gs_NOTE (0x8) |
lbaddam3 | 0:175ad26d17ce | 177 | #define A_NOTE (0x9) |
lbaddam3 | 0:175ad26d17ce | 178 | #define As_NOTE (0xA) |
lbaddam3 | 0:175ad26d17ce | 179 | #define B_NOTE (0xB) |
lbaddam3 | 0:175ad26d17ce | 180 | |
lbaddam3 | 0:175ad26d17ce | 181 | /* Typedefs and Enums */ |
lbaddam3 | 0:175ad26d17ce | 182 | typedef enum _wave {SINE, SQUARE, SAWTOOTH, |
lbaddam3 | 0:175ad26d17ce | 183 | REV_SAWTOOTH, TRIANGLE, EKG, |
lbaddam3 | 0:175ad26d17ce | 184 | SINC, NOISE} Wave; |
lbaddam3 | 0:175ad26d17ce | 185 | typedef enum _bool {FALSE, TRUE} Bool; |
lbaddam3 | 0:175ad26d17ce | 186 | |
lbaddam3 | 0:175ad26d17ce | 187 | #endif // MBED_SYNTH_H |