“”"
I’m posting my moviconfig.py code. It’s cluttered with print statements and right now, only setVolume works (i think because it seems there is no getVolume() to interrogate the current setting). All my sub-modules state the module name and ask “What would you like to do now ?”. All modules have a “Help” function to give you the complete set of commands that can be requested .
One thing to note: whenever I do a recognizer.ask() I need to wait for the two beeps before speaking. That is when MOVI is in listen mode (-140). Otherwise, the beginning syllable(s) is not captured.
Also,looks to me like the forum changed font and reformatted my post so the indents look like they are lost? Is there a way to preserve courier font and python 4 space indents?
All feedback is welcomed
"""
indent preformatted text by 4 spaces
#!/usr/bin/python3
import serial
import time as t
import string
from movi import MOVI
from time import sleep, time
import datetime as _datetime
import sys
############################################
Setup MOVI
############################################
recognizer = MOVI()
recognizer.init(serialport="/dev/ttyAMA0")
recognizer.callSign(“RomanSentry\r”); # Train callsign (may take 20 seconds)
#—MOVI Config functions
recognizer.addSentence(“One”) # Add sentence 1
recognizer.addSentence(“Two”) # Add sentence 2
recognizer.addSentence(“Three”) # Add sentence 3
recognizer.addSentence(“Four”) # Add sentence 4
recognizer.addSentence(“Five”) # Add sentence 5
recognizer.addSentence(“Six”) # Add sentence 6
recognizer.addSentence(“Seven”) # Add sentence 7
recognizer.addSentence(“Eight”) # Add sentence 8
recognizer.addSentence(“Nine”) # Add sentence 9
recognizer.addSentence(“Ten”) # Add sentence 10
recognizer.addSentence(“Zero”) # Add sentence 11
recognizer.addSentence(“Twenty”) # Add sentence 12
recognizer.addSentence(“Thirty”) # Add sentence 13
recognizer.addSentence(“Forty”) # Add sentence 14
recognizer.addSentence(“Fifty”) # Add sentence 15
recognizer.addSentence(“Sixty”) # Add sentence 16
recognizer.addSentence(“Seventy”) # Add sentence 17
recognizer.addSentence(“Eighty”) # Add sentence 18
recognizer.addSentence(“Ninety”) # Add sentence 19
recognizer.addSentence(“One Hundred”) # Add sentence 20
recognizer.addSentence(“On”) # Add sentence 21
recognizer.addSentence(“Off”) # Add sentence 22
recognizer.addSentence(“Exit”) # Add sentence 23
recognizer.addSentence(“Help”) # Add sentence 24
recognizer.addSentence(“Set Volume”) # Add sentence 25
recognizer.addSentence(“Set Threshold”) # Add sentence 26
recognizer.addSentence(“Set Responses”) # Add sentence 27
recognizer.addSentence(“Set Welcome Message”) # Add sentence 28
recognizer.addSentence(“Set Synthesizer”) # Add sentence 29
recognizer.addSentence(“Set Sytem Messages”) # Add sentence 30
recognizer.addSentence(“Set Beeps”) # Add sentence 31
recognizer.addSentence(“Set Microphone Echo”) # Add sentence 32
recognizer.addSentence(“Start Countdown”) # Add sentence 33
recognizer.addSentence(“Set Defaults”) # Add sentence 34
recognizer.addSentence(“Start”) # Add sentence 35
recognizer.addSentence(“Control”) # Add sentence 36
recognizer.train()
def setValue(parameter, val):
print(“SETVALUE()”)
if val > 0:
lvl=val.str()
print(parameter)
print(lvl)
# 1 thru 10 can just be appended
if lvl == 18: # zero
lvl=“0"
if lvl == 12: # twenty
lvl=“3"
if lvl == 13: # Thirty
lvl=“3"
str=””+parameter+”("+ lvl +")"
print(str)
recognizer.sendCommand( str )
def getSpoken(askStr): # Give speaker 10 seconds to say something
print(“GETSPOKEN()”)
endloop=0
if askStr != “”:
recognizer.ask(askStr)
print(" – “+askStr)
speakWait() # Wait for MOVI to stop speaking (-151)
#listenWait() # Wait for receognizer to enter listen mode (-141) (up to 10 sec)
beginTime = t.time()
stopTime = beginTime + 10
print(” --getSpoken START TIMER")
while endloop == 0 and beginTime < stopTime: # -140=Listen mode turned on
beginTime = t.time()
val = recognizer.poll()
print( str(beginTime)+" - “+ str(stopTime)+” val= "+str(val) )
if val > 0: # You matched a sentence
print( "++1 getSpoken() matched sentence "+str(val) )
endloop=1
#if -141 == val:
# print( “++1 getSpoken() MOVI stopped listening “+str(val) )
# endloop=1
if endloop == 0:
endloop=1
val=0
print(”++getSpoken() Timed Out”)
return val
def speakWait():
val = recognizer.poll()
while -151 != val: # -151=Speaking has ended
val = recognizer.poll()
print( " --speakWait() val= "+str(val) )
sleep(.5)
print( " --DONE speakWait() val= "+str(val) )
def listenWait():
beginTime = t.time()
stopTime = beginTime + 10
val = recognizer.poll()
while -140 != val and beginTime < stopTime: # -140=Listen mode turned on
beginTime = t.time()
val = recognizer.poll()
print( " listenWait() val= "+str(val) )
sleep(.5)
def volume(): #########—25 Set Volume (Only takes numbers!)
print(" INSIDE volume()")
endloop=0
recognizer.say("Volume Is The Speaker Loudness ")
print("Volume Is The Speaker Loudness ")
speakWait() # Wait for MOVI to stop speaking (-151)
recognizer.say("You Can Specify a Percentage from Zero To One Hundred ")
print("You Can Specify a Percentage from Zero To One Nundred ")
speakWait() # Wait for MOVI to stop speaking (-151)
recognizer.say("The Default is Five ")
print("The Default is Five ")
speakWait() # Wait for MOVI to stop speaking (-151)
#---NONE OF THIS WORKS (but should) ???
#recognizer.sendCommand( "getVolume()","something" )
#val = recognizer.getResult()
#print("--1A volume() getVolume() returned val= "+str(val))
#while val == 0 and endloop == 0:
# val = recognizer.getResult()
# print("--1B volume() getVolume() returned val= "+str(val))
# val = recognizer.poll()
#print("--2A volume() val= "+str(val))
##listenWait()
#print("--2B volume() val= "+str(val))
#if val > 0:
# saystr = "Current Volume is %s" % (val)
# recognizer.say(saystr)
# speakWait()
# print("--3 val= "+str(val))
#------------------------------------------
val = getSpoken("What Volume Level Would You Like ?") # Get user response
print( "AFTER GETSPOKEN() val = %s" % str(val) )
cmdStr="setVolume(%d)" % val
recognizer.sendCommand( cmdStr )
val = recognizer.getResult()
saystr = "Volume Level Is Now %s " % str(val) # Would be better if MOVI had a getVolume()
recognizer.say(saystr)
speakWait()
def threshold(): ########—26 Set Threshold
recognizer.say("Threshold Is The Sensitivity to Background Noise “)
sleep(.5)
wait()
#print(”–1 res= “+str(res)+” val= "+str(val))
recognizer.sendCommand( "getThreshold()" )
val = recognizer.poll()
while 0 == val: # Wait for current value
val = recognizer.poll()
print("--2 waiting for non-zero result")
sleep(.5)
print("--2 res= "+str(res)+" val= "+str(val))
if val > 0:
saystr = "Current Threshold is %s" % (val)
recognizer.say(saystr)
val = recognizer.poll()
while -151 != val:
val = recognizer.poll()
print("--3 waiting for non-zero result val= "+str(val))
sleep(.5)
print("--3 res= "+str(res)+" val= "+str(val))
recognizer.say("What Threshold Level Would You Like ?")
val = recognizer.poll()
while -151 != val:
val = recognizer.poll()
print("--4 waiting for non-zero result val= "+str(val))
sleep(.5)
print("--4 res= "+str(res)+" val= "+str(val))
#------------------------------------------
getSpoken("setThreshold", res) # Get
print("AFTER GETSPOKEN()")
recognizer.sendCommand( "getThreshold()" )
val = recognizer.getResult()
saystr = "Threshold Level Is Now %s " % (val)
recognizer.say(saystr)
def response(): #########—27 Set Responses
recognizer.say("Response Off Will Silence MOEVI talk ")
sleep(.5)
val = recognizer.poll()
wait()
recognizer.say("Do You Want Response On or Off ?")
val = recognizer.poll()
wait()
print("--4 res= "+str(res)+" val= "+str(val))
#--Can't call getSpoken for on/off response!----
#getSpoken("setResponse", res) # Get
recognizer.ask()
val = recognizer.poll()
while "ACTIVELISTEN" == val:
print( "2-Response Is Now %s " % str(val) )
val = recognizer.poll()
sleep(.5)
val = recognizer.poll()
wait()
if val == 21:
val="ON"
else:
val="OFF"
recognizer.sendCommand( "getResponse(val)" )
sleep(.5)
# val = recognizer.getResult() # Returns "ACTIVELISTEN"
print( "4-Response Is Now %s " % str(val) )
saystr = "Response Is Now %s " % (val)
recognizer.say(saystr)
def dflts():
recognizer.callSign( “RomanSeven” )
recognizer.sendCommand( “setVolume(“2”)” )
recognizer.sendCommand( “setThreshold(“5”)” )
recognizer.sendCommand( “responses(“on”)” )
recognizer.sendCommand( “welcomeMessage(“on”)” )
recognizer.sendCommand( “setSynthesizer(“synth”)” ) #s/b int 1=Synth_Espeak, 2=Synth+Pico
recognizer.sendCommand( “SYSTEMMESSAGES(“ON”)” )
recognizer.sendCommand( “beeps(“ON”)” )
recognizer.sendCommand( “MICDEBUG(“ON”)” ) # Echo Microphone input only after Restart
def help(): ######### 24 Help
recognizer.say(“Your command options are”)
sleep(1)
recognizer.say(“Set Volume\r”) # Add sentence 25
sleep(.5)
recognizer.say(“Set Threshold”) # Add sentence 26
sleep(.5)
recognizer.say(“Set Responses”) # Add sentence 27
sleep(.5)
recognizer.say(“Set Welcome Message”) # Add sentence 28
sleep(.5)
recognizer.say(“Set Sytnesizer”) # Add sentence 29
sleep(.5)
recognizer.say(“Set System Messages”) # Add sentence 30
sleep(.5)
recognizer.say(“Set Beep”) # Add sentence 31
sleep(.5)
recognizer.say(“Set Microphone Echo”) # Add sentence 32
sleep(.5)
recognizer.say(“Start Countdown”) # Add sentence 33
sleep(.5)
recognizer.say(“Exit”) # Add sentence 23
sleep(.5)
recognizer.say(“And of course Help\r”) # Add sentence 24
keepgoing = 1
keeplooping = 1
############################################
Main Loop - Runs forever
############################################
while keepgoing:
recognizer.say("You Are In The MOEVI CONFIG Program ")
speakWait()
print(“Done Speaking PGM NAME”)
while keeplooping:
print("--Keeplooping WHILE--")
val = getSpoken("What Would You Like To Do Now ?")
print("getSpoken() returned val= "+str(val))
if 0 != val:
if val == 23: #---23 EXIT
keeplooping=0
keepgoing=0
if val == 24: #---HELP
help()
if val == 25: #---Set Volume (Only takes numbers!)
print("val == 25 --> val= "+str(val))
volume()
if val == 26: #---Set Threshold
threshold()
if val == 27: #---Set Responses
response()
print("GO TRHOUGH MAIN LOOP AGAIN")
recognizer.say(“Movi Config Program Ended\r”)
#exec(open(‘control.py’).read() )