class MqttClient: host = "172.17.0.1" # Docker's IP port = int(os.getenv("ROBOT_MQTT_PORT", 1883)) topic = "boards/head" topic_log = "boards/head:log" keepalive = 60 logger = get_logger(__name__) def __init__(self) -> None: self.client = mqtt.Client() self.client.connect(self.host, self.port, self.keepalive) self.client.loop_start() self.subscribe_to_log() def publish(self, message, topic=None) -> None: if topic is None: topic = self.topic self.logger.info(f"Publishing to {topic} = {message}") self.client.publish(topic, message) def subscribe_to_log(self) -> None: def on_message(client, userdata, message) -> None: # ANSI escape color code has length of 7 # ANSI escape reset code has length of 4 + 1 from \n, but it can be removed from strip() trimmed_payload = message.payload[7:] board_log_entry = trimmed_payload.decode("utf-8", "ignore").strip() # self.logger.debug(f"[MQTT] Received data:\n{board_log_entry}") self.client.subscribe(self.topic_log) self.client.on_message = on_message
from math import sqrt import numpy as np import pyaudio from mind.ai.speech_to_text import SpeechToTextListenerTask from mind.logging import get_logger from mind.messaging import Task, publish_message from mind.models import AudioFrame logger = get_logger(__name__) class MicrophoneStreamTask(Task): # frames_per_buffer = int((SpeechToTextTask.sample_rate / 1000) * 1024) # half of 32768 frames_per_buffer = int(SpeechToTextListenerTask.sample_rate / 50) sound_level = 1.2 def __init__(self, auto_start: bool = True) -> None: super().__init__(auto_start) def run(self): audio = pyaudio.PyAudio() stream = audio.open( format=pyaudio.paInt16, channels=1, rate=SpeechToTextListenerTask.sample_rate, input=True, frames_per_buffer=self.frames_per_buffer,