Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import asyncio
- import websockets
- from pydub import AudioSegment
- import io
- from vosk import Model, KaldiRecognizer
- import subprocess
- desired_bitrate = "1411k"
- desired_samplerate = "44100"
- vosk_model = Model("./model")
- recognizer = KaldiRecognizer(vosk_model, 44100)
- recognizer.SetWords(True) # Enable word-level timing information in the recognition results
- recognizer.SetMaxAlternatives(10) # Adjust the maximum number of alternatives
- def save_audio_to_wav(audio_data, filename):
- # Convert WebM audio data to WAV
- audio_segment = AudioSegment.from_file(io.BytesIO(audio_data), format="webm")
- audio_segment.export(filename, format="wav")
- # Run ffmpeg command for downsampling and controlling bitrate
- ffmpeg_command = [
- "ffmpeg",
- "-y", # Automatically overwrite files
- "-i", filename,
- "-ar", desired_samplerate, # Set the sample rate to 44100 Hz
- "-b:a", desired_bitrate, # Set the bitrate
- filename.replace(".webm", ".wav")
- ]
- subprocess.run(ffmpeg_command)
- async def audio_handler(websocket, path):
- print("WebSocket connection established")
- try:
- async for message in websocket:
- save_audio_to_wav(message, "temp.webm") # Save WebM audio to a temporary WAV file
- recognizer.AcceptWaveform(open("temp.wav", "rb").read())
- result = recognizer.Result()
- print("Result:", result)
- # Get the final recognition result
- result = recognizer.FinalResult()
- print("Final Result:", result)
- except websockets.ConnectionClosed:
- print("WebSocket connection closed")
- if __name__ == "__main__":
- start_server = websockets.serve(audio_handler, "localhost", 8765)
- asyncio.get_event_loop().run_until_complete(start_server)
- print("WebSocket server started")
- try:
- asyncio.get_event_loop().run_forever()
- except KeyboardInterrupt:
- pass
- finally:
- print("WebSocket server stopped")
Advertisement