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

Flutter中speech_to_text包无法长时间录音且暂停功能失效求助

问题解决:speech_to_text 录制时长限制及暂停功能修复

一、录制时长仅10秒的修复方案

你代码里虽设置了listenFor: Duration(minutes:5),但可能因以下原因导致时长受限:

  • 权限配置不全:确保Android的AndroidManifest.xml和iOS的Info.plist已配置录音权限:
    • Android:添加<uses-permission android:name="android.permission.RECORD_AUDIO" />
    • iOS:添加NSMicrophoneUsageDescription权限说明
  • 关键参数缺失:显式设置cancelOnError: false避免识别错误时自动终止监听;设置partialResults: true实时返回识别结果,防止因无结果提前停止。
  • 设备系统限制:部分Android设备存在默认录音时长限制,可换设备测试验证。

修改后的_startListening方法:

void _startListening() async {
  await _speechToText.listen(
    onResult: _onSpeechResult,
    listenFor: Duration(minutes: 5),
    pauseFor: Duration(seconds: 5),
    cancelOnError: false, // 错误时不终止监听
    partialResults: true, // 实时返回部分识别结果
    listenMode: ListenMode.confirmation, // 根据需求选择监听模式
  );

  setState(() {
    _confidenceLevel = 0;
  });
}

二、暂停功能失效的修复

你代码中的pauseFor参数是指静音状态持续多久后自动停止监听,并非手动暂停功能。要实现手动暂停/恢复,需调用pause()和resume()方法:

  1. 添加手动暂停方法:
void _pauseListening() async {
  if (_speechToText.isListening) {
    await _speechToText.pause();
    setState(() {});
  }
}
  1. 添加恢复监听方法:
void _resumeListening() async {
  if (_speechToText.isPaused) {
    await _speechToText.resume();
    setState(() {});
  }
}
  1. 注意事项:
    • 暂停后调用resume()可继续原监听会话,无需重新调用listen()
    • 在UI中添加对应按钮,绑定这两个方法即可实现手动暂停/恢复

额外排查点

  • 确认_speechToText初始化正常:调用listen()前需执行await _speechToText.initialize()并确保初始化成功
  • 检查设备麦克风是否正常,无其他应用占用资源
  • 查看控制台日志,排查是否有权限错误或识别服务异常提示

内容的提问来源于stack exchange,提问作者dhanasty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:06:11