A MIDI piano synthesizer that implements the Karplus Strong physical modeling algorithm.
Dependencies: mbed USBDevice PinDetect
main.cpp@2:e21bd39bdf46, 2016-04-10 (annotated)
- Committer:
- asuszek
- Date:
- Sun Apr 10 22:06:25 2016 +0000
- Revision:
- 2:e21bd39bdf46
- Parent:
- 0:cad8dafb22be
- Child:
- 6:688698f814c0
Cleaned up main and added a class for constants.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
asuszek | 2:e21bd39bdf46 | 1 | /* Karplus Strong MIDI synthesizer. |
asuszek | 2:e21bd39bdf46 | 2 | * |
asuszek | 2:e21bd39bdf46 | 3 | * @author Austin Suszek |
asuszek | 2:e21bd39bdf46 | 4 | * @author Nick Delfino |
asuszek | 2:e21bd39bdf46 | 5 | */ |
asuszek | 0:cad8dafb22be | 6 | |
asuszek | 2:e21bd39bdf46 | 7 | #include "Constants.h" |
asuszek | 0:cad8dafb22be | 8 | #include "mbed.h" |
asuszek | 0:cad8dafb22be | 9 | #include "USBMIDI.h" |
asuszek | 0:cad8dafb22be | 10 | |
asuszek | 0:cad8dafb22be | 11 | Serial pc(USBTX, USBRX); |
asuszek | 0:cad8dafb22be | 12 | USBMIDI midi; |
asuszek | 0:cad8dafb22be | 13 | |
asuszek | 2:e21bd39bdf46 | 14 | void midiMessageReceived(MIDIMessage message); |
asuszek | 2:e21bd39bdf46 | 15 | |
asuszek | 2:e21bd39bdf46 | 16 | int main() { |
asuszek | 2:e21bd39bdf46 | 17 | // Attach the function to handle all incoming MIDI events. |
asuszek | 2:e21bd39bdf46 | 18 | midi.attach(midiMessageReceived); |
asuszek | 2:e21bd39bdf46 | 19 | |
asuszek | 2:e21bd39bdf46 | 20 | while (1) {} |
asuszek | 2:e21bd39bdf46 | 21 | } |
asuszek | 2:e21bd39bdf46 | 22 | |
asuszek | 2:e21bd39bdf46 | 23 | /* |
asuszek | 2:e21bd39bdf46 | 24 | * The handler for all incoming MIDI messages. |
asuszek | 2:e21bd39bdf46 | 25 | */ |
asuszek | 0:cad8dafb22be | 26 | void midiMessageReceived(MIDIMessage message) { |
asuszek | 2:e21bd39bdf46 | 27 | #ifdef DEBUG |
asuszek | 2:e21bd39bdf46 | 28 | printf("Message Received\r\n"); |
asuszek | 2:e21bd39bdf46 | 29 | #endif |
asuszek | 0:cad8dafb22be | 30 | |
asuszek | 0:cad8dafb22be | 31 | switch (message.type()) { |
asuszek | 0:cad8dafb22be | 32 | case MIDIMessage::NoteOnType: |
asuszek | 2:e21bd39bdf46 | 33 | #ifdef DEBUG |
asuszek | 2:e21bd39bdf46 | 34 | printf("\tType: Note On\r\n"); |
asuszek | 2:e21bd39bdf46 | 35 | printf("\tNote: %d\r\n", message.key()); |
asuszek | 2:e21bd39bdf46 | 36 | #endif |
asuszek | 0:cad8dafb22be | 37 | break; |
asuszek | 0:cad8dafb22be | 38 | case MIDIMessage::NoteOffType: |
asuszek | 2:e21bd39bdf46 | 39 | #ifdef DEBUG |
asuszek | 2:e21bd39bdf46 | 40 | printf("\tType: Note Off\r\n"); |
asuszek | 2:e21bd39bdf46 | 41 | #endif |
asuszek | 0:cad8dafb22be | 42 | break; |
asuszek | 0:cad8dafb22be | 43 | default: |
asuszek | 2:e21bd39bdf46 | 44 | // no-op |
asuszek | 2:e21bd39bdf46 | 45 | break; |
asuszek | 0:cad8dafb22be | 46 | } |
asuszek | 0:cad8dafb22be | 47 | } |
asuszek | 0:cad8dafb22be | 48 |