def in_listening(self, message: Any, sender: RhasspyActor) -> None: """Handle messages in listening state.""" if isinstance(message, AudioData): self.buffer += message.data elif isinstance(message, WakeupMessage): if message.payload == self.timeout_id: # Timeout self._logger.warning("Timeout") self.send(self.recorder, StopStreaming(self.myAddress)) self.send( self.receiver, VoiceCommand(self.buffer, timeout=True, handle=self.handle), ) self.transition("started") elif isinstance(message, MqttMessage): if message.topic == self.stop_topic: # stopListening payload_json = json.loads(message.payload) if payload_json.get("siteId", "default") in self.site_ids: self._logger.debug("Received stopListening") self.send(self.recorder, StopStreaming(self.myAddress)) self.send( self.receiver, VoiceCommand(self.buffer, handle=self.handle) ) self.transition("started")
def in_listening(self, message: Any, sender: RhasspyActor) -> None: """Handle messages in listening state.""" if isinstance(message, AudioData): assert self.receiver is not None self.transition("started") self.send(self.recorder, StopStreaming(self.myAddress)) self._logger.debug("Received %s byte(s) of audio data", len(message.data)) self.send(self.receiver, VoiceCommand(message.data, self.handle)) elif isinstance(message, WakeupMessage): # Timeout self._logger.warning("Timeout") self.send(self.recorder, StopStreaming(self.myAddress)) self.send( self.receiver, VoiceCommand(bytes(), timeout=True, handle=self.handle) ) self.transition("started")
def post_result() -> None: # STDOUT -> WAV data try: wav_data, _ = self.listen_proc.communicate() except Exception: wav_data = bytes() self._logger.exception("post_result") # Actor will forward audio_data = convert_wav(wav_data) self.send( self.myAddress, VoiceCommand(audio_data, handle=message.handle) )
def in_listening(self, message: Any, sender: RhasspyActor) -> None: """Handle messages in listening state.""" if isinstance(message, WakeupMessage): if message.payload == self.timeout_id: # Timeout self._logger.warning("Timeout") self.send(self.recorder, StopStreaming(self.myAddress)) self.send( self.receiver, VoiceCommand( self.buffer or bytes(), timeout=True, handle=self.handle ), ) self.buffer = bytes() self.transition("loaded") elif isinstance(message, AudioData): self.chunk += message.data if len(self.chunk) >= self.chunk_size: # Ensure audio data is properly chunked (for webrtcvad) data = self.chunk[: self.chunk_size] self.chunk = self.chunk[self.chunk_size :] # Process chunk finished = self.process_data(data) if finished: # Stop recording self.send(self.recorder, StopStreaming(self.myAddress)) # Response self.send( self.receiver, VoiceCommand(self.buffer, timeout=False, handle=self.handle), ) self.buffer = bytes() self.transition("loaded")
def in_started(self, message: Any, sender: RhasspyActor) -> None: """Handle messages in started state.""" if isinstance(message, ListenForCommand): self.send(message.receiver or sender, VoiceCommand(bytes()))