Запись звука, затем отправка с http в двоичном формате - PullRequest
0 голосов
/ 04 октября 2019

Я не разработчик JS, но мне поручили записать звук с помощью браузера, а затем отправить его в службу транскрипции с помощью HTTP. После записи звука у меня остаются куски или объекты BLOB-объектов, которые нужно отправить в службу в двоичном виде. В Python я читал .wav файл, включал его в двоичный файл, а затем делал пост-запрос с токеном в заголовках. В ответ я получу json, содержащий расшифрованный текст. Важно отметить, что это должно быть сделано асинхронно, чтобы я мог записать еще один голос и обработать ответ. Вот с чем я работаю:

var onSuccess = function (stream) {
    myStream = stream;
    mediaRecorder = new MediaRecorder(stream);
    mediaRecorder.start();

    mediaRecorder.onstop = function() {
        var blob = new Blob(chunks, {'type': 'audio/wav'})
        var url = URL.createObjectURL(blob);

        var request = new XMLHttpRequest();
        request.open("POST", url, true);
        request.setRequestHeader('authorization', 'Bearer SOMETOKENHERE');
        request.setRequestHeader('Content-Type', 'audio/wav');

        request.send();

        var response = request.response;

        console.log(response);
        // or this way
        // data = {
        //             method: 'POST',
        //             body: blob,
        //             headers : {
        //                 'authorization': 'Bearer TOKENHERE',
        //                 'Content-Type': 'audio/wav'
        //             }
        //         }
        // fetch('https://api.wit.ai/speech', data)
        //     .then(json => console.log(json))
    };

    mediaRecorder.ondataavailable = function(e) {
        chunks.push(e.data);
    }
}
function startRecording() {
    navigator.getUserMedia({audio:true}, onSuccess, onError);
}

function stopRecording(rec) {
    rec.stop();
}

По крайней мере, мне удалось получить неверный запрос с извлечением, никакого дальнейшего прогресса с XMLHttpRequest

...