Я не разработчик 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