ivrit-ai-streaming / client.py
AshDavid12
changed temp file into loop
9ccc5b5
raw
history blame
3.06 kB
import asyncio
import websockets
import requests
import ssl
# Parameters for reading and sending the audio
AUDIO_FILE_URL = "https://raw.githubusercontent.com/AshDavid12/runpod-serverless-forked/main/test_hebrew.wav" # Use WAV file
#AUDIO_FILE_URL = "https://raw.githubusercontent.com/AshDavid12/hugging_face_ivrit_streaming/main/long_hebrew.wav"
async def send_audio(websocket):
buffer_size = 512 * 1024 #HAVE TO HAVE 512!!
audio_buffer = bytearray()
with requests.get(AUDIO_FILE_URL, stream=True, allow_redirects=False) as response:
if response.status_code == 200:
print("Starting to stream audio file...")
for chunk in response.iter_content(chunk_size=1024): # Stream in chunks
if chunk:
audio_buffer.extend(chunk)
#print(f"Received audio chunk of size {len(chunk)} bytes.")
# Send buffered audio data once it's large enough
if len(audio_buffer) >= buffer_size:
await websocket.send(audio_buffer)
#print(f"Sent {len(audio_buffer)} bytes of audio data.")
audio_buffer.clear()
await asyncio.sleep(0.01)
print("Finished sending audio.")
else:
print(f"Failed to download audio file. Status code: {response.status_code}")
async def receive_transcription(websocket):
while True:
try:
transcription = await websocket.recv()
# Receive transcription from the server
print(f"Transcription: {transcription}")
except Exception as e:
print(f"Error receiving transcription: {e}")
#await asyncio.sleep(30)
break
async def send_heartbeat(websocket):
while True:
try:
await websocket.ping()
print("Sent keepalive ping")
except websockets.ConnectionClosed:
print("Connection closed, stopping heartbeat")
break
await asyncio.sleep(30) # Send ping every 30 seconds (adjust as needed)
async def run_client():
uri = ("wss://gigaverse-ivrit-ai-streaming.hf.space/wtranscribe") # WebSocket URL
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_NONE
while True:
try:
async with websockets.connect(uri, ssl=ssl_context, ping_timeout=1000, ping_interval=50) as websocket:
await asyncio.gather(
send_audio(websocket),
receive_transcription(websocket),
send_heartbeat(websocket)
)
except websockets.ConnectionClosedError as e:
print(f"WebSocket closed with error: {e}")
# except Exception as e:
# print(f"Unexpected error: {e}")
#
# print("Reconnecting in 5 seconds...")
# await asyncio.sleep(5) # Wait 5 seconds before reconnecting
asyncio.run(run_client())