如何使用speech_to_text库设置语音输入结束后的等待时长?
解决speech_to_text库中语音停顿提前终止识别的问题
speech_to_text库提供了pauseFor参数来解决这个问题,该参数可以设置在检测到语音停顿后,等待指定时长再终止音频输入,正好满足你需要等待3秒的需求。
你只需要在调用_speech.listen()时添加pauseFor参数即可,修改后的语音处理后端代码如下:
import 'dart:async'; import 'package:flutter/material.dart'; import 'package:speech_to_text/speech_to_text.dart'; class Speech { static final _speech = SpeechToText(); static Timer? _timer; static Future<bool> toggleRecording({required Function(String text) onResult, required ValueChanged<bool> onListening}) async { final isAvailable = await _speech.initialize( onStatus: (status) { return onListening(_speech.isListening); }, onError: (error) { print('Error $error'); }, ); if (isAvailable) { _speech.listen( partialResults: true, onResult: (value) { onResult(value.recognizedWords); print(onResult(value.recognizedWords)); }, listenFor: Duration(seconds: 10), // 添加pauseFor参数,设置停顿后等待3秒再终止 pauseFor: Duration(seconds: 3), ); } return isAvailable; } }
参数说明:
pauseFor: Duration(seconds: 3):当识别到用户语音停顿后,会等待3秒,如果这段时间内没有新的语音输入,才会停止识别;如果用户在3秒内继续说话,识别会继续进行。listenFor: Duration(seconds: 10):保持原有的最长监听时长设置,避免无限等待的情况。partialResults: true:继续开启实时返回部分识别结果的功能,不影响停顿等待的逻辑。
这样修改后,用户说话时的短暂停顿就不会导致识别提前终止,能完整捕捉到整个语句内容。
内容的提问来源于stack exchange,提问作者Pedro
相关产品推荐
相关产品推荐

