zaterdag 20 augustus 2016

Weer een subsysteem van Zyptar: de stemgenerator

Voor het genereren van de stem van Zyptar gebruik ik de Emic 2 Text tot Speech generator. https://www.parallax.com/product/30016

Proefopstelling
De generator gebruikt een seriƫle poort, dus je hebt een schrijfpin en een leespin die je aan moet sluiten. Ik heb pin 51 en 53 gebruikt.


Er is een demoprogrammaatje van Joe Grand [www.grandideastudio.com]  dat ik een beetje heb aangepast.

#include <SoftwareSerial.h>
#define rxPin 51    // Serial input (connects to Emic 2 SOUT)
#define txPin 53    // Serial output (connects to Emic 2 SIN)
#define ledPin 13  // Most Arduino boards have an on-board LED on this pin
// set up a new serial port
SoftwareSerial emicSerial =  SoftwareSerial(rxPin, txPin);

void setup()  // Set up code called once on start-up
{

  // define pin modes
  pinMode(ledPin, OUTPUT);
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
 
  // set the data rate for the SoftwareSerial port
  emicSerial.begin(9600);
  digitalWrite(ledPin, LOW);  // turn LED off
 
  /*
    When the Emic 2 powers on, it takes about 3 seconds for it to successfully
    intialize. It then sends a ":" character to indicate it's ready to accept
    commands. If the Emic 2 is already initialized, a CR will also cause it
    to send a ":"
  */
  emicSerial.print('\n');             // Send a CR in case the system is already up
  while (emicSerial.read() != ':');   // When the Emic 2 has initialized and is ready, it will send a single ':' character, so wait here until we receive it
 delay(10);                          // Short delay

 
  emicSerial.flush();                 // Flush the receive buffer
}




void loop()  // Main code, to run repeatedly
{
  // Speak some text
  emicSerial.print("N1");
  emicSerial.print('\n');
  while (emicSerial.read() != ':');
  emicSerial.print('S');
  emicSerial.print("Whaaaat, this is an insult. Only twenty cents? You make Zoltar very angry");  // Send the desired string to convert to speech
  emicSerial.print('\n');

  digitalWrite(ledPin, HIGH);         // Turn on LED while Emic is outputting audio
  while (emicSerial.read() != ':');

  while(1)      // Demonstration complete!
  {
    delay(500);
    digitalWrite(ledPin, HIGH);
    delay(500);             
    digitalWrite(ledPin, LOW);
  }
}


Wat dit dus doet is de Emic 2 initialiseren en stem 1 kiezen (emicSerial.print("N1");). Dit is de stem met de meeste bas er in, dus het meest "mannelijk".


En dan zegt Zyptar:


Whaaaat, this is an insult. Only twenty cents? You make Zoltar very angry


Luister naar de video, dan hoor je hoe de generator klinkt.




Beetje zoals Stephen Hawkins. Ik weet niet of ik er zo blij mee ben. Misschien dat ik de teksten toch op ga nemen en als MP3 afspelen. Dat is wel veel meer werk. Hiermee hoef ik alleen tekstjes te typen.

Geen opmerkingen:

Een reactie plaatsen