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.

Dependencies:   mbed PS2

Committer:
lbaddam3
Date:
Mon Feb 28 16:55:00 2011 +0000
Revision:
0:175ad26d17ce

        

Who changed what in which revision?

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