2017-10-23 19 views
0

자바 스크립트에서 우리는 recorder.js를 사용하여 마이크 입력을 캡처하고이를 16kHz로 샘플링 한 다음 WAV 파일로 인코딩하고 blob을 얻습니다. 다음으로 FileReader onload() 콜백을 통해 원시 blob 바이트를 가져온 다음 XMLHttpRequest를 사용하여 원시 바이트를 Bing으로 보냅니다. XMLHttpRequest에는 헤더가 포함됩니다. 'Ocp-Apim-Subscription-Key': 'xxxxxx' 'Content-Type': 'audio/wav; 코덱 = 오디오/pcm; samplerate = 16000 ' 샘플 블롭 크기는 62456 바이트입니다.Azure 빙 인식 서비스는 REST를 통한 자바 스크립트 텍스트 번역에 실패합니다.

FireFox 네트워크 추적은 2 개의 상호 작용을 보여줍니다. https://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?language=en-US&format=simple 신청 방법 : 옵션 두 번째 요청 URL : https://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?language=en-US&format=simple 요청 방법 : POST 내용 길이 : 그러나 94,476

, 나는 다음과 같은 응답 { "RecognitionStatus을"점점 계속 첫 번째는 요청 URL입니다 : "InitialSilenceTimeout", "Offset": 29000000, "Duration": 0}

FWIW, 62456의 소스 BLOB 크기가 content-length : 94476이되는 이유는 무엇입니까?

동일한 원시 Blob 바이트가 Amazon Lex에서 제대로 처리됩니다.

JavaScript가 유용한 예가 있습니까? 많은 감사.

/--------------------------------------------- ----------------- 아래의 테스트 사례를 종합 한 후에도 성공하지 못한 채로 다음을 시도했습니다.

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); 
+0

안녕하세요, 문제를 재현 할 수 있도록 [최소, 완료 및 인증 가능한 예] (https://stackoverflow.com/help/mcve)를 제공해주십시오. –

+0

안녕하세요 폴, 예를 하나 넣었습니다. https://s3.amazonaws.com/pmh.bingspeech.1/index.html 마이크 액세스로 인해 HTTPS가 필요했습니다. 빙 (Bing)에 대한 호출은 https://s3.amazonaws.com/pmh.bingspeech.1/scripts/conversation.js 주위의 라인 112에서 으로 시작하는 함수 내에서 발생합니다. var Sending = function (state) { ... 전체 폴더를 찾을 수 있습니다. https://s3.amazonaws.com/pmh.bingspeech.1/bingSpeech.zip – john

+0

웹 페이지에서 기본 테스트 단계를 표시했습니다. Windows 용 Chrome 및 Firefox를 테스트 용으로 사용합니다. 일반 응답은 { "RecognitionStatus": "InitialSilenceTimeout", "Offset": 22000000, "Duration": 0} 입니다. Bing은 블랙 박스이며 보내지는 바이트가 적당합니다. 모든 안내가 크게 감사하겠습니다. – john

답변

0

더 짧은 코드 버전의 Bing 보내기가 좋습니다. 문제는 레코더 작업자의 encodeWAV (샘플) 기능이 에 다운 샘플링을 16000으로 간주하지 않는다는 것입니다.이 기능은 캡처 된 샘플링 속도를 헤더 값으로 잘못 쓰고있었습니다. 불통되는 라인은 : 빙 서비스가 전송되는 지원 오디오 포맷을 결정하기 위해 헤더 정보를보고하는 반면 단지 16kHz의 모노 기대로

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

명백하게 AWS 렉스 헤더 값을 무시한다.