Taligenkänning Animatronic talande träd - del 2 - (3 / 8 steg)
Steg 3: Börja skissa
Skriv följande i den nya skissen. (Alternativt du kan ta tag i text-filen "voce1.txt" och kopiera/klistra in det i din skiss)
//import bibliotekimport guru.ttslib.*;
import processing.serial.*;
ge våra instanser namn
Seriella treePort;
TTS-tts;
En sträng för att hålla saker att säga
Sträng meddelande = "Ho Ho Ho";
void setup() { void draw() { om (voce. SpeechInterface.getRecognizerQueueSize() > 0) {//if voce erkänner något sagt
följande initierar voce biblioteket
voce. SpeechInterface.init ("libraries/voce-0.9.1/lib", sant, true,"libraries/voce-0.9.1/lib/gram","digits);
starta vår port och också TTS-
treePort = ny Serial(this,Serial.list()[0],9600);
TTS = nya TTS();
följande inställningar styr röst ljudet
tts.setPitch (180),
tts.setPitchRange (90).
tts.setPitchShift (-10.5);
treePort.write("73"); Skicka kommando för att slå på belysningen och öppna ögon
}
Sträng s = voce. SpeechInterface.popRecognizedString(); tilldela strängen att voce hörde till variabel s
println ("du sa:" + s); Skriv ut vad hördes till felsökningsfönstret.
respond(s);
}
}
Du kommer att märka att jag inte använder mBrola röster längre, jag tyckte att de var motstridiga med voce. Med tweeking pitch, pitchrange och pitchshift kan du träna en röst som är liknande. Jag förstår att Detta är inte Siri kvalitet röster, men det är fortfarande ett trevligt sätt att få ditt projekt talar. Jag anser att robotar låter bra när de låter som robotar, men så är det bara jag.
Du kommer också att märka att vi behöver inte importera bibliotek, vi gjorde det direkt genom att importera de burken.
Strukturera av initieringsanropet i setup är följande;
(platsen för biblioteksfiler, boolean för tal generation, boolean för taligenkänning, grammatik-filerna, och namnet på filen grammatik.)
Innan vi kan börja med mer dynamiskt genererade tal, kommer vi att skriva en liten funktion som tar hand om dynamiskt animera trädet när det talar.
Gå ner till botten av du skissa, under funktionen dra och Lägg till följande.
//This funktion kommer att dela texten i flera ord, och besluta hur man animerar på längden på varje ord och även pauser som betecknas "!"{Ogiltig svara (stränginmatning)
om (input.length() > 0) {//we faktiskt har något att säga
voce. SpeechInterface.setRecognizerEnabled(false); sluta lyssna, annars kommer vi höra oss och gå in i en loop
Detta bara delar upp alla ord skickar rörelse
String [] ord = dela (ingång,"");
int howMany = words.length;
för (int jag = 0; jag < howMany; i ++) {
Sträng bitar [] = split(words[i],"!"); om vi ser en! då läser pauser något så det är en bra tid att blinka
IF(Pieces.length==2) {
treePort.write("1");
int paus = int(random(100));
IF(PAUSE>60) {
treePort.write("5");
}
annat {
treePort.write("7");
Delay(500);
}
}
annat {
treePort.write("1");
}
}
TTS.Speak(input);
voce. SpeechInterface.setRecognizerEnabled(true);
}
}
En annan sak att notera är hur handskriftstolken försöker vettigt ur nästan alla tal den hör, och så kommer att vräka ut nummer oavsett vilka ord du talar. Oroa dig inte, vi kommer att ta itu med det i följande steg.