Google HTML 页面上的云语音 API

Google Cloud Speech API on HTML page

我已经在 c# 控制台 API 中实现了 Google 云语音 API。现在我想在 HTML 页面上实现相同的功能。以下是我遵循的步骤:

  1. 使用媒体录音机在 HTML 页面上捕获语音 post 与 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. 在网络上API我正在使用Google云语音识别。但幸运的是,它 returns 没有响应。 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;
                }
            }

我尝试了编码和赫兹的不同组合。但是 none 有效。我还尝试先将音频以 WAV 格式保存在本地驱动器上,然后从本地文件读取响应。但它也不起作用。

您没有按照您认为的格式进行录制。

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

这可以通过 运行 在各自浏览器的 JS 控制台中输入以下代码片段来快速验证。根据支持度,您将看到 TrueFalse

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

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

为了与 Chrome 一起使用,您需要在服务器端的 Ogg 容器中重新混合文件,然后再将其发送到 Cloud Speech API。

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

ffmpeg -i file_chrome.wav -acodec copy resources/file.oga

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

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