Запись аудио через js неверный формат

Всем привет. Я разрабатываю клиентскую часть сервиса, одной из функций которого является запись аудио через js. Записанный аудиофайл на сервере не читается средствами языка (python) и не конвертируется. Аудио записываю с помощью mediaRecorder.

Мой код:

const start_btn = document.querySelector('#audio-record-btn');
const send_btn = document.querySelector('#audio-send-btn');

if (navigator.mediaDevices.getUserMedia) {
    const constraints = { audio: true };
    let chunks = [];

    let onSuccess = function (stream) {
        const mediaRecorder = new MediaRecorder(stream);

        let blob = new Blob;
        const audio = document.createElement('audio');

        function start_foo() {
            if (mediaRecorder.state === "inactive") {
                mediaRecorder.start();
            }
            else if (mediaRecorder.state === "recording") {
                mediaRecorder.stop();
                console.log("Запись остановлена");
            }
        }

        function send_foo() {
                let form_data = new FormData();
                const file = new File([blob], 'myfile.wav', { type: 'application/wav' });
                form_data.append('audio', file);
                sendAudio(form_data);
        }

        mediaRecorder.onstop = function (e) {
            blob = new Blob(chunks, { type: 'audio/wav' });
            chunks = [];
            const audioURL = window.URL.createObjectURL(blob);
            audio.src = audioURL;
            audio.autoplay = true;
        }

        async function sendAudio(fd) {
            await fetch(url, {
                method: 'POST',
                body: fd
            })
            console.log("ok");
        }

        start_btn.addEventListener('click', start_foo);
        send_btn.addEventListener('click', send_foo);

        mediaRecorder.ondataavailable = function (e) {
            chunks.push(e.data);
        }
    }

    let onError = function (err) {
        console.log('The following error occured: ' + err);
    }
    navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);
} else {
    console.log('getUserMedia not supported on your browser!');
}

На сервере возникают проблемы с форматом: он не читается и никак не признается, что это wav. Аудио можно воспроизвести средствами windows, никаких проблем нет. Пробовала выставлять mimeType для mediaRecorder:

    const options = {
        mimeType: "audio/wav",
    }
    const mediaRecorder = new MediaRecorder(stream, options);

Но это не помогло. При некоторых mimeType все вылетает напрочь из-за того, что они не поддерживаются браузером. А те, которые поддерживаются, все так же не воспринимаются python.

Я прогоняла файлы через сервис по определению типа, и практически всегда (вне зависимости от формата: wav, mp3, mka, webm) по содержимому файлы относились к формату mka на 47% (хотя я не особо доверяю этому)

При попытке конвертировать на сервере, возникала следующая ошибка: введите сюда описание изображения

Во всех примерах в интернете как правило никакие дополнительные настройки в виде mimeType или codecs не выставляются. Есть ли какие то решения данной проблемы с форматом аудио? (кроме написания конвертера ручками через base64) Или может есть какие то иные способы записи аудио с помощью JS?

Заранее спасибо за ответы


Ответы (0 шт):