diff --git a/action-play.py b/action-play.py index 96d0f2f..d018788 100755 --- a/action-play.py +++ b/action-play.py @@ -16,12 +16,9 @@ PORT = 1883 def on_connect(client, userdata, flags, rc): print("Connected to {0} with result code {1}".format(HOST, rc)) # Subscribe to the text detected topic - client.subscribe("hermes/asr/textCaptured") client.subscribe("hermes/nlu/intentNotRecognized") client.subscribe('hermes/intent/jocavdh:ask') client.subscribe('hermes/intent/jocavdh:answer_yes') - client.subprocess('hermes/dialogueManager/sessionEnded') - client.subprocess('hermes/dialogueManager/sessionStarted') def on_introduce(client,data,msg): data = json.loads(msg.payload) @@ -35,16 +32,40 @@ def on_introduce(client,data,msg): # Some way to do something with the stage directions will come here action = directions.get(direction[0]) tts(voice, input_text, speaker) + print('say this sentence') - client.publish('hermes/dialogueManager/endSession', json.dumps({ - 'sessionId': sessionId - })) + if action == 'listen_audience': + print('listen to the audience') - client.publish('hermes/dialogueManager/startSession', json.dumps({ - 'siteId': 'default', - 'init': {'type': 'action', 'canBeEnqueued': False, 'intentFilter':['jocavdh:answer_yes']} - })) + client.publish('hermes/dialogueManager/endSession', json.dumps({ + 'sessionId': sessionId + })) + client.publish('hermes/dialogueManager/startSession', json.dumps({ + 'siteId': 'default', + 'init': {'type': 'action', 'canBeEnqueued': True, 'intentFilter':['jocavdh:answer_yes']} + })) + + break + + if action == 'listen_google_home': + print('ok google') + client.publish('hermes/dialogueManager/endSession', json.dumps({ + 'sessionId': sessionId + })) + + client.publish('hermes/dialogueManager/startSession', json.dumps({ + 'siteId': 'default', + 'init': {'type': 'action', 'canBeEnqueued': True, 'sendIntentNotRecognized': True} + })) + + # client.publish("hermes/asr/toggleOn") + # client.publish('hermes/asr/startListening', json.dumps({ + # 'siteId': 'default' + # })) + + break + def on_answer(client,data,msg): @@ -52,28 +73,34 @@ def on_answer(client,data,msg): answer_value = data['slots'][0]['value']['value'] print(answer_value) + voice = "dfki-obadiah" + speaker = 'default' + if answer_value == 'yes': input_text = 'Lorem ipsum' + tts(voice, input_text, speaker) + #on_introduce(client,data,msg) if answer_value == 'no': input_text = 'nope nope nope' + tts(voice, input_text, speaker) - voice = "dfki-obadiah" - speaker = 'default' + print('The play is over.') + +def onIntentNotRecognized(client, data, msg): + data = json.loads(msg.payload) - tts(voice, input_text, speaker) + print('not recognized') - print('The play is over.') + on_introduce(client,data,msg) client = mqtt.Client() client.connect(HOST, PORT, 60) client.on_connect = on_connect -client.connected_flag=False client.message_callback_add('hermes/intent/jocavdh:ask', on_introduce) client.message_callback_add('hermes/intent/jocavdh:answer_yes', on_answer) -client.message_callback_add('hermes/intent/jocavdh:no', on_answer) +client.message_callback_add("hermes/nlu/intentNotRecognized", onIntentNotRecognized) print('main') -listening = False client.loop_forever() \ No newline at end of file diff --git a/logic.py b/logic.py index 3470c93..3914c31 100644 --- a/logic.py +++ b/logic.py @@ -77,109 +77,3 @@ def tts(voice, input_text, speaker): else: raise Exception(content) - - -# 03 FUNCTIONS TO RUN THE PLAY ON THE SPEAKERS -import paho.mqtt.client as mqtt -import json -from time import sleep - -HOST = 'localhost' -PORT = 1883 - - -def on_connect(client, userdata, flags, rc): - print("Connected to {0} with result code {1}".format(HOST, rc)) - # Subscribe to the text detected topic - client.subscribe("hermes/asr/textCaptured") - client.subscribe("hermes/nlu/intentNotRecognized") - client.subscribe('hermes/intent/jocavdh:ask') - client.subscribe('hermes/intent/jocavdh:answer_yes') - client.subprocess('hermes/dialogueManager/sessionEnded') - client.subprocess('hermes/dialogueManager/sessionStarted') - - -def on_message(client, userdata, msg): - print('Google Home is not speaking anymore') - client.connected_flag=True - -# def on_waiting(client, userdata, msg): -# sessionId = json.loads(id.payload) -# print('delete mistaken intent') -# client.publish("hermes/dialogueManager/endSession", json.dumps({ -# 'sessionId': sessionId, -# })) - -client = mqtt.Client() -client.connect(HOST, PORT, 60) -client.on_connect = on_connect -client.connected_flag=False - -listening = False - - -def play(): - for character, line, direction in read_script('play_scripts/demo.txt'): - input_text = line - voice = characters.get(character)[0] - speaker = characters.get(character)[1] - #speaker = 'default' - # Some way to do something with the stage directions will come here - action = directions.get(direction[0]) - tts(voice, input_text, speaker) - - if action == 'listen_google_home': - print('Waiting for the Google Home to finish its talk') - - # # start voice activity detection - # client.publish("hermes/asr/startListening", json.dumps({ - # 'siteId': 'default', - # 'init': { - # 'type': 'action', - # 'canBeEnqueued': True - # } - # })) - - client.publish("hermes/asr/startListening", json.dumps({ - 'siteId': 'default' - })) - - # create callback - client.on_message = on_message - listening = True - - while listening: - client.loop() - - #client.on_message = on_message - client.message_callback_add('hermes/asr/textCaptured', on_message) - - if client.connected_flag: - sleep(1) - print('Continue the play') - client.connected_flag = False - # client.message_callback_add('hermes/dialogueManager/sessionQueued', on_waiting) - break - - if action == 'audio': - print('play audioclip') - playing = True - - while playing: - call(["aplay", "-D", speaker, "/usr/share/snips/congress.wav"]) - playing = False - - if action == 'listen_audience': - print('ask the audience') - - - - - - - sleep(1) - - - print('This act is done.') - - return diff --git a/play_scripts/demo.txt b/play_scripts/demo.txt index 01f69ce..97497c0 100644 --- a/play_scripts/demo.txt +++ b/play_scripts/demo.txt @@ -1 +1,2 @@ -ROGUE: Give me \ No newline at end of file +ROGUE: [Listens to Google Home] Give me +SAINT: Do that. \ No newline at end of file