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

如何使用双LiveSpeechRecognizer或切换LM/DIC?遇线路不可用异常

问题解决思路
  • 根本原因是同一时间只能有一个音频输入线被占用,创建两个LiveSpeechRecognizer实例会同时尝试抢占麦克风资源,直接触发LineUnavailableException。
  • 正确的做法是复用单个识别器实例,动态切换词典与语言模型,具体步骤:
    1. 停止当前识别进程:recognizer.stopRecognition();
    2. 更新配置中的词典和语言模型路径
    3. 重新加载识别器配置(若版本支持reloadRecognizer方法)
    4. 重启识别进程

修改后的代码示例

// 初始化首个配置并启动识别
Configuration configuration = new Configuration();
configuration.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us");
configuration.setDictionaryPath("src/main/resources/words.dic");
configuration.setLanguageModelPath("src/main/resources/words.lm");
LiveSpeechRecognizer recognizer = new LiveSpeechRecognizer(configuration);
recognizer.startRecognition(true);

// 切换配置的操作流程
recognizer.stopRecognition();
// 更新词典与语言模型路径
configuration.setDictionaryPath("src/main/resources/words2.dic");
configuration.setLanguageModelPath("src/main/resources/words2.lm");
// 重新加载识别器配置
recognizer.reloadRecognizer(configuration);
// 重启识别
recognizer.startRecognition(true);

额外注意事项

  • 若使用的Sphinx4版本无reloadRecognizer方法,需先确保调用stopRecognition()释放资源后,再销毁旧实例并创建新实例,避免资源泄漏。
  • 音频输入设备属于独占性资源,永远不要同时运行多个LiveSpeechRecognizer实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:15:07