test code to let sing eVocaloid eVY1 shield
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Thu Jul 21 2022 11:25:52 by 1.7.2