示例#1
0
 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")
示例#2
0
    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")
示例#3
0
            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)
                )
示例#4
0
    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")
示例#5
0
 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()))