Spaces:
Sleeping
Sleeping
| import websocket | |
| import json | |
| import time | |
| import librosa | |
| import numpy as np | |
| import os | |
| import torch | |
| # --- CONFIG --- | |
| MOCK_MIC_RATE = 44100 # Simulate a 44.1kHz microphone | |
| WS_URL = f"ws://localhost:8000/stream/audio?rate={MOCK_MIC_RATE}" | |
| TEST_FILE = r"C:\dev\archive\Emotions\Angry\03-01-05-01-01-01-01.wav" | |
| def test_streaming(): | |
| if not os.path.exists(TEST_FILE): | |
| print(f"Test file not found: {TEST_FILE}") | |
| return | |
| print(f"Loading test file at {MOCK_MIC_RATE}Hz to simulate high-res mic...") | |
| # Load audio and resample to the MOCK rate | |
| speech, _ = librosa.load(TEST_FILE, sr=MOCK_MIC_RATE) | |
| # Connect to WebSocket | |
| print(f"Connecting to {WS_URL}...") | |
| try: | |
| ws = websocket.create_connection(WS_URL) | |
| except Exception as e: | |
| print(f"Connection failed: {e}") | |
| return | |
| try: | |
| # Send 0.5s chunks of 44.1kHz data | |
| chunk_size = int(MOCK_MIC_RATE * 0.5) | |
| print("Starting Stream...") | |
| for i in range(0, len(speech), chunk_size): | |
| chunk = speech[i:i + chunk_size] | |
| if len(chunk) == 0: continue | |
| # Convert to 16-bit PCM | |
| chunk_int16 = (chunk * 32767).astype(np.int16) | |
| # Send binary data | |
| ws.send_binary(chunk_int16.tobytes()) | |
| # Receive response | |
| try: | |
| # Set a longer timeout for resampling latency | |
| ws.settimeout(0.5) | |
| result = ws.recv() | |
| data = json.loads(result) | |
| # Check for the new status field and confidence | |
| status_marker = "[ALERT]" if data.get('status') == "high_confidence" else "[INFO]" | |
| print(f"{status_marker} Prediction: {data['emotion']} | Conf: {data['confidence']:.2%} | Status: {data.get('status')}") | |
| except websocket.WebSocketTimeoutException: | |
| pass | |
| time.sleep(0.5) | |
| print("\nStream Finished.") | |
| except Exception as e: | |
| print(f"Error during stream: {e}") | |
| finally: | |
| ws.close() | |
| print("WebSocket Closed.") | |
| if __name__ == "__main__": | |
| test_streaming() |