Как преобразовать поток 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
Но это не работает. Я пробовал некоторые варианты и другие, которые я просто не понимаю. Буду признателен за исчерпывающее решение.