【问题标题】:Google Cloud Speech API on HTML pageHTML 页面上的 Google Cloud Speech API
【发布时间】:2019-11-30 07:14:32
【问题描述】:

我在 C# 控制台 API 中实现了 Google Cloud Speech API。现在我想在 HTML 页面上实现相同的功能。以下是我遵循的步骤:

  1. 使用媒体记录器捕获 HTML 页面上的声音并将其发布到 WEB API:
  mediaRecorder.ondataavailable = function (e) {
                    chunks.push(e.data);
                    var blob = new Blob(chunks, { 'type': 'audio/wav; codecs=0' });
                    var fd = new FormData();
                    fd.append('fname', 'test.wav');
                    //fd.append('data', chunks[0]);
                    fd.append('data', blob);
                    $.ajax({
                        type: 'POST',
                        url: APIUrl,
                        data: fd,
                        processData: false,
                        contentType: false
                    }).done(function (data) {
                        console.log(data);
                    });
  1. 在 WEB API 上,我使用的是 Google Cloud 语音识别。但幸运的是,它返回空响应。 google Audio.raw 提供的测试文件使用相同的代码可以正常工作。但是从网页发送的任何音频都没有提供任何结果。
            string text = "";
            var speech = SpeechClient.Create();


            var response = speech.Recognize(new RecognitionConfig()
            {
                Encoding = RecognitionConfig.Types.AudioEncoding.OggOpus,
                SampleRateHertz = 48000,
                LanguageCode = "en",

            }, RecognitionAudio.FromStream(HttpContext.Current.Request.Files[0].InputStream));

            foreach (var result in response.Results)
            {
                foreach (var alternative in result.Alternatives)
                {
                    text = alternative.Transcript;
                }
            }

我尝试过 Encoding 和 Hertz 的不同组合。但没有一个有效。我还尝试先将音频以 WAV 格式保存在本地驱动器上,然后从本地文件中读取响应。但它也不起作用。

【问题讨论】:

    标签: javascript c# mediarecorder google-speech-api


    【解决方案1】:

    您没有以您认为正在录制的格式录制。

    • Chrome 中的 MediaRecorder 仅支持 opus 容器中的编解码器 opus
    • 但 Firefox 中的 MediaRecorder 在 Ogg 容器中支持编解码器 opus

    这可以通过在相应浏览器的 JS 控制台中运行以下 sn-p 来快速验证。您将看到基于支持的TrueFalse

    MediaRecorder.isTypeSupported('audio/webm;codecs=opus')
    MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')
    

    Google Cloud Speech API 支持 Opus,但仅在 Ogg 容器中。如果您在 Firefox 中运行相同的代码,使用 Speech API 的输出应该可以工作。

    为此,您需要在服务器端的 Ogg 容器中重新复用文件,然后再将其发送到 Cloud Speech API。

    你可以使用 ffmpeg 来做到这一点

    ffmpeg -i file_chrome.wav -acodec 复制资源/file.oga

    请注意,这是一个重新复用而不是重新编码过程。您只是在不同的容器中复制相同的数据。

    额外提示:如果您使用的是 Linux/Mac,则可以使用 file <file_name> 命令检查输出文件类型。 Chrome 文件将显示为WebM,Firefox 输出将显示为Ogg data, Opus audio

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多