HTML页面上的Google Cloud Speech API

问题描述 投票:2回答:1

我已经在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个回答
1
投票

您未以您认为的录制格式进行录制。

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

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

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

Google Cloud Speech API支持Opus,但仅在Ogg容器中。如果您在Firefox中运行代码并尝试使用Speech API进行输出,则应该可以。

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

您可以使用ffmpeg这样做

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.