So I am using Python Flask (ik, not optimal, but it is what I know.) However, I am getting an error that I understand, but I am not familiar enough with async to be able to solve it myself. I lack some syntax knowledge too.
This is the bit of code I got from this link (https://deepgram.com/learn/live-transcription-flask) :
async def process_audio(fast_socket: web.WebSocketResponse, language):
async def get_transcript(data: Dict) -> None:
if 'channel' in data:
transcript = data['channel']['alternatives'][0]['transcript']
if transcript:
await fast_socket.send_str(transcript)
deepgram_socket = await connect_to_deepgram(get_transcript, language)
return deepgram_socket
async def connect_to_deepgram(transcript_received_handler: Callable[[Dict], None], language) -> str:
try:
socket = await dg_client.transcription.live({'punctuate': False, 'interim_results': False, 'language': language, 'model': 'nova-2', 'timeout' : 300})
socket.registerHandler(socket.event.CLOSE, lambda c: print(f'Connection closed with code {c}.'))
socket.registerHandler(socket.event.TRANSCRIPT_RECEIVED, transcript_received_handler)
return socket
except Exception as e:
raise Exception(f'Could not open socket: {e}')
async def socket(request):
ws = web.WebSocketResponse()
await ws.prepare(request)
deepgram_socket = await process_audio(ws, language)
while True:
data = await ws.receive_bytes()
deepgram_socket.send(data)
As you can see, I am trying to add a language parameter. I am using python Flask, so I tried adding calling the session variable I created everytime the user logs in which has the language saved, but it doesn’t work. So now, I am trying to parse the language parameter from the JavaScript into the Python. Here is the JavaScript:
const socket = new WebSocket('ws://localhost:5555/listen?language=${language}');
navigator.mediaDevices.getUserMedia({ audio: true }).then((stream) => {
if (!MediaRecorder.isTypeSupported('audio/webm'))
return alert('Browser not supported');
const mediaRecorder = new MediaRecorder(stream, {
mimeType: 'audio/webm',
});
mediaRecorder.addEventListener('dataavailable', async (event) => {
if (event.data.size > 0 && socket.readyState == 1) {
socket.send(event.data);
}
});
mediaRecorder.start(100);
});
});
How can I add a parameter to change the language that Deepgram recognizes? Would there be a better way to dynamically change the language parameter? Maybe throught the URL? There is probably some important code I didn’t put, but when the language parameter is set to a static value like ‘de’ for German (deutsch), everything works.
2