You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中调整Azure语音转文本的沉默超时时间

Azure Speech SDK recognizeOnceAsync 延长沉默超时时长问题

问题描述

使用Azure Speech SDK的recognizeOnceAsync实现语音转文本,当前代码如下:

var SpeechSDK, recognizer, synthesizer;
var speechConfig = SpeechSDK.SpeechConfig.fromSubscription('SUB_KEY', 'SUB_REGION');
var audioConfig  = SpeechSDK.AudioConfig.fromDefaultMicrophoneInput();
recognizer = new SpeechSDK.SpeechRecognizer(speechConfig, audioConfig);
new Promise(function(resolve) {
    recognizer.onend = resolve;
    recognizer.recognizeOnceAsync(
        function (result) {
            recognizer.close();
            recognizer = undefined;
            resolve(result.text);
        },
        function (err) {
            alert(err);
            recognizer.close();
            recognizer = undefined;
        }
    );
}).then(r => {
    console.log(`Azure STT interpreted: ${r}`);
});

HTML中引入SDK的方式:

<script src="https://aka.ms/csspeech/jsbrowserpackageraw"></script>

希望延长recognizeOnceAsync返回结果前允许的沉默时长(避免说话停顿换气时被判定为识别结束),尝试过以下设置但无效:

const SILENCE_UNTIL_TIMEOUT_MS = 5000;
speechConfig.SpeechServiceConnection_EndSilenceTimeoutMs = SILENCE_UNTIL_TIMEOUT_MS;
audioConfig.setProperty("Speech_SegmentationSilenceTimeoutMs", SILENCE_UNTIL_TIMEOUT_MS);

需要解决在使用fromDefaultMicrophoneInput时的有效设置方法。

解决方法

正确的属性设置方式

问题出在直接给speechConfig赋值属性的方式错误,必须使用SDK提供的setProperty()方法,结合官方定义的PropertyId常量来配置,而非直接访问属性名。针对recognizeOnceAsync场景,只需配置服务端的结束沉默超时即可:

  1. 使用SpeechSDK.PropertyId.SpeechServiceConnection_EndSilenceTimeoutMs作为属性标识,通过speechConfig.setProperty()设置超时值,注意属性值需要传入字符串类型:
const SILENCE_UNTIL_TIMEOUT_MS = 5000; // 设置为5秒
speechConfig.setProperty(
  SpeechSDK.PropertyId.SpeechServiceConnection_EndSilenceTimeoutMs,
  SILENCE_UNTIL_TIMEOUT_MS.toString()
);
  1. 无需在audioConfig上设置Speech_SegmentationSilenceTimeoutMs,该属性用于本地音频分段处理,不适用于recognizeOnceAsync的服务端结束判定逻辑。

完整修改后的代码

var SpeechSDK, recognizer, synthesizer;
var speechConfig = SpeechSDK.SpeechConfig.fromSubscription('SUB_KEY', 'SUB_REGION');

// 配置延长沉默超时
const SILENCE_UNTIL_TIMEOUT_MS = 5000;
speechConfig.setProperty(
  SpeechSDK.PropertyId.SpeechServiceConnection_EndSilenceTimeoutMs,
  SILENCE_UNTIL_TIMEOUT_MS.toString()
);

var audioConfig  = SpeechSDK.AudioConfig.fromDefaultMicrophoneInput();
recognizer = new SpeechSDK.SpeechRecognizer(speechConfig, audioConfig);
new Promise(function(resolve) {
    recognizer.onend = resolve;
    recognizer.recognizeOnceAsync(
        function (result) {
            recognizer.close();
            recognizer = undefined;
            resolve(result.text);
        },
        function (err) {
            alert(err);
            recognizer.close();
            recognizer = undefined;
        }
    );
}).then(r => {
    console.log(`Azure STT interpreted: ${r}`);
});

额外说明

  • recognizeOnceAsync为单次短语音识别设计,若需处理长语音或频繁停顿的场景,更推荐使用startContinuousRecognitionAsync,配合自定义结束逻辑控制识别周期。
  • 超时时长最大值受Azure Speech服务限制,当前最大可设置为10000ms(10秒),超出范围会被服务端自动调整为默认值。

内容的提问来源于stack exchange,提问作者Steinn Hauser Magnússon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 03:57:23