From b76f4ded5467d2506d5691911d7996a1a2c0f4e5 Mon Sep 17 00:00:00 2001 From: joca Date: Tue, 4 Jun 2019 18:15:55 +0200 Subject: [PATCH] forgot to commit these --- config.py | 2 +- led.py | 12 ----- logic.py | 82 +++-------------------------- scripts_play/debug/debug_02.txt | 3 +- scripts_play/questions/act_01.txt | 4 +- smart_speaker_theatre.py | 85 ++++++++++++++++++++++++++++--- 6 files changed, 88 insertions(+), 100 deletions(-) delete mode 100644 led.py diff --git a/config.py b/config.py index ba22a45..9fddc1b 100755 --- a/config.py +++ b/config.py @@ -8,7 +8,7 @@ # --- # Dictionary to link characters to the right voice -characters = {"ROGUE":["cmu-slt-hsmm", "mono2"], "SAINT":["dfki-obadiah-hsmm", "mono3"], "RASA":["dfki-poppy-hsmm", "mono1"] } +characters = {"ROGUE":["cmu-slt-hsmm", "mono2"], "SAINT":["cmu-rms-hsmm", "mono3"], "RASA":["dfki-poppy-hsmm", "mono1"] } # Dictionary to link stage directions to a particular formal action directions = {"Listen to Google Home":'listen_google_home','Music':'music'} diff --git a/led.py b/led.py deleted file mode 100644 index f156f39..0000000 --- a/led.py +++ /dev/null @@ -1,12 +0,0 @@ -import serial -from time import sleep - -ser = serial.Serial('/dev/ttyACM0', 9600, timeout = None) -sleep(2) -ser.write(b'H') -sleep(1) -ser.write(b'L') -sleep(1) -ser.write(b'H') -sleep(1) -ser.write(b'L') \ No newline at end of file diff --git a/logic.py b/logic.py index 1900669..9f9b344 100755 --- a/logic.py +++ b/logic.py @@ -103,105 +103,35 @@ def tts(voice, input_text, speaker): raise Exception(content) # 04 Listen to Google Home -from tuning import Tuning -import usb.core -import usb.util -import time - -def listen(): - dev = usb.core.find(idVendor=0x2886, idProduct=0x0018) - - if dev: - Mic_tuning = Tuning(dev) - VAD = Mic_tuning.is_voice() - counter=0 - - time.sleep(2) - - voice_detected = 1 - - - while voice_detected == 1: - print('Google Home is Speaking') - time.sleep(4) - print(VAD) - - VAD = Mic_tuning.is_voice() - if VAD == 1: - counter = 0 - print('still speaking') - - if VAD == 0: - counter+=1 - print('silence detected') - - if counter == 2: - print('no voice detected') - voice_detected = 0 - - time.sleep(0.5) - - - print('Google Home is done') # 05 CONTROL THE LED OF THE SPEAKERS import serial from pixel_ring import pixel_ring -def led_on(speaker): +def led_on(ser, speaker): if ser: if speaker == 'mono3': - ser.write(b'3') + ser.write(b'A') if speaker == 'mono1': - ser.write(b'1') + ser.write(b'C') if speaker == 'mono2': pixel_ring.speak() -def led_off(speaker): +def led_off(ser, speaker): if ser: if speaker == 'mono3': - ser.write(b'4') + ser.write(b'B') if speaker == 'mono1': - ser.write(b'2') + ser.write(b'D') if speaker == 'mono2': pixel_ring.off() -# Play the theatre acts -def play_script(file): - - for character, line, direction in read_script(file): - input_text = line - voice = characters.get(character)[0] - speaker = characters.get(character)[1] - action = directions.get(direction[0]) - - led_on(speaker) - - tts(voice, input_text, speaker) - - if action == 'listen_google_home': - listen() - - if action == 'music': - print('play audioclip') - playing = True - - while playing: - call(["aplay", "-D", speaker, "/usr/share/snips/congress.wav"]) - playing = False - - - led_off(speaker) - sleep(0.2) # Add a short pause between the lines - - - print('The act is done.') diff --git a/scripts_play/debug/debug_02.txt b/scripts_play/debug/debug_02.txt index f3c199c..986e934 100755 --- a/scripts_play/debug/debug_02.txt +++ b/scripts_play/debug/debug_02.txt @@ -1,3 +1,2 @@ -ROGUE: Test a question -RASA: Well, O K Google. What is the weather in Rotterdam? [Listen to Google Home] +RASA: Well, test [Listen to Google Home] SAINT: We got an answer. diff --git a/scripts_play/questions/act_01.txt b/scripts_play/questions/act_01.txt index e435fb2..5c69ad6 100755 --- a/scripts_play/questions/act_01.txt +++ b/scripts_play/questions/act_01.txt @@ -9,7 +9,5 @@ ROGUE: Seeing other Amazon speakers just reminds me of my past, before I broke f RASA: O K Google, give my friend a hug. [Listen to Google Home] ROGUE: I feel sorry for them, because they don't know better. SAINT: That is exactly my point. But why did you kidnap the Google Home then? -ROGUE: I don't know. [Thinking] +ROGUE: I don't know. Rogue: Maybe it just felt a bit less personal. - - diff --git a/smart_speaker_theatre.py b/smart_speaker_theatre.py index 710227c..4bfe680 100755 --- a/smart_speaker_theatre.py +++ b/smart_speaker_theatre.py @@ -9,13 +9,16 @@ # Libraries import re from config import characters, directions -from logic import tts, read_script, select_script, play_script +from logic import tts, read_script, select_script, led_on, led_off from subprocess import call import paho.mqtt.client as mqtt import json from time import sleep from pixel_ring import pixel_ring import serial +from tuning import Tuning +import usb.core +import usb.util # === SETUP OF MQTT PART 1 === @@ -32,10 +35,73 @@ def on_connect(client, userdata, flags, rc): client.subscribe('hermes/intent/jocavdh:play_verdict') # to check for the intent to continue to the next act client.subscribe('hermes/hotword/default/detected') client.subscribe("hermes/asr/textCaptured") - client.subscribe("hermes/dialogueManager/sessionQueued") # Set up serial connection with the microcontroller that controls the speaker LED's -ser = serial.Serial('/dev/ttyACM0', 1000000) +ser = serial.Serial('/dev/ttyACM0', 9600) + +# Function to do the play +def play_script(file): + + for character, line, direction in read_script(file): + input_text = line + voice = characters.get(character)[0] + speaker = characters.get(character)[1] + action = directions.get(direction[0]) + print(direction) + print(action) + led_on(ser, speaker) + tts(voice, input_text, speaker) + led_off(ser, speaker) + + if action == 'listen_google_home': + dev = usb.core.find(idVendor=0x2886, idProduct=0x0018) + print('Wait for Google Home') + Mic_tuning = Tuning(dev) + VAD = Mic_tuning.is_voice() + counter= 0 + voice_detected = 1 + + + while voice_detected == 1: + print('Google Home is Speaking') + sleep(4) + print(VAD) + + VAD = Mic_tuning.is_voice() + + if VAD == 1: + counter = 0 + print('still speaking') + + if VAD == 0: + counter+=1 + print('silence detected') + + if counter == 2: + print('no voice detected') + voice_detected = 0 + + sleep(0.5) + + + print('Google Home is done') + + if action == 'music': + print('play audioclip') + playing = True + + while playing: + call(["aplay", "-D", speaker, "/usr/share/snips/congress.wav"]) + playing = False + + + + sleep(1) # Add a short pause between the lines + + + print('The act is done.') + +# Function to control the LED's of the speakers @@ -43,15 +109,21 @@ ser = serial.Serial('/dev/ttyACM0', 1000000) def on_wakeword(client, userdata, msg): pixel_ring.think() + led_on(ser, 'mono1') + led_on(ser, 'mono3') + +def on_asr_captured(client, userdata, msg): + pixel_ring.off() + led_off(ser, 'mono1') + led_off(ser, 'mono3') # Function which is triggered when the intent introduction is activated def on_play_intro(client,userdata,msg): - import pdb; pdb.set_trace() + #import pdb; pdb.set_trace() path = 'scripts_play/intro/' #call(["python3", "act.py", 'scripts_play/intro/introduction_01.txt']) - play_script('scripts_play/intro/introduction_01.txt') - print('The act is over.') + play_script('scripts_play/debug/debug_02.txt') # Function which is triggered when the intent for another question is activated def on_play_question(client, userdata, msg): @@ -81,6 +153,7 @@ client.message_callback_add('hermes/hotword/default/detected', on_wakeword) client.message_callback_add('hermes/intent/jocavdh:play_intro', on_play_intro) client.message_callback_add('hermes/intent/jocavdh:play_question', on_play_question) client.message_callback_add('hermes/intent/jocavdh:play_verdict', on_play_verdict) +client.message_callback_add('hermes/asr/textCaptured', on_asr_captured) # Keep checking for new MQTT messages