From 7c7fcf071a6ab44c43990ee9a96b7e342eacea4a Mon Sep 17 00:00:00 2001 From: Ruben van de Ven Date: Fri, 20 Dec 2019 12:12:11 +0100 Subject: [PATCH] Add tempo factor for whole story and log messages with label --- hugvey/speech/google.py | 2 +- hugvey/story.py | 23 ++++++++++++++++++----- www/js/hugvey_console.js | 20 +++++++++++++++++--- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/hugvey/speech/google.py b/hugvey/speech/google.py index 41f6091..4e2b8ce 100644 --- a/hugvey/speech/google.py +++ b/hugvey/speech/google.py @@ -128,7 +128,7 @@ class GoogleVoiceClient(object): self.logger.log(LOG_BS,"wait for Google Voice") if not self.isRunning.wait(timeout=1): continue # re-ceck toBeShutdown - self.logger.debug("Starting Google Voice") + self.logger.debug(f"Starting Google Voice for {self.language_code}") audio_generator = self.generator() diff --git a/hugvey/story.py b/hugvey/story.py index a7183b8..6160756 100644 --- a/hugvey/story.py +++ b/hugvey/story.py @@ -34,7 +34,7 @@ class Utterance(object): self.lastUpdateTime = startTime def setText(self, text, now): - self.text = text + self.text = text.lower() # always lowercase self.lastUpdateTime = now def hasText(self): @@ -173,6 +173,13 @@ class Message(object): if self.label and len(self.label): return self.label return self.getText() + + def getTextLabel(self): + """ + A combination of getText and getLabel for maximum verbosity + """ + l = f" ({self.label})" if self.label and len(self.label) else "" + return f"{self.getText()}{l}" def setReply(self, reply): self.reply = reply @@ -203,7 +210,7 @@ class Message(object): return { 'id': self.id, 'time': None if self.reply is None else [u.startTime for u in self.reply.utterances], - 'text': self.getText(), + 'text': self.getTextLabel(), 'replyText': None if self.reply is None else [u.text for u in self.reply.utterances] } @@ -212,7 +219,8 @@ class Message(object): return self.audioFile text = self.getText() - self.logger.debug(f"Fetching audio for {text}") + textlabel = self.getTextLabel() + self.logger.debug(f"Fetching audio for {textlabel}") # return "test"; async with self.filenameFetchLock: @@ -236,7 +244,7 @@ class Message(object): # print(threading.enumerate()) - self.logger.debug(f"Fetched audio for {text}: {filename}") + self.logger.debug(f"Fetched audio for {textlabel}: {filename}") return filename @@ -1174,6 +1182,7 @@ class Configuration(object): volume = 1 # Volume multiplier for 'play' command nothing_text = "nothing" # When variable is not set, but used in sentence, replace it with this word. time_factor = 1 + tempo_factor = 1 light0_intensity = 0 light0_fade = 30. # fade duration in seconds light0_isSophie = False @@ -1884,7 +1893,7 @@ class Story(object): # self.currentReply = self.currentMessage.reply self.logger.info("Current message: ({0}) \"{1}\"".format( - message.id, message.getText())) + message.id, message.getTextLabel())) if message.id != self.startMessage.id: self.addToLog(message) @@ -1905,6 +1914,10 @@ class Story(object): params = message.getParams().copy() params['vol'] = params['vol'] * self.configuration.volume if 'vol' in params else self.configuration.volume params['vol'] = "{:.4f}".format(params['vol']) + params['tempo'] = (float(params['tempo']) if 'tempo' in params else 1) * (float(self.configuration.tempo_factor) if hasattr(self.configuration, 'tempo_factor') else 1) + duration = float(duration) / params['tempo'] + + params['tempo'] = "{:.4f}".format(params['tempo']) # self.hugvey.google.pause() # pause STT to avoid text events while decision is made self.hugvey.sendCommand({ diff --git a/www/js/hugvey_console.js b/www/js/hugvey_console.js index b43f315..2320767 100644 --- a/www/js/hugvey_console.js +++ b/www/js/hugvey_console.js @@ -1096,7 +1096,7 @@ class Graph { ), crel( 'label', - "Timing factor: (< 1 is faster, >1 is slower)", + "Condition timing factor: (< 1 is faster, >1 is slower)", crel('input', { 'type': 'number', 'on': { @@ -1108,6 +1108,20 @@ class Graph { 'step': 0.01 }) ), + crel( + 'label', + "Playback tempo factor: (< 1 is faster, >1 is slower)", + crel('input', { + 'type': 'number', + 'on': { + 'change': function(e){ + panopticon.graph.configuration['tempo_factor'] = parseFloat(e.target.value) + } + }, + 'value': this.configuration.hasOwnProperty('tempo_factor') ? this.configuration.tempo_factor : 1, + 'step': 0.01 + }) + ), crel('hr'), crel('h2', 'Light fade setting #0'), crel( @@ -1577,8 +1591,8 @@ class Graph { ), crel( 'label', crel( 'span', { - "title": "Playback pitch factor" - }, 'Pitch factor' ), + "title": "Playback pitch: negative: lower, positive: higher" + }, 'Pitch' ), crel( 'input', { 'name': msg['@id'] + '-params.pitch', 'value': params.hasOwnProperty('pitch') ? params['pitch'] : 0,