Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: midi.h
- Revision:
- 1:1de917dde4ed
- Parent:
- 0:943dfa56009a
--- a/midi.h Sat Nov 07 13:40:03 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,175 +0,0 @@ -#include "AsyncSerial.h" - -#include <vector> -#include <string> - - -AsyncSerial ms(PA_0,PA_1,31250,500); -//RawSerial ms(PA_0,PA_1,31250); - -DigitalOut clockLed_(D10); -DigitalOut RhythmLED(D11); -DigitalOut active(D12); - -volatile bool doRhythm = false; - -volatile int memory = 0; - -volatile int barClock = 0; -volatile int beat = 4; - - -const string notesName[12] = {"C ","C#","D ","D#","E ","F ","F#","G ","G#","A ","A#","B "}; - -std::vector<char> dataByte; - -void MidiTh() -{ - if(ms.readable()) { - int data = ms.read(); - -// RealTime Message ------------------------------------------------------------ - if (data == 0xF8) { // Clock - barClock++; - if (barClock % (24 * beat) == 13) clockLed_ = 0; - - } else if (data == 0xFA) { // RhythmStart - clockLed_ = RhythmLED = doRhythm = 1; - barClock = 0; - - } else if (data == 0xFC) { // RhythmStop - RhythmLED = doRhythm = 0; - - } else if (data >= 0xF8) { - -// Channel Message ------------------------------------------------------------- - } else { - //printf("\n\r%d..",data); - if (data >= 0x80 && data != 0xF7) { - dataByte.clear(); - dataByte.push_back(data); - - } else { - if ((dataByte[0] & 0xF0) == 0x90) { // NoteOFF - dataByte.push_back(data); - - if (dataByte.size() == 3) { - string nName = notesName[dataByte[1] % 12]; - int nOctave = ((int)(dataByte[1] / 12) - 2); - - //printf("%2dch Note ",(dataByte[0] & 0x0F) + 1); - //if (dataByte[2] == 0) printf("OFF : %s%d\r\n",nName.c_str(),nOctave); - //else printf(" ON : %s%d , Velocity : %3d\r\n",nName.c_str(),nOctave,dataByte[2]); - dataByte.erase(dataByte.begin() + 1,dataByte.end()); - //isStatusByte = false; - - /*if (velocity == 0x00) { - if (ch == 1) { - LEDlight_uk[Key % 12] = false; - flag_uk = true; - } else if (ch == 2) { - LEDlight_lk[Key % 12] = false; - flag_lk = true; - } else if (ch == 3) { - LEDlight_pk[Key % 12] = false; - flag_pk = true; - } - LEDwrite(); - } else { - printf("%dch Note ON : %d InitialTouch : %d\n\r",ch,key,velocity); - if (ch == 1) LEDlight_uk[Key % 12] = flag_uk = true; - else if (ch == 2) LEDlight_lk[Key % 12] = flag_lk = true; - else if (ch == 3) LEDlight_pk[Key % 12] = flag_pk = true; - LEDw*/ - } - } else if ((dataByte[0] & 0xF0) == 0xB0) { // ExpressionPedal & VA AfterTouch - dataByte.push_back(data); - - if (dataByte.size() == 3) { - //printf("%2dch ",(dataByte[0] & 0x0F) + 1); - if (dataByte[1] == 0x04) ;//printf("SecondExpression : %3d\r\n",dataByte[2] - (0x7F >> 1)); - else if (dataByte[1] == 0x0B) { - //printf("Expression : %3d\r\n",dataByte[2]); - if (doRhythm) { - //uk.setII(dataByte[2]); - //uk.write(); - } - } else if (dataByte[1] == 0x10) ;//printf("VA AfterTouch : %3d\r\n",dataByte[2]); - dataByte.erase(dataByte.begin() + 1,dataByte.end()); - } - - } else if ((dataByte[0] & 0xF0) == 0xC0) { // Memory - dataByte.push_back(data); - memory = dataByte[1] + 1; - //printf("Memory : %2d\r\n",memory); - dataByte.erase(dataByte.begin() + 1,dataByte.end()); - - } else if ((dataByte[0] & 0xF0) == 0xD0) { // AfterTouch - dataByte.push_back(data); - - //printf("%2dch ",(dataByte[0] & 0x0F) + 1); - //printf("AfterTouch : %3d\r\n",dataByte[1]); - dataByte.erase(dataByte.begin() + 1,dataByte.end()); - - } else if ((dataByte[0] & 0xF0) == 0xE0) { // PitchBend - dataByte.push_back(data); - - if (dataByte.size() == 3) { - //printf("%2dch ",(dataByte[0] & 0x0F) + 1); - //printf("PitchBend : %5d\r\n",(dataByte[1] | (dataByte[2] << 7)) - 0x1FFF); - dataByte.erase(dataByte.begin() + 1,dataByte.end()); - } -// Exclusive Message ----------------------------------------------------------- - } else if (dataByte[0] == 0xF0) { - dataByte.push_back(data); - if (data == 0xF7) { - if (dataByte[1] == 0x43) { - if (dataByte[2] == 0x70) { - if (dataByte[3] == 0x53) printf("Model : ELS-02(Electone STAGEA 02Series Standerd)\r\n"); - else if (dataByte[3] == 0x54) printf("Model : ELS-02C(Electone STAGEA 02Series Custom)\r\n"); - else if (dataByte[3] == 0x55) printf("Model : ELS-02X(Electone STAGEA 02Series Professional)\r\n"); - else if (dataByte[3] == 0x70) { - if (dataByte[4] == 0x78) { // Per signal - static int clock_m = 0; - if (barClock - clock_m < 0) clock_m = 0; - beat = (barClock - clock_m) / 24; - clock_m = barClock; - clockLed_ = 1; - //printf("C %d\r\n",clock_); - //clock_ = 0; - //if (doRhythm) count = 0; - } - } - } - } - dataByte.erase(dataByte.begin() + 1,dataByte.end()); - } - - } else { // Other - printf("able %d\r\n", ms.read()); - } - - } - } - } -} - -void ModelReq() -{ - //F0, 43, 70, 70, 30, F7 - uint8_t sd[6] = {0xF0,0x43,0x70,0x70,0x30,0xF7}; - ms.write(sd,6); - -} - -void Start() -{ - ms.write(0xFA); -} - -void MDRStart() -{ - uint8_t sd[7] = {0xF0,0x43,0x70,0x70,0x70,0x01,0xF7}; - ms.write(sd,7); - -} \ No newline at end of file