如何解决谷歌语音API“返回空白结果”的问题?

时间:2019-07-18 13:48:54

标签: javascript jquery ajax google-speech-api

我看到了Google演示并进行了尝试。想要将其实施到我的Web应用程序,但似乎无法正常工作。我已经使用我的麦克风捕获了一个音频Blob,并像Google希望的那样在base64中对其进行了编码。问题是我所做的一切,不会作为错误返回,而是返回空。我通过ajax发送数据。这是一些代码来演示:

 navigator.mediaDevices
    .getUserMedia(
      // constraints - only audio needed for this app
      {
        audio: true
      }
    )

    // Success callback
    .then(function(stream) {
      console.log(navigator.mediaDevices.getSupportedConstraints());
      var mediaRecorder = new MediaRecorder(stream, { sampleRate: 16000 });
      var chunks = [];
      $(".rec-button")
        .mousedown(function() {
          console.log("rec start");
          $(".rec-button i").addClass("recStart");
          mediaRecorder.start();
          console.log(mediaRecorder.state);
          console.log("recorder started");
        })
        .mouseup(function() {
          console.log("rec end");
          $(".rec-button i").removeClass("recStart");
          mediaRecorder.stop();
          mediaRecorder.ondataavailable = function(e) {
            chunks.push(e.data);
            var audio = document.getElementById("player");
            var blob = new Blob(chunks, { type: "audio/ogg; codecs=opus" });
            var player = document.getElementById("player");
            player.src = URL.createObjectURL(blob);
            chunks = [];
            console.log(blob);
            var reader = new window.FileReader();
            reader.readAsDataURL(blob);
            reader.onloadend = function() {
              var base64 = reader.result;
              base64 = base64.split(",")[1];
              var jsonRec = {
                audio: {
                  content: base64
                },
                config: {
                  encoding: "OGG_OPUS",
                  sampleRateHertz: 48000,
                  languageCode: "en-US",
                  audioChannelCount: 2,
                  enableSeparateRecognitionPerChannel: true,
                }
              };
              $.ajax({
                url:
                  "https://speech.googleapis.com/v1/speech:recognize?key=**my_api_key**",
                method: "POST",
                contentType: "application/json",
                dataType: "json",
                data: JSON.stringify(jsonRec),
                success: function(response) {
                  console.log(response);
                },
                error: function(err) {
                  console.log(err);
                }
              });
            };
            console.log(mediaRecorder.state);
            console.log("recorder stopped");
          };
        });
    })

    // Error callback
    .catch(function(err) {
      console.log("The following getUserMedia error occured: " + err);
    });

我可以在标签中播放音频,所以我不使用似乎是问题所在。我的回应总是以{}结尾。我希望它发送的是我的演讲的录音内容

0 个答案:

没有答案