""" ATTN: This bot relies on both the pymumble and numpy libraries. Make sure they are installed before running. mimic-bot connects to the murmur server you designate, enters the channel assigned via "channel", and repeats back audio received from the user after a short delay """ import pymumble_py3 import time from pymumble_py3.callbacks import PYMUMBLE_CLBK_SOUNDRECEIVED as PCS from collections import deque import numpy as np server = "localhost" # Server address nick = "mimic-bot" # Bot name channel = "audio test" # Channel name audio_buffer = deque() # Initialize a buffer to store audio chunks last_received = None # Initialize a timestamp for the last received chunk wait_duration = 2.0 # Duration to wait before mimic def sound_received_handler(user, soundchunk): global audio_buffer, last_received last_received = time.time() audio_buffer.append(np.frombuffer(soundchunk.pcm, dtype=np.int16)) mumble = pymumble_py3.Mumble(server, nick) mumble.callbacks.set_callback(PCS, sound_received_handler) mumble.set_receive_sound(1) # Audio received mumble.start() mumble.is_ready() mumble.channels.find_by_name(channel).move_in() while True: current_time = time.time() if last_received and (current_time - last_received >= wait_duration): # Calculate wait duration last_received = None buffered_audio = np.concatenate(list(audio_buffer)) # Begin buffer audio_buffer.clear() buffered_duration = len(buffered_audio) / 48000.0 num_samples_for_5_sec = int((5.0 - buffered_duration) * 48000) silence_data = np.zeros(max(0, num_samples_for_5_sec), dtype=np.int16) new_audio = np.concatenate((silence_data, buffered_audio)) # End buffer new_pcm = new_audio.tobytes() # Combine audio and send mumble.sound_output.add_sound(new_pcm) time.sleep(0.1) # Sleep until needed