Проблемы с кодировкой API Google Cloud Speech-to-Text в Node.js

Я пытаюсь захватить звук с микрофона пользователя и отправить его на сервер, где он будет отправлен в 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;" Я получаю сообщение об ошибке о неправильной кодировке. Я не уверен, правильно ли я кодирую его на стороне клиента или правильно обращаюсь к нему на стороне сервера. Любая помощь будет оценена по достоинству. Спасибо!


person Kyle Wollman    schedule 29.07.2018    source источник