YAMAHA eVY1 test program. using MIDI class.

Dependencies:   MIDI mbed

main.cpp

Committer:
gkmaro634
Date:
2014-01-21
Revision:
0:50741b26449e

File content as of revision 0:50741b26449e:

#include "mbed.h"
#include "MIDI.h"
#include "main.h"
#include <stdlib.h>
#include <string.h>

#define CH_VOICE 1;

void setup_eVY1(void);

DigitalOut myled(LED1);
MIDI evy1(p9, p10);
int ch_use = CH_VOICE;

// DO NOT EDIT!!
const char* phoneticSymbols[] = {
    "a", "i", "M", "e", "o",        // あいうえお0-4
    "k a", "k' i", "k M", "k e", "k o", // かきくけこ5-9
    "s a", "S i", "s M", "s e", "s o", // さしすえそ10-14
    "t a", "tS i", "ts M", "t e", "t o",    // たちつてと15-19
    "n a", "J i", "n M", "n e", "n o",  //なにぬねの20-24
    "h a", "C i", "p\\ M", "h e", "h o",    // はひふへほ25-29
    "m a", "m' i", "m M", "m e", "m o", // まみむめも30-34
    "j a","i", "j M","e","j o",//やいゆえよ35-39
    "4 a", "4' i", "4 M", "4 e", "4 o", // らりるれろ40-44
    "w a","w o","N\\","","",// わをん 45-49
    "g a", "g' i", "g M", "g e", "g o",//がぎぐげご 50-54
    "dz a", "dZ i", "dz M", "dz e", "dz o",//ざじずぜぞ55-59
    "d a", "dZ i", "dz M", "d e", "d o",//だじづでど60-64
    "b a", "b' i", "b M", "b e", "b o",//ばびぶべぼ  65-69
    "p a", "p' i", "p M", "p e", "p o"//ぱぴぷぺぽ70-74
}; 

void setup_eVY1(void){
    evy1.begin(ch_use);
}

/*
int make_lylic(){
    int i;
    int* lylic;
    int lylics[]={5,3,42,24,2,15,50,6,9,3,18,7,42,39};
    
    lylic = (int*)malloc(sizeof(lylics));
    if(lylic == NULL)return (-1)
    
    for(i=0; i<sizeof(lylics)/sizeof(lylics[0]); i++){
        lylic[i] = phoneticSymbols[lylics[i]];
        }
    free(lylic);
}
*/
void send_lylic(uint8_t mode){
    int i, j;
    int len;
    int lylics[]={5,3,42,24,2,15,50,6,9,3,18,7,42,39};
    int len_lylics = sizeof(lylics)/sizeof(lylics[0]);

    byte header[] = {0xF0,0x43,0x79,0x09,0x00,0x50,0x10|mode};
    byte lylic[] = {'a'};
    byte sepalate[] = {','};
    byte footer[] = {0x00,0xF7};
    
    int len_header = sizeof(header)/sizeof(header[0]);
    int len_lylic = sizeof(lylic)/sizeof(lylic[0]);
    int len_sepalate = sizeof(sepalate)/sizeof(sepalate[0]);
    int len_footer = sizeof(footer)/sizeof(footer[0]);

    evy1.sendSysEx(len_header, header, true);
    for(i=0; i<len_lylics; i++){
        len = strlen(phoneticSymbols[lylics[i]]);
        for(j=0; j<len;j++){
            lylic[0] = phoneticSymbols[lylics[i]][j];
            evy1.sendSysEx(len_lylic, lylic, true);
            }
        if(i<len_lylics-1) evy1.sendSysEx(len_sepalate, sepalate, true);
        }
    evy1.sendSysEx(len_footer, footer, true);
}

int main() {
    int i;
    int key = 0x3c; //C
    int ch1 = CH_VOICE;
      
    //setup
    setup_eVY1();
    
    //make lylic
    
    //send lylic
    send_lylic(0x00);//mode replace:0x00, append:0x01
    
    //send MIDI message
    char mml[] ="CDEFEDC EFGAGFE";
    int mml_len = sizeof(mml) / sizeof(mml[0]);
    
    for(i = 0;i< mml_len ;i++){
        char c = mml[i];
        if(c >= 'a' && c <='z') c-= 0x20;
        if((c>='A' && c<='Z')||c=='<'||c=='>'){
            //key send
            if(i!=0){
                evy1.sendNoteOn(key,0x7f,ch1);   
                wait(0.5);
            }
            key= 0x3c; 

            switch(c) {
                case 'C': break;
                case 'D': key+=2; break;
                case 'E': key+=4; break;
                case 'F': key+=5; break;
                case 'G': key+=7; break;
                case 'A': key+=9; break;
                case 'B': key+=11; break;
                default: break;
            }
        }
    }
    evy1.sendNoteOn(key, 0x7f, ch1);   // note on message. 0x90=1ch, 0x7f=Velocity
    wait(0.5);
    evy1.sendNoteOff(key, 0x7f, ch1);   // note on message. 0x90=1ch, 0x7f=Velocity
}