Как преобразовать поток MediaRecorder в Django в wav без хранения на диске?

Я пытаюсь преобразовать bytes_data, полученные методом receive() канала, используя WebsocketConsumer. Вот JavaCode:

navigator.mediaDevices.getUserMedia({ audio: true }).then((stream) => {
            const mediaRecorder = new MediaRecorder(stream, {mimeType: 'audio/webm' })
            console.log(stream)
        
            chatSocket.onopen = () => {
                mediaRecorder.addEventListener("dataavailable", (event) => {
                if (event.data.size > 0 && chatSocket.readyState == 1) {
                    chatSocket.send(event.data)
                }
            }) // chatSocket.onopen close
            mediaRecorder.start(250)
            }

На стороне сервера я теперь хочу преобразовать bytes_data в wav-файл, чтобы я мог отправить эти короткие аудио фрагменты через speech_recognition в recognize_google api. Я пытался использовать pydub для преобразования bytes_data, но пока безуспешно.

Теперь класс channels GeneralConsumer(WebsocketConsumer) получает bytes_data и использует эту функцию для преобразования и отправки в google:

def transcriber(bytes_data: bytes):
    r = sr.Recognizer()
    audio = AudioSegment.from_raw(
        bytes_data, sample_width=2, frame_rate=16000, channels=1)

    buffer = io.BytesIO()
    audio.export(buffer, format="wav")
    buffer.seek(0)

    with sr.AudioFile(buffer) as source:
        audio = sr.AudioData(source.stream.read(),
                             sample_rate=16000, sample_width=2)

    try:
        transcription = r.recognize_google(audio, language="en-USA").lower()

    except sr.UnknownValueError as e:
        print(e)

    return transcription

Но это не работает. Я пробовал некоторые варианты и другие, которые я просто не понимаю. Буду признателен за исчерпывающее решение.

Вернуться на верх