Azure通过REST在javascript中将语音认知服务语音转换为文本失败

时间:2017-10-23 14:24:07

标签: bing speech

在JavaScript中,我们使用recorder.js捕获麦克风输入,将其下采样到16kHz,将其编码为WAV文件并获得blob。 接下来,我们通过FileReader onload()回调获取原始blob字节,然后使用XMLHttpRequest将原始字节发送()到Bing。 XMLHttpRequest包含标头: ' OCP-APIM-订阅密钥' :' xxxxxx' '内容类型' :' audio / wav;编解码器=音频/ PCM;采样率= 16000' 示例blob大小为62456字节。

FireFox网络跟踪显示2个交互。首先是  请求网址:https://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?language=en-US&format=simple  请求方法:选项 第二个  请求网址:https://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?language=en-US&format=simple  请求方法:POST  内容长度:94476

但是,我一直收到以下回复   {" RecognitionStatus":" InitialSilenceTimeout""偏移":29000000,"持续时间":0}

FWIW,知道为什么源blob大小为62456会导致内容长度:94476?

相应的原始blob字节由Amazon Lex正确处理。

是否有任何JavaScript RESTful示例? 非常感谢。

/ ---------------------------------------------- ---------------- 将下面的测试用例放在一起后,我也尝试了以下内容,但没有成功。

console.log("Send to BING blob");
var self = this;
console.log(blob);
var msUrl = 'https://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1';
msUrl += '?language=en-US';
msUrl += '&format=simple';
console.log(msUrl);
var xhr = new XMLHttpRequest();
xhr.onload = function(evt) { console.log('onload', xhr, evt);};
xhr.open('POST', msUrl, true);
xhr.setRequestHeader('Accept', 'application/json;text/xml');
xhr.setRequestHeader('Ocp-Apim-Subscription-Key', 'xxx');
var bingContentType = 'audio/wav; codec=audio/pcm; samplerate=16000';
xhr.setRequestHeader('Content-Type', bingContentType);
xhr.send(blob);

2 个答案:

答案 0 :(得分:0)

发送到Bing的较短代码版本很好。问题是录音机工作人员的编码WAV(样本)功能没有 将下采样考虑到16000.该功能错误地将捕获的采样率写为标题值。要调整的行是:

view.setUint32(24, downSampleRate, true);
view.setUint32(28, downSampleRate * 2, true); /*MONO*/

显然AWS Lex会忽略标头值,因为它只需要16kHz单声道,而Bing服务必须查看标头信息以确定支持哪种音频格式。

答案 1 :(得分:0)

今天我遇到了这个问题,花了半个小时后,我找到了问题的真正原因。让我来看看这个link中提到的步骤。

  1. 已验证我的Bing语音API处于运行状态。
  2. 通过在

    中运行以下代码验证了我的密钥

    $ FetchTokenHeader = @ {   '内容类型' ='应用程序/ X WWW的窗体-urlencoded&#39 ;;   '内容长度' =' 0&#39 ;;   ' OCP-APIM-订阅密钥' ='' }

    $ OAuthToken = Invoke-RestMethod -Method POST -Uri https://api.cognitive.microsoft.com/sts/v1.0/issueToken -Headers $ FetchTokenHeader

    显示收到的令牌

    $ OAuthToken

  3. enter image description here

    1. 如该链接的最后一点所述,InitialSilenceTimeout可能是未格式化/无效的wav文件的结果。所以我从互联网上下载了一个新的wav文件并进行了测试。

    2. Bingo,有效。最后,我能够以文本格式发表演讲

    3. enter image description here