Merge pull request #628 from forslund/bugfix/issue-627

Stop multi-sentence speech
pull/675/head^2
Augusto Monteiro 2017-04-26 09:52:53 -07:00 committed by GitHub
commit 38087fc4e6
1 changed files with 9 additions and 0 deletions

View File

@ -19,6 +19,7 @@
import re import re
import sys import sys
from threading import Thread, Lock from threading import Thread, Lock
import time
from mycroft.client.enclosure.api import EnclosureAPI from mycroft.client.enclosure.api import EnclosureAPI
from mycroft.client.speech.listener import RecognizerLoop from mycroft.client.speech.listener import RecognizerLoop
@ -36,6 +37,7 @@ ws = None
tts = TTSFactory.create() tts = TTSFactory.create()
lock = Lock() lock = Lock()
loop = None loop = None
_last_stop_signal = 0
config = ConfigurationManager.get() config = ConfigurationManager.get()
@ -80,6 +82,8 @@ def handle_multi_utterance_intent_failure(event):
def handle_speak(event): def handle_speak(event):
global _last_stop_signal
utterance = event.data['utterance'] utterance = event.data['utterance']
expect_response = event.data.get('expect_response', False) expect_response = event.data.get('expect_response', False)
@ -95,10 +99,13 @@ def handle_speak(event):
chunks = re.split(r'(?<!\w\.\w.)(?<![A-Z][a-z]\.)(?<=\.|\?)\s', chunks = re.split(r'(?<!\w\.\w.)(?<![A-Z][a-z]\.)(?<=\.|\?)\s',
utterance) utterance)
for chunk in chunks: for chunk in chunks:
now = time.time()
try: try:
mute_and_speak(chunk) mute_and_speak(chunk)
except: except:
logger.error('Error in mute_and_speak', exc_info=True) logger.error('Error in mute_and_speak', exc_info=True)
if _last_stop_signal > now:
break
else: else:
mute_and_speak(utterance) mute_and_speak(utterance)
@ -115,6 +122,8 @@ def handle_wake_up(event):
def handle_stop(event): def handle_stop(event):
global _last_stop_signal
_last_stop_signal = time.time()
kill([config.get('tts').get('module')]) kill([config.get('tts').get('module')])
kill(["aplay"]) kill(["aplay"])