Я пытаюсь захватить звук с микрофона пользователя и отправить его на сервер, где он будет отправлен в Google Speech-to-Text-API для перевода. Я получаю доступ к аудио с помощью navigator.mediaDevices.GetuserMedia (), который я записываю с помощью объекта MediaRecorder. Когда я запускаю следующий код, я получаю сообщение об ошибке от Google: «INVALID_ARGUMENT: RecognitionAudio не установлен». Я не уверен, как установить его в качестве соответствующей страницы (https://cloud.google.com/speech-to-text/docs/reference/rest/v1/RecognitionAudio) мало что говорит об этом. Соответствующий код на стороне клиента, который запускается после остановки нажатия пользователем:
mediaRecorder.onstop = function(e) {
var blob = new Blob(chunks, { type : 'audio/flac' });
var reader = new FileReader();
reader.readAsBinaryString(blob);
reader.onloadend = function() {
base64data = reader.result;
writeBinaryFile(base64data)
}
chunks = []; //array to store recording
}
//asynchronous binary file write
function writeBinaryFile(content) {
$.ajax({
type: "POST",
url: "/voice_api",
data: { content: content }
}).done(function(data) {
// TODO: display success status somewhere
});
Код на стороне сервера, запускающий node.js:
app.post("/voice_api", (req, res) => {
const audioBytes = req.body;
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
const audio = {
content: audioBytes,
};
const config = {
languageCode: 'en-US'
};
const request = {
audio: audio,
config: config
};
// Detects speech in the audio file
client
.recognize(request)
.then(data => {
const response = data[0];
const transcription = response.results
.map(result => result.alternatives[0].transcript)
.join('\n');
console.log(`Transcription: ${transcription}`);
res.send(transcription);
})
.catch(err => {
console.error('ERROR:', err);
});
});
Если я запустил код сервера со строкой «const audioBytes = req.body;» изменено на "const audioBytes = req.body.content;" Я получаю сообщение об ошибке о неправильной кодировке. Я не уверен, правильно ли я кодирую его на стороне клиента или правильно обращаюсь к нему на стороне сервера. Любая помощь будет оценена по достоинству. Спасибо!