HarmonyOS 鸿蒙Next中设置了长语音实时录音识别,但20秒就自动停止录制,该怎么解决?

HarmonyOS 鸿蒙Next中设置了长语音实时录音识别,但20秒就自动停止录制,该怎么解决?

创建引擎代码

let asrEngine: speechRecognizer.SpeechRecognitionEngine;
// 创建引擎,通过callback形式返回
// 设置创建引擎参数
let extraParam: Record<string, Object> = {
  "locate": "CN",
  "recognizerMode": "long" // 长语音识别
};
let initParamsInfo: speechRecognizer.CreateEngineParams = {
  language: 'zh-CN',
  online: 1,
  extraParams: extraParam
};
// 调用createEngine方法
speechRecognizer.createEngine(initParamsInfo,
  (err: BusinessError, speechRecognitionEngine: speechRecognizer.SpeechRecognitionEngine) => {
    if (!err) {
      console.info('Succeeded in creating engine.');
      // 接收创建引擎的实例
      asrEngine = speechRecognitionEngine;
    } else {
      console.error(`Failed to create engine. Code: ${err.code}, message: ${err.message}.`);
    }
  });

语音识别代码

private startListeningForRecording() {
  let audioParam: speechRecognizer.AudioInfo = { audioType: 'pcm', sampleRate: 16000, soundChannel: 1, sampleBit: 16 }// audioInfo参数配置请参考AudioInfo
  let extraParam: Record<string, Object> = {
    "recognitionMode": 0 // 实时录音识别(需应用开启录音权限:ohos.permission.MICROPHONE)
  }
  let recognizerParams: speechRecognizer.StartParams = {
    sessionId: "2333",
    audioInfo: audioParam,
    extraParams: extraParam
  }
  console.info('startListening start');
  asrEngine.startListening(recognizerParams);
};

更多关于HarmonyOS 鸿蒙Next中设置了长语音实时录音识别,但20秒就自动停止录制,该怎么解决?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

解决方案

需要在语音识别方法的 extraParams 中增加 maxAudioDuration,并设置为 8 * 60 * 60 * 1000 (长语音模式最大识别时间),即可解决问题。

cke_121.png

修改后的代码

private startListeningForRecording() {
  let audioParam: speechRecognizer.AudioInfo = { audioType: 'pcm', sampleRate: 16000, soundChannel: 1, sampleBit: 16 }// audioInfo参数配置请参考AudioInfo
  let extraParam: Record<string, Object> = {
    "recognitionMode": 0, // 实时录音识别(需应用开启录音权限:ohos.permission.MICROPHONE)
    "maxAudioDuration": 8 * 60 * 60 * 1000 // 长语音模式最大识别时间
  }
  let recognizerParams: speechRecognizer.StartParams = {
    sessionId: "2333",
    audioInfo: audioParam,
    extraParams: extraParam
  }
  console.info('startListening start');
  asrEngine.startListening(recognizerParams);
};

更多关于HarmonyOS 鸿蒙Next中设置了长语音实时录音识别,但20秒就自动停止录制,该怎么解决?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,长语音实时录音识别自动停止通常由系统默认录音时长限制或应用权限配置导致。检查应用的录音权限是否完整,确保在配置文件中声明了ohos.permission.MICROPHONE权限。在代码中,使用AudioCapturer时需正确设置AudioCapturerInfo中的bufferSizeInBytessamplingRate,确保音频缓冲区大小适配长时间录制。同时,验证AudioCapturerstart方法是否在后台被系统资源管理中断,可尝试在ability中保持前台服务或使用ContinuousTask能力。

根据您提供的代码,问题很可能出在权限配置后台运行策略上。在HarmonyOS Next中,长语音实时录音识别在20秒左右自动停止,通常不是代码逻辑错误,而是系统对后台录音和持续运行的限制。

以下是核心排查点:

  1. 检查并确保已申请正确的权限

    • module.json5 文件中,确认已声明 ohos.permission.MICROPHONE 权限,并且 reason 字段描述清晰。
    • 关键步骤:对于需要长时间后台录音的场景,必须额外申请 ohos.permission.KEEP_BACKGROUND_RUNNING 权限。这是允许应用在后台持续运行并访问麦克风的关键。
  2. 配置正确的后台模式

    • module.json5 文件的 abilities 配置下,为对应的UIAbility添加 backgroundModes 能力。对于持续录音,需要包含 "audioRecording"
    • 示例配置:
    "abilities": [
      {
        "name": "EntryAbility",
        // ... 其他配置
        "backgroundModes": [
          "audioRecording"
        ]
      }
    ]
    
  3. 检查前台服务(如适用)

    • 如果您的应用在录音期间需要完全转入后台(用户切换到其他应用),仅靠后台模式可能不够。HarmonyOS对后台资源管理严格。为了实现不受限制的长时录音,您可能需要结合使用长时任务(LongTermTask)后台代理提醒等机制来向系统申明您的任务需要持续运行。请查阅DevEco中关于后台任务管理的详细文档。
  4. 验证音频参数

    • 您设置的 audioParam (PCM, 16kHz, 单声道) 是标准的,通常没问题。但可以确认一下设备硬件是否支持该采样率。

总结:请优先重点检查 module.json5 中的权限声明(特别是 MICROPHONEKEEP_BACKGROUND_RUNNING)以及 backgroundModesaudioRecording 配置。缺少后台运行权限和能力声明是导致录音被系统中断的最常见原因。如果问题依旧,需深入查看后台任务保活机制。

回到顶部