new_voices
joca 5 years ago
commit 42dbe9c1d1

@ -3,12 +3,11 @@
# PLAY_ACT.py # PLAY_ACT.py
# This script runs the play # This script runs the play
# It is in a seperate file to enable the mechanism to detect the Google Home speaking, before continuing to the next line
# Libraries # Libraries
from config import characters, directions from config import characters, directions
from logic import tts, read_script, led_on, led_off, select_script, listen from logic import tts, read_script,listen
from pixel_ring import pixel_ring
from subprocess import call from subprocess import call
import paho.mqtt.client as mqtt import paho.mqtt.client as mqtt
import json import json
@ -18,75 +17,50 @@ from time import sleep
# Switch of LED's of speakers at the start of the play # Switch of LED's of speakers at the start of the play
#pixel_ring.off() #pixel_ring.off()
import serial
from pixel_ring import pixel_ring
ser = serial.Serial('/dev/ttyACM0', 1000000) # Establish the connection on a specific port
def led_on(speaker):
# === SETUP OF MQTT PART 1 === if speaker == 'mono3':
ser.write(b'3')
# Location of the MQTT server
HOST = 'localhost' if speaker == 'mono1':
PORT = 1883 ser.write(b'1')
# Subscribe to relevant MQTT topics if speaker == 'mono2':
def on_connect(client, userdata, flags, rc): pixel_ring.speak()
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/dialogueManager/sessionQueued")
# Function which sets a flag when the Google Home is not speaking
# Callback of MQTT message that says that the text is captured by the speech recognition (ASR)
def done_speaking(client, userdata, msg):
print('Google Home is not speaking anymore')
client.connected_flag=True
# Function which removes intents that are by accident activated by the Google Home
# e.g. The google home says introduce yourself, which could trigger the other speakers to introduce themselves
# Snips works with queing of sessions, so this situation would only happen after this play is finished
def remove_sessions(client, userdata, msg):
sessionId = json.loads(id.payload)
print('delete mistaken intent')
client.publish("hermes/dialogueManager/endSession", json.dumps({
'sessionId': sessionId,
}))
# === SETUP OF MQTT PART 2 ===
# Initialise MQTT client
client = mqtt.Client()
client.connect(HOST, PORT, 60)
client.on_connect = on_connect
def led_off(speaker):
# === Read script and run the play === if speaker == 'mono3':
ser.write(b'4')
if speaker == 'mono1':
ser.write(b'2')
if speaker == 'mono2':
pixel_ring.off()
# Flags to check if the system is listening, or not
client.connected_flag=False
listening = False
# Read the script and run the play # Read the script and run the play
#file = sys.argv[1] # get the chosen act passed by smart_speaker_theatre.py file = sys.argv[1] # get the chosen act passed by smart_speaker_theatre.py
file = select_script('scripts_play/intro/')
for character, line, direction in read_script('scripts_play/intro/introduction_01.txt'): for character, line, direction in read_script(file):
input_text = line input_text = line
voice = characters.get(character)[0] voice = characters.get(character)[0]
speaker = characters.get(character)[1] speaker = characters.get(character)[1]
#speaker = 'default'
# Some way to do something with the stage directions will come here
action = directions.get(direction[0]) action = directions.get(direction[0])
pixel_ring.speak()
led_on(speaker)
tts(voice, input_text, speaker) tts(voice, input_text, speaker)
if action == 'listen_google_home': if action == 'listen_google_home':
listen() listen()
if action == 'music': if action == 'music':
@ -96,10 +70,9 @@ for character, line, direction in read_script('scripts_play/intro/introduction_0
while playing: while playing:
call(["aplay", "-D", speaker, "/usr/share/snips/congress.wav"]) call(["aplay", "-D", speaker, "/usr/share/snips/congress.wav"])
playing = False playing = False
#pixel_ring.off() # Switch of the lights when done speaking led_off(speaker)
sleep(0.2) # Add a short pause between the lines sleep(0.2) # Add a short pause between the lines

@ -1,59 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# PLAY_ACT.py
# This script runs the play
# It is in a seperate file to enable the mechanism to detect the Google Home speaking, before continuing to the next line
# Libraries
from config import characters, directions
from logic import tts, read_script,listen
from subprocess import call
import paho.mqtt.client as mqtt
import json
import sys
from time import sleep
# Switch of LED's of speakers at the start of the play
#pixel_ring.off()
import serial
from pixel_ring import pixel_ring
#ser = serial.Serial('/dev/ttyACM0', 1000000) # Establish the connection on a specific port
# Read the script and run the play
file = sys.argv[1] # get the chosen act passed by smart_speaker_theatre.py
#led_off(speaker)
for character, line, direction in read_script(file):
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])
#pixel_ring.speak()
#led_on(speaker)
tts(voice, input_text, speaker)
#led_off(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
sleep(0.2) # Add a short pause between the lines
print('The act is done.')

@ -58,11 +58,16 @@ from urllib.parse import urlencode, quote # For URL creation
def tts(voice, input_text, speaker): def tts(voice, input_text, speaker):
if speaker =="mono1":
volume_level = "amount:1.0"
if speaker == "mono2":
volume_level = "amount:0.7"
if speaker == "mono3": if speaker == "mono3":
volume_level = "amount:0.5" volume_level = "amount:0.8"
else:
volume_level = "amount:1.0"
# Build the query # Build the query
query_hash = {"INPUT_TEXT": input_text, query_hash = {"INPUT_TEXT": input_text,
@ -145,9 +150,7 @@ import serial
from pixel_ring import pixel_ring from pixel_ring import pixel_ring
ser = serial.Serial('/dev/ttyACM0', 1000000) # Establish the connection on a specific port ser = serial.Serial('/dev/ttyACM0', 1000000) # Establish the connection on a specific port
def led_on(speaker): def led_on(speaker):
if speaker == 'mono3': if speaker == 'mono3':
ser.write(b'3') ser.write(b'3')

@ -50,8 +50,8 @@ def on_play_intro(client,userdata,msg):
# 'jocavdh:play': False # 'jocavdh:play': False
# } # }
# })) # }))
path = 'scripts_play/intro/'
call(["python3", "act_debug.py"]) call(["python3", "act.py", 'scripts_play/intro/introduction_01.txt'])
print('The act is over.') print('The act is over.')
#on_play_question(client, userdata, msg) #on_play_question(client, userdata, msg)
@ -87,4 +87,4 @@ client.message_callback_add('hermes/intent/jocavdh:play_verdict', on_play_verdic
# Keep checking for new MQTT messages # Keep checking for new MQTT messages
client.loop_forever() client.loop_forever()

Loading…
Cancel
Save