首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microsoft Speech-to-Text SDK JS不接受包含长字节数组的文件

Microsoft Speech-to-Text SDK JS不接受包含长字节数组的文件
EN

Stack Overflow用户
提问于 2020-12-17 23:52:10
回答 1查看 113关注 0票数 2

我正在使用微软的Azure speech- to -text SDK,通过JavaScript从.wav文件中获取文本。问题是,识别器不会接受File对象,并返回错误“未捕获范围错误:源数组太长”。在用于使文件对象正常工作的blob上调用.slice(0,2248),返回.wav文件的正确第一个单词。但是,如果我尝试像(2249,4497)那样将斑点分成块,则返回错误“未捕获范围错误:偏移量在DataView的边界之外”。我不知道如何a)让识别器接受具有长源数组的blob,或者b)将blob分解成没有越界的块。出于匿名考虑,.wav url已更改为破折号,应忽略该url。任何解决方案都很受欢迎!

代码语言:javascript
复制
JS:
<script>
//get wav file from url, create File object with it
function fromFile() {
  fetch("http://www.-----------.com/prod/wp-content/uploads/2020/12/cutafew.wav")
  .then(response => response.blob())
  .then(blob => {
    var file = new File([blob], "http://www.---------.com/prod/wp-content/uploads/2020/12/cutafew.wav", {
               type:"audio/x-wav", lastModified:new Date().getTime()
             });

//if file got successfully, do the following:
    var reader = new FileReader();
    var speechConfig = SpeechSDK.SpeechConfig.fromSubscription("f6abc3bfabc64f0d820d537c0d738788", "centralus");
    var audioConfig = SpeechSDK.AudioConfig.fromWavFileInput(file);
    var recognizer = new SpeechSDK.SpeechRecognizer(speechConfig, audioConfig);


//use recognizer to convert wav file to text
recognizer.recognizing = (s, e) => {
console.log(e.result);
    console.log(`RECOGNIZING: Text=${e.result.text}`);
};

recognizer.recognized = (s, e) => {
    if (e.result.reason == ResultReason.RecognizedSpeech) {
        console.log(`RECOGNIZED: Text=${e.result.text}`);
    }
    else if (e.result.reason == ResultReason.NoMatch) {
        console.log("NOMATCH: Speech could not be recognized.");
    }
};

recognizer.canceled = (s, e) => {
    console.log(`CANCELED: Reason=${e.reason}`);

    if (e.reason == CancellationReason.Error) {
        console.log(`"CANCELED: ErrorCode=${e.errorCode}`);
        console.log(`"CANCELED: ErrorDetails=${e.errorDetails}`);
        console.log("CANCELED: Did you update the subscription info?");
    }

    recognizer.stopContinuousRecognitionAsync();
};

recognizer.sessionStopped = (s, e) => {
    console.log("\n    Session stopped event.");
    recognizer.stopContinuousRecognitionAsync();
};

recognizer.startContinuousRecognitionAsync();

})
//throw error if file wasn't created
.catch(err => console.error(err));

}

fromFile();
</script>
EN

回答 1

Stack Overflow用户

发布于 2021-09-15 16:49:51

您可以使用Recognize from in-memory stream示例

代码语言:javascript
复制
const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");

function fromStream() {
    let pushStream = sdk.AudioInputStream.createPushStream();

    fs.createReadStream("YourAudioFile.wav").on('data', function(arrayBuffer) {
        pushStream.write(arrayBuffer.slice());
    }).on('end', function() {
        pushStream.close();
    });
 
    let audioConfig = sdk.AudioConfig.fromStreamInput(pushStream);
    let recognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
    recognizer.recognizeOnceAsync(result => {
        console.log(`RECOGNIZED: Text=${result.text}`);
        recognizer.close();
    });
}
fromStream();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65344008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档