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.
88 lines
2.9 KiB
88 lines
2.9 KiB
import threading
|
|
import socket
|
|
import pyaudio
|
|
import time
|
|
|
|
# Server settings
|
|
SERVER_IP = '81.94.159.212' # Replace with your server's IP address
|
|
DATA_SERVER_PORT = 8012
|
|
AUDIO_SERVER_PORT = 65432
|
|
|
|
# Audio settings
|
|
FORMAT = pyaudio.paInt16
|
|
CHANNELS = 1
|
|
RATE = 16000 # Should match the server's expected sample rate
|
|
CHUNK = 1024
|
|
|
|
audio = pyaudio.PyAudio()
|
|
|
|
def record_and_send_audio():
|
|
while True:
|
|
try:
|
|
# Connect to the server to send audio data
|
|
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
client_socket.connect((SERVER_IP, DATA_SERVER_PORT))
|
|
print("Connected to data server")
|
|
|
|
# Initialize PyAudio for recording
|
|
stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK)
|
|
|
|
while True:
|
|
# Read audio data from the microphone
|
|
data = stream.read(CHUNK)
|
|
client_socket.sendall(data)
|
|
except Exception as e:
|
|
print(f"Error sending audio: {e}")
|
|
time.sleep(1) # Wait before retrying
|
|
finally:
|
|
# Clean up resources
|
|
if 'stream' in locals():
|
|
stream.stop_stream()
|
|
stream.close()
|
|
if 'client_socket' in locals():
|
|
client_socket.close()
|
|
|
|
def receive_and_play_audio():
|
|
while True:
|
|
try:
|
|
# Connect to the server to receive audio data
|
|
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
client_socket.connect((SERVER_IP, AUDIO_SERVER_PORT))
|
|
print("Connected to audio server")
|
|
|
|
# Initialize PyAudio for playback
|
|
TTS_SAMPLE_RATE = 24000 # Should match the TTS sample rate used on the server
|
|
stream = audio.open(format=FORMAT, channels=CHANNELS, rate=TTS_SAMPLE_RATE, output=True)
|
|
|
|
while True:
|
|
# Receive audio data from the server
|
|
data = client_socket.recv(CHUNK)
|
|
if not data:
|
|
raise ConnectionError("Audio server disconnected")
|
|
# Play the audio data
|
|
stream.write(data)
|
|
except Exception as e:
|
|
print(f"Error receiving audio: {e}")
|
|
time.sleep(1) # Wait before retrying
|
|
finally:
|
|
# Clean up resources
|
|
if 'stream' in locals():
|
|
stream.stop_stream()
|
|
stream.close()
|
|
if 'client_socket' in locals():
|
|
client_socket.close()
|
|
|
|
def main():
|
|
# Start the thread to receive and play audio
|
|
audio_thread = threading.Thread(target=receive_and_play_audio, daemon=True)
|
|
audio_thread.start()
|
|
|
|
# Start recording and sending audio
|
|
while True:
|
|
record_and_send_audio()
|
|
print("Reconnecting to data server...")
|
|
time.sleep(1)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|