this doesn't work yet. May never work lol.
This commit is contained in:
parent
0fc58d23cb
commit
91954beafc
1
Requirements.txt
Normal file
1
Requirements.txt
Normal file
@ -0,0 +1 @@
|
||||
pymumble
|
60
garmr.py
Executable file
60
garmr.py
Executable file
@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
|
||||
import pymumble_py3
|
||||
from pymumble_py3.callbacks import PYMUMBLE_CLBK_SOUNDRECEIVED as PCS
|
||||
import sounddevice as sd
|
||||
import numpy as np
|
||||
import threading
|
||||
import time
|
||||
from modules.custom_mumble import CustomMumble
|
||||
from setproctitle import setproctitle
|
||||
|
||||
|
||||
setproctitle("Garmr")
|
||||
|
||||
|
||||
# Connection details for Mumble server
|
||||
server = "mumble.example.com" # server address
|
||||
nick = "Garmr_Test"
|
||||
port = 64738 # port number
|
||||
passwd = "" # password
|
||||
|
||||
# Audio settings
|
||||
SAMPLE_RATE = 48000
|
||||
CHANNELS = 2
|
||||
|
||||
# Create a Mumble client using the custom wrapper class
|
||||
mumble = CustomMumble(server, nick, password=passwd, port=port)
|
||||
mumble.set_application_string("garmr")
|
||||
|
||||
# Set the sample rate and channels for Mumble
|
||||
mumble.set_receive_sound((SAMPLE_RATE, CHANNELS))
|
||||
|
||||
# Create a SoundDevice audio handler
|
||||
audio_handler = sd.OutputStream(samplerate=SAMPLE_RATE, channels=CHANNELS)
|
||||
|
||||
# Set the audio handler in the custom Mumble class
|
||||
mumble.set_audio_handler(audio_handler)
|
||||
|
||||
# Set up the sound received callback
|
||||
mumble.callbacks.set_callback(PCS, mumble.sound_received_handler)
|
||||
|
||||
# Start the Mumble client
|
||||
mumble.start()
|
||||
|
||||
mumble.is_ready() # Wait for the client to be ready
|
||||
|
||||
# Keep the script running until interrupted
|
||||
try:
|
||||
while True:
|
||||
time.sleep(1)
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
finally:
|
||||
# Stop and close the SoundDevice stream
|
||||
audio_handler.stop()
|
||||
audio_handler.close()
|
||||
|
||||
# Stop the Mumble client
|
||||
mumble.stop()
|
0
modules/__init__.py
Normal file
0
modules/__init__.py
Normal file
28
modules/custom_mumble.py
Normal file
28
modules/custom_mumble.py
Normal file
@ -0,0 +1,28 @@
|
||||
import pymumble_py3
|
||||
import numpy as np
|
||||
import threading
|
||||
|
||||
|
||||
class CustomMumble(pymumble_py3.Mumble):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.audio_handler = None
|
||||
self.is_running = False
|
||||
|
||||
def set_audio_handler(self, audio_handler):
|
||||
self.audio_handler = audio_handler
|
||||
|
||||
def sound_received_handler(self, user, soundchunk):
|
||||
if self.audio_handler is not None:
|
||||
sound_array = np.frombuffer(soundchunk.pcm, dtype=np.int16)
|
||||
num_channels = self.audio_handler.channels
|
||||
sound_array = sound_array.reshape((-1, num_channels))
|
||||
sound_float = sound_array.astype(np.float32) / 32767.0
|
||||
self.audio_handler.write(sound_float)
|
||||
|
||||
def start(self):
|
||||
self.is_running = True
|
||||
threading.Thread(target=self.run).start()
|
||||
|
||||
def stop(self):
|
||||
self.is_running = False
|
Loading…
Reference in New Issue
Block a user