Charan5775 commited on
Commit
b5db09d
·
verified ·
1 Parent(s): aa44aee

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -0
app.py CHANGED
@@ -114,6 +114,43 @@ async def websocket_transcription(websocket: WebSocket):
114
  finally:
115
  await websocket.close()
116
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
 
118
  if __name__ == "__main__":
119
  # For local testing. On Spaces, you don't usually run uvicorn manually.
 
114
  finally:
115
  await websocket.close()
116
 
117
+ @app.websocket("/ws/transcribe_pcm")
118
+ async def websocket_transcription_pcm(websocket: WebSocket):
119
+ await websocket.accept()
120
+ buffer = b""
121
+ SAMPLE_RATE = 16000
122
+ MIN_PCM_SIZE = SAMPLE_RATE * 2 * 3 # 3 seconds buffer
123
+
124
+ try:
125
+ while True:
126
+ chunk = await websocket.receive_bytes()
127
+
128
+ # If end control message (optional)
129
+ if chunk == b"__END__":
130
+ break
131
+
132
+ buffer += chunk
133
+
134
+ if len(buffer) >= MIN_PCM_SIZE:
135
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp:
136
+ temp.write(buffer)
137
+ temp.flush()
138
+ audio_path = temp.name
139
+
140
+ segments = model.transcribe(audio_path)
141
+ text = " ".join(seg.text for seg in segments).strip()
142
+ if text:
143
+ await websocket.send_text(text)
144
+
145
+ buffer = b""
146
+ os.remove(audio_path)
147
+
148
+ await websocket.send_text("[stream ended]")
149
+ except:
150
+ pass
151
+ finally:
152
+ await websocket.close()
153
+
154
 
155
  if __name__ == "__main__":
156
  # For local testing. On Spaces, you don't usually run uvicorn manually.