69 lines
1.4 KiB
Python
69 lines
1.4 KiB
Python
import socket
|
|
import psutil
|
|
import pyaudio
|
|
|
|
# This streamer can be used to preview assistant audio for example for presentation.
|
|
# For this you have to set OBS to following ffmpeg streaming settings:
|
|
# 48khz
|
|
# stereo
|
|
# PCM signed 16bit little endian
|
|
|
|
|
|
|
|
# get local ip adress of main network interface
|
|
interfaces = psutil.net_if_addrs()
|
|
for interface, addrs in interfaces.items():
|
|
if "Wi-Fi" in interface:
|
|
print("name: ", interface)
|
|
for addr in addrs:
|
|
if addr.family == socket.AF_INET:
|
|
UDP_IP = addr.address
|
|
print("ip: ", UDP_IP)
|
|
break
|
|
break
|
|
|
|
UDP_PORT = 8081
|
|
|
|
print("port: ", UDP_PORT)
|
|
|
|
# PyAudio parameters
|
|
CHANNELS = 2
|
|
|
|
# 16-bit audio
|
|
WIDTH = 2
|
|
RATE = 48000
|
|
|
|
BUFFER_SIZE = 2048
|
|
|
|
|
|
# Create a UDP socket
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
sock.bind((UDP_IP, UDP_PORT))
|
|
|
|
# Initialize PyAudio
|
|
p = pyaudio.PyAudio()
|
|
stream = p.open(format=p.get_format_from_width(WIDTH),
|
|
channels=CHANNELS,
|
|
rate=RATE,
|
|
output=True)
|
|
|
|
print("Stream started. Press Ctrl+C to stop.")
|
|
|
|
try:
|
|
while True:
|
|
# Receive audio data
|
|
data, addr = sock.recvfrom(BUFFER_SIZE)
|
|
|
|
# Play the audio data
|
|
stream.write(data)
|
|
|
|
except KeyboardInterrupt:
|
|
print("\nStreaming stopped.")
|
|
|
|
finally:
|
|
# Close the stream and socket
|
|
stream.stop_stream()
|
|
stream.close()
|
|
p.terminate()
|
|
sock.close()
|