Search the Community
Showing results for tags 'Voice Synthesizer'.
-
Hello About S.A.M. Is there a XEX or CAR version?
-
Getting the DFRobot voice synthesis shield working was an interim project until I could justify the procurement of a Wizztronics MidiMax unit. Now that it is here I want to get the last experiments documented, in case I ever want to turn the shield into a MIDI device. The last modification to the type and talk program added the ability to re-transmit the last words typed, if just hit the return. The program is still 3 lines of BASIC. 100 DIM A$(200),B$(200):CLOSE #1:OPEN #1,8,0,"R2:":XIO 36,#1,14,0,"R2:":XIO 38,#1,64,0,"R2:" 110 INPUT A$:IF LEN(A$)>0 THEN B$=A$ 120 PRINT #1,B$:XIO 32,#1,0,0,"R2:":GOTO 110 I got the Arduino and TTL to RS232 converter mounted onto a display plaque. Now the shield can be removed so the rest can be repurposed for another setup. They do get used a lot for my Atari8 projects. The next problem showed up when I wanted to record the voice. The headphones were unplugged and the computer aux. input was hooked up. A 60 cycle hum was now present where it wasn't before. I went back and listened to some old recordings and it was there, just not as loud. Turns out that that the shield uses a 4 connector 1/8" audio plug and the computer has a 3 connector plug. I opened up the drawer with the capacitors, closed my eyes, and picked out a 33 micro Farad, 50V capacitor and soldered the "+" side to ground on the plug and inserted the "-" into the ground pin of the Arduino. I'm not to sure of my method but the hum went away. The voice does seemed to be a little less harsh to the my ears (to me that's a good thing). Soldering the wire to the busy light probably voided the warranty so making this connection can't make it any more voided. Just before the MIDIMAX arrived I started working on adding speech to the old BASIC text "Adventure" game. There were at least 50 lines with PRINT statements and each one had to be examined to determine if the text should go to the screen or the RS-233 port. I got it to the point where it would speak the intro and then half way through the place description, it would cut to the next packet of information. There was a timing problem that needed to be solved. I think maybe using the block mode of transmission may not have been the best choice. The 32bit buffer may have been getting overwritten or maybe something needed to be changed on the Arduino side. Then the MIDIMAX arrived. Here are some sound samples from the "type and talk" program. The Arduino had to be reprogramed to get the different voices. They claim 19 different voices but most of them sound much the same to me. Voice examples.zip Like I have said, I didn't do any research on hardware alternatives. I can't say this is the best or most cost effective Text-to-speech hardware available. Would I go out and buy it again? Probably not, but I've had some fun playing with this one. P.S. I wish I hadn't thought of turning this Voice Shield into a MIDI device. I have the hardware; an Arduino, MIDI input (and a through port would be nice), switches to change parameters(and you can do this through midi commands) and a text display to view parameter settings. Maybe designing the MIDI Implementation Chart would be the best place to start. Channel #, using note numbers for predefined phrases, program changes for voice types, change speed with the pitch bender.. Whatever it would become, it would be playable using MIDI port hooked up to the Atari8. (or other MIDI equipped computer)
-
- Voice Synthesizer
- RS232
-
(and 1 more)
Tagged with:
-
Warning: This entry is about the hardware of an ongoing project. It may create more questions then answers. Please post any answers, along with the question, in the comment section. Be careful what you put on your Amazon Wish list. You just might get it. Before the holidays I loaded mine up with Arduino shields, breakout boards, servo motors and 2n2222 transistors. The speech synthesis shield for Arduino from DFROBOT was put on list without doing much research. No ratings or reviews should have made me think twice. The product information, Arduino library, example code and Wiki Doc links can be found here. From <https://www.dfrobot.com/index.php?route=product/product&path=35&product_id=1086> Watch the video. Twice in the review section, the response to a couple of customer questions was, "We make a video, you can take a look." The chip was made in China so it shouldn't be surprising that the voices have a Chinese accent. The cheep speaker didn't do much to improve the sound. I found the speech to be understandable. I have recorded an audio file using the sound recorder on the PC, that should give you a better feel for the quality that can be achieved. Audio: voice recording.zip Phase 1. Experimentation Armed with the Arduino Library, sample program and Wiki doc, the first order of business was to get the demo program to work. Thus revealing my first problem. The example had three sections of speech but seemed to hang after the first section. The Arduino was waiting for the shield to send it a couple of bytes that it never got. This doesn't seem like a unique problem, there are questions being asked in the Arduino forum but I haven't found a definitive answer. Someone translated part of the chip manual from Chinese but couldn't find a solution. Several iterations of the STATUS command listed in the Wiki Doc was tried without success. The shield was removed and jumper wires were used for the connections to view the TX and RX LED on the Arduino. The schematic was used to make the connections but when powered up, the power LED was quite dim. (What's that all about?) When the Serial read commands are removed from the program, the only thing you hear is the third speech section. This kind of leads one to believe that the last eSpeaking command will override a previous speech, even in the middle of a sentence. I still don't know if I am working with a bad board, faulty design or a program problem. So I moved on to playing with some of the speech options. Different voices, speeds, and interpretations of data can be achieved. Lots to consider if you want access to these options from the Atari computer. During all this I'm watching the shields green LED BUSY light turn on and off while the chip is working. On when its speaking, off when its not speaking. The voltage drop across the LED was measure to be about 2.7V when speaking and 0.0 when not speaking. (this next part could void the warranty) I soldered a jumper wire to the BUSY LED solder pad closest to the center of the board and plugged it into A5. There is a bit of lag time before the LED gets turn on and the chip gets busy, so a couple of delays were used to make timing adjustments before and after checking the LED status. All three segments of speech in the example could now be heard. Modified example program listing(changes in Bold) #include <SpeechSynthesis.h> int busyPin = 5; void setup() { Serial.begin(9600); } byte ssr[500];//define a character string void loop() { SpeechSynthesis.buf_init(ssr);//initialize the buff SpeechSynthesis.English(ssr,4,"5");//volume in grade 5 SpeechSynthesis.English(ssr,6,"cooki");//"6" means synthesis in English; "cooki"is the content SpeechSynthesis.English(ssr,4,"5"); SpeechSynthesis.English(ssr,6,"cooki Clock, reset and supply management"); SpeechSynthesis.English(ssr,2,"10"); SpeechSynthesis.English(ssr,6,"cooki Clock, reset and supply management"); SpeechSynthesis.English(ssr,2,"5");//speed of speaking: grade 5 SpeechSynthesis.English(ssr,5," ");//speed,volume,intomation are all set into default SpeechSynthesis.English(ssr,6,"cooki Clock, reset and supply management"); SpeechSynthesis.Espeaking(0,19,4,ssr);//Executive commands above, "0" is synthesis command; "19" select speaker; "4" speech function delay(500); while(analogRead(busyPin) > 100)//waiting synthesis complete {delay(500);} SpeechSynthesis.buf_init(ssr); SpeechSynthesis.English(ssr,6,"hello cooki 123"); SpeechSynthesis.Espeaking(0,19,4,ssr); delay(500); while(analogRead(busyPin) > 100)//waiting synthesis complete {delay(500);} SpeechSynthesis.buf_init(ssr); SpeechSynthesis.English(ssr,6,"hello cooki 123"); SpeechSynthesis.Espeaking(0,19,7,ssr); while(1); } Phase 2. Decide how to interface it to the computer and test. Phase 2 is still a work in progress. I kind of like the idea of using the RS232 port on the 850. This would allow the Arduino and Speech Shield to be accessed by any computer with the port. But then, preprograming the speeches on the Arduino and picking which one to say using the joystick port seems like an easy thing to do. But then, would the Arduino need to be reprogramed for each computer program you want to use. But then, what if the serial data from the speech chip can be received by some boards and not others. But then………………