test code to let sing eVocaloid eVY1 shield

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 
00003 Serial evy1(P0_4, P0_0); // tx, rx configured for LPC800-MAX
00004 //Serial evy1(PTA2, PTA1); // tx, rx configured for FRDM-KL25Z
00005 
00006 // DO NOT EDIT!!
00007 const char* phoneticSymbols[] = {
00008     "a", "i", "M", "e", "o",        // あいうえお0-4
00009     "k a", "k' i", "k M", "k e", "k o", // かきくけこ5-9
00010     "s a", "S i", "s M", "s e", "s o", // さしすえそ10-14
00011     "t a", "tS i", "ts M", "t e", "t o",    // たちつてと15-19
00012     "n a", "J i", "n M", "n e", "n o",  //なにぬねの20-24
00013     "h a", "C i", "p\\ M", "h e", "h o",    // はひふへほ25-29
00014     "m a", "m' i", "m M", "m e", "m o", // まみむめも30-34
00015     "j a","i", "j M","e","j o",//やいゆえよ35-39
00016     "4 a", "4' i", "4 M", "4 e", "4 o", // らりるれろ40-44
00017     "w a","w o","N\\","","",// わをん 45-49
00018     "g a", "g' i", "g M", "g e", "g o",//がぎぐげご 50-54
00019     "dz a", "dZ i", "dz M", "dz e", "dz o",//ざじずぜぞ55-59
00020     "d a", "dZ i", "dz M", "d e", "d o",//だじづでど60-64
00021     "b a", "b' i", "b M", "b e", "b o",//ばびぶべぼ  65-69
00022         "p a", "p' i", "p M", "p e", "p o"//ぱぴぷぺぽ70-74
00023 }; 
00024 
00025 //lylics
00026 //かえるのうたがきこえてくるよ
00027 int lylics[]={5,3,42,24,2,15,50,6,9,3,18,7,42,39};
00028 char mml[] ="CDEFEDC EFGAGFE";
00029 
00030 void Short_Message(int cmd, int d1, int d2) {
00031   evy1.putc(cmd);
00032   evy1.putc(d1);
00033   evy1.putc(d2);
00034 }
00035 
00036 // send lylics
00037 void lylic_send(int num){
00038   //hedaer
00039   evy1.putc(0xF0);
00040   evy1.putc(0x43);
00041   evy1.putc(0x79);
00042   evy1.putc(0x09);
00043   evy1.putc(0x00);
00044   evy1.putc(0x50);
00045   evy1.putc(0x10);
00046   
00047   for(int i=0;i<num;i++){
00048     if(i != 0) evy1.putc(0x2c); // 0x2c is separator
00049     evy1.printf(phoneticSymbols[lylics[i]]);
00050   }
00051   //footer
00052   evy1.putc(0x00);  // footer for NSX-1
00053   evy1.putc(0xF7);  // footer of MIDI sys-ex
00054 }
00055 
00056 
00057 int main() {
00058   int key = 0x3c; //C
00059 
00060   evy1.baud(31250); // MIDI speed
00061   wait(5); // waiting for eVY1 module boot up
00062 
00063   //send lylics
00064   int lylic_len = sizeof(lylics) / sizeof(lylics[0]);
00065   lylic_send(lylic_len);    // sending lylics first
00066  
00067   int mml_len = sizeof(mml) / sizeof(mml[0]);
00068   
00069   for(int i = 0;i< mml_len ;i++){
00070     char c = mml[i];
00071     if(c >= 'a' && c <='z') c-= 0x20;
00072     if((c>='A' && c<='Z')||c=='<'||c=='>'){
00073        //key send
00074        if(i!=0){
00075          Short_Message(0x90,key,0x7f);   
00076          wait(0.5);
00077        }
00078        key= 0x3c; 
00079 
00080         switch(c) {
00081             case 'C': break;
00082             case 'D': key+=2; break;
00083             case 'E': key+=4; break;
00084             case 'F': key+=5; break;
00085             case 'G': key+=7; break;
00086             case 'A': key+=9; break;
00087             case 'B': key+=11; break;
00088             default: break;
00089         }
00090     }
00091   }
00092   Short_Message(0x90,key,0x7f);   // note on message. 0x90=1ch, 0x7f=Velocity
00093   wait(0.5);
00094 }