You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.6 KiB
79 lines
2.6 KiB
# A python script to do both listening and talking. This is the basic model |
|
# for an audio-only mumble client. |
|
|
|
# Usage: |
|
|
|
# Install pyaudio (instructions: https://people.csail.mit.edu/hubert/pyaudio/#downloads) |
|
# If `fatal error: 'portaudio.h' file not found` is encountered while installing |
|
# pyaudio even after following the instruction, this solution might be of help: |
|
# https://stackoverflow.com/questions/33513522/when-installing-pyaudio-pip-cannot-find-portaudio-h-in-usr-local-include |
|
# |
|
# Install dependencies for pymumble. |
|
# |
|
# Set up a mumber server. For testing purpose, you can use https://guildbit.com/ |
|
# to spin up a free server. Hard code the server details in this file. |
|
# |
|
# run `python3 ./listen_n_talk.py`. Now an audio-only mumble client is connected |
|
# to the server. |
|
# |
|
# To test its functionality, in a separate device, use some official mumble |
|
# client (https://www.mumble.com/mumble-download.php) to verbally communicate |
|
# with this audio-only client. |
|
# |
|
# Works on MacOS. Does NOT work on RPi 3B+ (I cannot figure out why. Help will |
|
# be much appreciated) |
|
|
|
import pymumble_py3 as pymumble_py3 |
|
from pymumble_py3.callbacks import PYMUMBLE_CLBK_SOUNDRECEIVED as PCS |
|
#import pyaudio |
|
|
|
# Connection details for mumble server. Hardcoded for now, will have to be |
|
# command line arguments eventually |
|
pwd = "" # password |
|
server = "protospace.ca" # server address |
|
nick = "python" |
|
port = 64738 # port number |
|
|
|
|
|
# pyaudio set up |
|
#CHUNK = 1024 |
|
#FORMAT = pyaudio.paInt16 # pymumble soundchunk.pcm is 16 bits |
|
#CHANNELS = 1 |
|
#RATE = 48000 # pymumble soundchunk.pcm is 48000Hz |
|
|
|
#p = pyaudio.PyAudio() |
|
#stream = p.open(format=FORMAT, |
|
# channels=CHANNELS, |
|
# rate=RATE, |
|
# input=True, # enable both talk |
|
# output=True, # and listen |
|
# frames_per_buffer=CHUNK) |
|
|
|
|
|
# mumble client set up |
|
def sound_received_handler(user, soundchunk): |
|
""" play sound received from mumble server upon its arrival """ |
|
#stream.write(soundchunk.pcm) |
|
print(len(soundchunk.pcm)) |
|
|
|
|
|
# Spin up a client and connect to mumble server |
|
mumble = pymumble_py3.Mumble(server, nick, password=pwd, port=port) |
|
# set up callback called when PCS event occurs |
|
mumble.callbacks.set_callback(PCS, sound_received_handler) |
|
mumble.set_receive_sound(1) # Enable receiving sound from mumble server |
|
mumble.start() |
|
mumble.is_ready() # Wait for client is ready |
|
|
|
|
|
# constant capturing sound and sending it to mumble server |
|
while True: |
|
#data = stream.read(CHUNK, exception_on_overflow=False) |
|
#mumble.sound_output.add_sound(data) |
|
pass |
|
|
|
|
|
# close the stream and pyaudio instance |
|
stream.stop_stream() |
|
stream.close() |
|
p.terminate()
|
|
|