Example #1
0
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
Example #2
0
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,