Emic & Arduino - Problems, Solutions & Bohemian Rhapsody
Theman8631
Posts: 3
I've run into some problems with the Emic2 w/Arduino Uno and wanted to share what I've found and the code I've used to solve those problems,
When EMIC doesn't understand something in dectalk you'll hear "Command error in file name". If your looking to update older dectalk texts you can find correct formatting in the dectalk 5.01 documentation @ http://www.parallax.com/sites/default/files/downloads/30016-Emic-Epson-Fonix-DECTalk-501-Users-Guide.pdf on page 60 on. I wish I could find a list of alphabetical phonetics but the best I've found so far are hunting through those pages, but it's good enough to update any dectalk stuff I've found. FYI the most common update I've seen needed is replacing older dectalk's accepted "L"'s with "LL"'s.
I wanted painless functions I could pass strings to the Emic without worrying if it was ready or not, and that could use strings loaded from flash memory instead of filling up RAM, and along the way I found a method to send the X command that the Emic would register, and this is the template I've made, hopefully other's can get some use out of it
TL;DR Bohemian Rhapsody.
- Normally, the X command to stop speech doesn't work when passed to the Emic as a string, but will work if sent a different way.
- Keeping track of lines of code to check if the Emic is ready and making sure to send a \n after every command is tedious and a pain to keep track of,
- Each string is passed to RAM and long strings QUICKLY fill up RAM and break stuff
- Per the documentation other dectalk text should work such as the songs at, http://www.theflameofhope.co/SONGS.html but some of the phonetic formats have changed with dectalk updates.
When EMIC doesn't understand something in dectalk you'll hear "Command error in file name". If your looking to update older dectalk texts you can find correct formatting in the dectalk 5.01 documentation @ http://www.parallax.com/sites/default/files/downloads/30016-Emic-Epson-Fonix-DECTalk-501-Users-Guide.pdf on page 60 on. I wish I could find a list of alphabetical phonetics but the best I've found so far are hunting through those pages, but it's good enough to update any dectalk stuff I've found. FYI the most common update I've seen needed is replacing older dectalk's accepted "L"'s with "LL"'s.
I wanted painless functions I could pass strings to the Emic without worrying if it was ready or not, and that could use strings loaded from flash memory instead of filling up RAM, and along the way I found a method to send the X command that the Emic would register, and this is the template I've made, hopefully other's can get some use out of it
TL;DR Bohemian Rhapsody.
// EMIC2 Template #include <SoftwareSerial.h> #include <avr/pgmspace.h> //Needed for progmem objects #define rxPin 2 // Serial input (connects to Emic 2 SOUT) #define txPin 3 // Serial output (connects to Emic 2 SIN) #define ledPin 13 // Most Arduino boards have an on-board LED on this pin SoftwareSerial emicSerial = SoftwareSerial(rxPin, txPin); // set up a new serial port char buffer[675]; // Size of largest string I'd like to hog memory to send to EMIC, slight pause between strings sent. //Put the long strings you wish to pass to the emic here and add them to the strings table. //Instead of only having a very few long messages you can pass before filing up and breaking RAM they will stay in flash and load to the above object "buffer" in RAM. prog_char cheers0[] PROGMEM = "s[:phone arpa speak on][:rate 130][:n0][:dv gn 73][MEY<150,20> KIH<100> NX<50> YXOR<300> WEY<300> IH<100> N<50> DHAX<150> WRR<150,22> LL'<100> D<50> TUW<300,20> DEY<300> TEY<200> KS<100> EH<200> V<100> RIY<300> THIH<200,25> NX<100> YU<200> V<100> GAO<1100,27> T<100> TEY<150,20> KIH<100> NX<50> AX<300> B R EY<200> K<100> FRAH<200> M<100> AO<200,22> LX<100> YXOR<300,24> WRR<300,22> RIY<200,20> Z<100> SHRR<300> WUH<200> D<100> HXEH<150,25> LL<100> P<50> AX<300> LL AW<1100,27> T<100> ][:n0]"; prog_char cheers1[] PROGMEM = "S[:phone arpa speak on][:rate 130][:n0][WUH<150,27> DEN<75> N<50> T<25> YU<300> LL AY<200,26> K<100> TUW<300> GEH<200,27> T<100> AX<300,29> WEY<300,22> EY<300,17> EY<300,18> EY<300,22> EY<300,29> EY<300,30> EY<600,27> _<800> SAH<200,29> M<100> TAY<150>M<100> Z<50> YU<300,27> WAO<150,29> N<100> T<50> TUW<300,30> GOW<300,32> WER<300> EH<200> V<100> RIY<300> BAH<300,34> DXIY<300,32> NOW<200,30> Z<100> YXOR<300,29> NEY<450,30> EY<150,27> EY<800,25>EY<800,24> EY<400,25> EY<250,27> M<150>][:n0]"; prog_char cheers2[] PROGMEM = "S[:phone arpa speak on][:rate 130][:n0][AE<150,32> N<100> D<50> DHER<300> AO<200,34> LX<100> WEY<200,32> Z<100> G LL AE<200,30> D<100> YU<300,30> KEY<450,30> EY<150,27> EY<800,25> EY<800,24> EY<400,25> EY<250,27> M<150>][:n0]"; prog_char cheers3[] PROGMEM = "S[:phone arpa speak on][:rate 130][:n0][YU<300,32> WAO<150> NAX<150> GOW<300> WER<300,29> YU<300,27> KAE<200,25> N<100> SIY<450> AR<50> TRAH<150,32> BEL<100> Z<50> AR<300> AO<200> LX<100> DHAX<300,29> SEY<300,27> EY<600,25> M<300> YU<300,32> WAO<75> N<50> T<25> TUW<150> BIY<300> WER<300,29> EH<100,27> V<50> RIY<150,25> BAH<150> DXIY<150> NOW<500,27> Z<300> YXOR<300,25> NEY<450> EY<150,17> EY<150,20> EY<150,25> EY<150,29> EY<700,27> M<300>][:n0]"; prog_char cheers4[] PROGMEM = "S[:phone arpa speak on][:rate 130][:n0][YU<300,32> WAO<75> N<50> T<25> TUW<150> GOW<300> WER<300,29> PIY<300,27> PEL<300,25> NOW<800> PIY<150,32> PEL<150> AR<300> AO<200> LX<100> DHAX<300,29> SEY<300,27> EY<600,25> M<300> YU<300,32> WAO<75> N<50> T<25> TUW<150> GOW<300> WER<300,29> EH<100,27> V<50> RIY<150,25> BAH<150> DXIY<150> NOW<500,27> Z<300> YXOR<300,25> NEY<200> M<100>][:n0]"; prog_char stopdemo5[] PROGMEM = "SThis is text-to-speech please feel free to interrupt me before I finish this long speech."; prog_char phillip6[] PROGMEM = "SMaybe each human being lives in a unique world, a private world different from those inhabited and experienced by all other humans. . . If reality differs from person to person, can we speak of reality singular, or shouldn't we really be talking about plural realities? And if there are plural realities, are some more true (more real) than others? What about the world of a schizophrenic? Maybe it's as real as our world."; prog_char phillip7[] PROGMEM = "SMaybe we cannot say that we are in touch with reality and he is not, but should instead say, His reality is so different from ours that he can't explain his to us, and we can't explain ours to him. The problem, then, is that if subjective worlds are experienced too differently, there occurs a breakdown in communication, and there is the real illness"; prog_char queen8[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][:dv gn 75] [IH<200,23>Z<100>DHIH<200>S<100>DHAH<300>RIY<450>LL<150>LLAY<450>F<150>_<500>IH<200>Z<100>DHIH<200>S<100>JHAH<200>ST<100>FAE<200>N<100>TAH<300>SIY<600,20>_<400>KAO<200,22>T<100>IH<300>NAX<300>LLAE<400,23>N<150>D<50>SLLAY<500,22>D<100>NOW<150,18>AH<150>SKEY<200,23>P<100>FRAH<200>M<100>RIY<300>EH<300>LLAH<300,22>TTIY<600,18>_<500>OW<300,15>PAH<200>N<100>YXOR<300>AY<750>Z<150>LLUH<300>KAH<200>P<100>TUW<300>DHAX<300,16>SKAY<600,18>Z<150>AE<300,11>N<200>D<100>SIY<2400,20>][:n0]"; prog_char queen9[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][:dv gn 73][AY<200,20>M<100>JHAH<300>STAX<300>POW<300>OR<300>BOY<600>_<300>AY<300,18>NIY<250>D<50>NOW<300,20>SIH<200,18>M<100>PAH<300,16>THIY<300,13>KAH<300,22>ZAY<200,23>M<100>IY<300,24>ZIY<300>KAH<450,23>M<150>IY<300,22>ZIY<300>GOW<600,23>LL IH<300,24>TEL<300>HXAY<600,23>LL IH<300,22>TEL<300>LLOW<600,23>EH<300,20>NIY<300>WEY<300>DHAX<300>WIH<300,18>N<150>D<50>BLLOW<450,23>Z<150>DAH<300,17>ZAH<150>N<100>T<50>RIH<300>LLIY<300>MAE<600,18>DXRR<300,6>TUW<300,10>MIY<1200,22>_<300>TUW<300,10>UW<300,11>MIY<1500>_<1000>][:n0]"; prog_char queen10[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][:dv gn 73][MAO<300,15>MAX<1500>_<300>JHAH<200,11>ST<100>KIH<150,13>LL<100>D<50>AX<300,15>MAE<900>N<300>_<300>PUH<150,13>TAX<150,15>GAH<300,16>NAX<300,18>GEH<150,16>N<100>ST<50>HXIH<200,15>Z<100>HXEH<500,13>D<100>PEL<200>D<100>MAY<300,15>TRIH<300,16>GRR<300,18>NAW<300,16>HXIY<200,15>Z<100>DEH<500,13>D<100>_<600>MAO<300,15>MAX<1500>LLAY<200>F<100>HXAE<200,18>D<100>JHAH<200,22>ST<100>BIY<300,20>GAH<900>N<300>_<300>BAH<200>T<100>NAW<300,23>AY<200>V<100>GAO<200>N<100>AE<150>N<100>D<50>THROW<200>N<100>IH<200,20>T<100>AO<200,16>LX<100>AX<300,15>WEH<900,13>EY<900>_<300>][:n0]"; prog_char queen11[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][:dv gn 73][MAO<300,20>MAX<1500>UW<300,18>UW<200,20>UW<150,21>UW<1800,20>_<300>DIH<150>DEN<100>T<50>MIY<200,21>N<100>TUW<300,20>MEY<300>KYU<300,18>KRAY<900>IH<300,11>FAY<200>M<100>NAO<200,18>T<100>BBAE<300>KAX<300,20>GEH<200>N<100>DHIH<200,21>S<100>TAY<200>M<100>TUW<300,23>MAR<300,21>OW<600,20>KEH<150,18>RIY<150,20>AO<700,23>N<200>KEH<150,18>RIY<150,20>AO<700,16>N<200>AE<150,11>ZIH<100>F<50>NAH<300,12>THIH<200,14>NX<100>RIH<300,13>LLIY<300,15>MAE<300,12>DXRR<1200,11>Z<300>_<300>][:n0]"; prog_char queen12[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][:dv gn 73][TUW<300,15>LLEY<1400>T<100>_<300>MAY<300,11>TAY<200,13>M<100>HXAE<200,15>Z<100>KAH<900>M<300>_<300>SEH<150,13>EH<75,15>N<50>D Z<25>SHIH<300,16>VRR<200,18>Z<100>DAW<200,16>N<100>MAY<300,15>SPAY<450,13>N<150>BAO<300>DXIY<200,15>Z<100>EY<300,16>KIH<200,18>NX<100>AO<200,16>LX<100>DHAX<300,15>TAO<300>AY<200,13>M<100>_<600>GUH<200,15>D<100>BAY<600>EH<200>V<100>RIY<150,13>BAH<150,13>DXIY<300,15>_<300>AY<200,18>V<100>GAO<200,22>T<100>TUW<300,20>GOW<1200>_<300>GAO<150>DXAX<150>LLIY<300,23>VYU<300>AO<200>LX<100>BIY<300>HXAY<200>N<100>DAE<150,20>N<100>D<50>FEY<200,16>S<100>DHAX<300,15>TRUW<1700,13>TH<100>_<300>][:n0]"; prog_char queen13[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][:dv gn 73][MAO<300,20>MAX<1500>UW<300,18>UW<150,20>UW<150,21>UW<1800,20>_<300>AY<600,21>DOW<150,20>N<100>T<50>WAO<300>NAX<300,18>DAY<900>AY<300,11>SAH<200>M<100>TAY<150,18>M<100>Z<50>WIH<300>SHAY<200,20>D<100>NEH<150>VRR<150>BIH<200,21>N<100>BOR<200>N<100>AE<200,23>T<100>AO<450,20>LX<150>][:n0]"; prog_char queen14[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][:dv gn 72][AH<300,20>AH<300,11>AH<300,20>AH<150,18>AH<150,16>AH<900,23>AH<600,18>AH<300,20>AH<1500,25>AH<150,27>AH<150,28>AH<300,25>AH<150,27>AH<150,28>AH<900,30>AH<300,25>AH<150,30>AH<150,32>AH<150,33>AH<150,35>AH<600,37>AH<150,35>AH<150,33>AH<150,32>AH<150,33>AH<150,32>AH<150,30>AH<150,32>AH<150,30>AH<150,28>AH<150,30>AH<150,28>AH<150,27>AH<150,28>AH<150,27>AH<150,25>AH<150,27>AH<150,25>AH<150,23>AO<600>_<150>AH<150>AH<150,25>AH<150,27>AH<75,28>AH<75,30>AH<75,32>AH<75,33>AH<300,35>][:n0]"; prog_char queen15[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][:dv gn 72][AH<150,23>AH<150,25>AH<150,27>AH<75,28>AH<75,30>AH<75,32>AH<75,34>AH<300,35>AH<900,37>AH<150,27>AH<150,28>AH<300,25>AH<150,27>AH<150,28>AH<300,25>AH<150,27>AH<150,28>AH<900,30>WAO<150,18>AO<150,20>WAO<600,22>WAO<600,30>WAO<900,21>WAO<600,14>_<300>WAO<300>WAO<300>WAO<300>_<3000>][:n0]"; prog_char queen16[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][:dv gn 73][AY<300,15>SIY<150,13>AX<150>LLIH<150,12>DXEL<150>SIH<150,13>LLOW<150>EH<150,15>TOW<150>AH<150,13>VAX<150>MAE<200,12>N<100>] [:dv gn 72][SKAR<150,5>AX<150>MUW<200,10>CH<100>SKAR<150,5>AX<150>MUW<200,10>CH<100>WIH<100,3>LX<50>YU<150>DUW<150,4>DHAX<150>FAE<200,5>N<100>DAE<200,8>NX<100>GOW<200,5>][:n0][:dv gn 73][THAH<100,18>N<50>DRR<150>BOW<100>LL<50>TAE<75>N<50>D<25>LLAY<200,16>T<100>NIH<200>NXVEH<150,20>RIY<150>VEH<150>RIY<150>FRAY<200,17>T<100>NIH<200,21>NX<100>MIY<200,22>][:n0]"; prog_char queen17[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][:dv gn 72][GEH<150,29>LLIH<150>LLEY<150,30>OW<100,29>][:dv gn 75][GEH<150,22>LLIH<150>LLEY<150,23>OW<100,22>][:dv gn 72][GEH<150,29>LLIH<150>LLEY<150,30>OW<100,29>][:dv gn 75][GEH<150,22>LLIH<150>LLEY<150,23>OW<150,22>GEH<150>LLIH<150>LLEY<150,23>OW<150,22>FIH<150,20>GAH<150,18>ROW<150,17>FIH<150>GAX<150,23>ROW<300,20>OW<300,16>OW<150,12>OW<100,11>][:dv gn 73][AY<200,23>M<100>JHAH<100>ST<50>AX<150>POR<300,21>BOY<150,23>AE<75>N<50>D<25>NOW<300,24>BAH<150,23>DXIY<150>LLAH<200,22>VZ<100>MIY<200,23>][:n0]"; prog_char queen18[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][:dv gn 72][HXIY<200,37>Z<100>JHAH<100,35>ST<50>AX<150>POR<300,34>BOY<300,35>FRAH<150,37>MAX<150>POR<300,35>FAE<150,34>MAH<150>LLIY<300,35>SPER<300,37>HXIH<100,33>M<50>HXIH<100,35>Z<50>LLEY<200,32>F<100>FRAH<100>M<100>HXIH<100>Z<50>NAO<200,30>N<100>STRAO<150>SIH<150>TTIY<300,35>_<2700>][:n0]"; prog_char queen19[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][:dv gn 73][IY<150,24>ZIY<150>KAH<200,23>M<100>IY<150,22>ZIY<150>GOW<300,23>WIH<100,24>LX<50>YU<150>K=LLEH<100,23>T<50>MIY<150>GOW<200,22>][:dv gn 72] [BIH<200,11>S<100>MIH<300,16>LLAH<300,11>NOW<900,16>WIY<150,6>WIH<100>LL<50>NAO<100,8>T<50>LLEH<150,9>TYU<150,8>GOW<100,6>][:dv gn 72][LLEH<100,28>T<50>HXIH<100>M<50>GOW<350>][:dv gn 72] [BIH<200,11>S<100>MIH<300,16>LLAH<150,11>WIY<150,18>WIH<100>LL<50>NAO<100,20>T<50>LLEH<100,21>T<50>YU<150,20>GOW<100,18>][:dv gn 72][LLEH<100,28>T<50>HXIH<100>M<50>GOW<350>][:n0]"; prog_char queen20[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][:dv gn 72][BIH<200,11>S<100>MIH<300,16>LLAX<150,11>WIY<150,18>WIH<100>LL<50>NAO<100>T<50>LLEH<150,21>TYU<150,20>GOW<100,18>][:dv gn 72][LLEH<100,28>T<50>HXIH<100>M<50>GOW<100>][:dv gn 72] [WIH<100,18>LL<50>NAO<100>T<50>LLEH<100,21>T<50>YU<150,20>GOW<100,18>][:dv gn 73][LLEH<100,16>T<50>MIY<150>GOW<100>][:dv gn 72] [WIH<100,18>LL<50>NAO<100,20>T<50>LLEH<100,21>T<50>YU<150,20>GOW<100,18>][:n0]"; prog_char queen21[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][:dv gn 73][LLEH<100,16>T<50>MIY<150>GOW<100>][:dv gn 72][AH<300,27>AH<300,23>AH<300,19>AH<300,17>] [:dv gn 72][NOW<300,15>NOW<300,16>NOW<300,19>NOW<300,21>NOW<300,23>NOW<300,27>NOW<100,28>] [:dv gn 73][OW<150,23>MAO<150>MAX<150>MIY<150,25>AX<150,23>MAO<150>MAX<150>MIY<150,25>AX<100,23>] [:dv gn 72] [MAO<150,11>MAX<150>MIY<150,13>AX<150,11>LLEH<100,9>T<50>MIY<150,8>GOW<200,6>][:n0]"; prog_char queen22[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][:dv gn 72][BIY<300,23>EH<300,28>LL<150>ZAH<150>BAH<200>B<100>HXAE<150>ZAX<150>DEH<150,27>V'LL<150>PUH<150>TAE<150>SAY<200,32>D<100>FOR<300>MIY<900,23>FOR<300,20>MIY<1200,25>IY<300,23>FOR<300,32>MIY<1200,35>IY<900>_<5000>] [:dv gn 73] [SOW<300,32>YU<150>THIH<200>NX<100>KYU<150>KAE<100>N<50>STOW<200,30>N<100>MIY<150>AE<75>N<50>D<25>SPIH<300,28>TIH<100>N<50>MAY<150>AO<150,27>AO<150,28>AY<900,30>_<1350>SOW<300,32>YU<150>THIH<200>NX<100>KYU<150>KAE<100>N<50>LLAH<200,30>V<100>MIY<150>AE<75>N<50>D<25>LLIY<200,28>V<100>MIY<150>TUW<150>DAO<150,32>AO<150,35>AY<900,37>][:n0]"; prog_char queen23[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][OW<150,20>OW<1050,23>BEY<300,20>BIY<600,18>IY<300,20>_<300>KAE<75,21>N<50>T<25>DUW<150>DHIH<200>S<100>TUW<150,20>MIY<150>BEY<300>BIY<600,18>IY<300,20>JHAH<200,16>ST<100>GAO<150>DXAX<150>GEH<200>T<100>AW<500,18>T<100>JHAH<200,16>ST<100>GAO<150>DXAX<150>GEH<200>T<100>RAY<200,18>T<100>AW<150,16>TAH<100,15>V<50>HXIY<150,16>IR<450>][:n0]"; prog_char queen24[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][:dv gn 72][AH<300,23>AH<300,18>AH<150,20>AH<150,18>AH<300,21>AH<300,18>AH<1500,11>AH<150,16>AH<150,11>AH<150,16>AH<150,20>AH<1500,23>_<150>AH<150,13>AH<150,16>AH<150,20>AH<300,25>AH<600,20>AH<225,15>AH<75,18>AH<450,16>AH<300,18>AH<150,20>AH<150,21>AH<300,20>AH<150,20>AH<150,21>AH<150,24>AH<300,20>AH<300,15>AH<600,23>][:n0]"; prog_char queen25[] PROGMEM = "S[:phone arpa speak on][:rate 200][:n0][:dv gn 73] [NAH<300,33>THIH<200,32>NX<100>RIH<300,28>LLIY<300,20>MAE<300,23>DXRR<300>Z<150>EH<300,32>NIY<300,30>WAH<200,28>N<100>KAE<200,27>N<100>SIY<600,23>NAO<300,32>THIH<200,28>NX<100>RIH<300,30>LLIY<300,32>MAE<300,28>DXRR<300,24>Z<150>_<900>] [:dv hs 80 br 50 ap 110 as 100 pr 100 ] WELL, AT LEAST IN MY LIFE, THAT I CAN RECALL, NOTHING, EVER REALLY MATTERED TO [MIY<1000>] [:dv gn 73] [_<2400>EH<200,23>NIY<300>WEY<300,22>DHAX<300>WIH<300,21>N<200>D<100>BLLOW<450,30>Z<550>_<10000>][:n0]"; PROGMEM const char *strings_table[] = // table to refer to your long stuff you don't want to hog RAM { cheers0,cheers1,cheers2,cheers3,cheers4,stopdemo5,phillip6, phillip7, queen8, queen9, queen10, queen11, queen12, queen13, queen14,queen15,queen16,queen17,queen18, queen19, queen20,queen21,queen22,queen23,queen24,queen25}; void PrintEmic(String emiccmd){ //Function to prep string to send to EMIC when it's ready while (emicSerial.read() != ':'); //Rdy for talks? emicSerial.print(emiccmd); //Send to EMIC emicSerial.print('\n'); //Rdy! } void PrintEmicNoWait(String emiccmd){ //Function to prep string to send to EMIC right now. for (int chardex = 0; chardex != emiccmd.length(); chardex++){ //Sends as individually chars one after another(EMIC requirement for 'X' Stop command to work) emicSerial.print(emiccmd.charAt(chardex)); } emicSerial.print('\n'); //Rdy! } void PrintEmicTbl(int strindex){ //Prep strings_table item to send to EMIC(Specify string undex #) while (emicSerial.read() != ':'); //Rdy? emicSerial.print(strcpy_P(buffer, (char*)pgm_read_word(&(strings_table[strindex])))); // Put that string in RAM then print it emicSerial.print('\n'); //Rdy! } void PrintEmicTbl(int strindex, int totstrings){ //Prep strings_table item to send to EMIC(strindex specifies string undex #, totstrings specifies # of strings to play proceeding original string, including original) for (; totstrings != 0; totstrings--){ while (emicSerial.read() != ':'); //Rdy? emicSerial.print(strcpy_P(buffer, (char*)pgm_read_word(&(strings_table[strindex])))); // Put that string in RAM then print to emic strindex++; emicSerial.print('\n'); //Rdy! } } void setup() { pinMode(ledPin, OUTPUT); pinMode(rxPin, INPUT); pinMode(txPin, OUTPUT); emicSerial.begin(9600); PrintEmicNoWait("X"); //If your talking, shutup already (& send ready signal: all PrintEmic functions return \n). PrintEmic("R"); // Reset stuff PrintEmic("V12"); //-12 Girlfriend, 12 No Girlfriend emicSerial.flush(); } void loop() { PrintEmicTbl(5); //Stop Demo delay(4000); PrintEmicNoWait("X"); PrintEmic("P0"); // Bohemian Rhapsody by Queen PrintEmicTbl(8,18); PrintEmic("P1"); PrintEmic("P0"); //Cheers Theme Song PrintEmicTbl(0,5); PrintEmic("P1"); }
Comments
It would be interesting to hear your EMIC2 sing. Can you Youtube it?
Check this out to hear what it sounds like :
Working on a modular synth : https://www.muffwiggler.com/forum/viewtopic.php?t=142506
Thank you deladrière for recording the audio and uploading it.
That was a lot of fun.
Cheers,
Dave