HarmonyOS 鸿蒙Next 使用AudioHapticManager音振协同播放问题

HarmonyOS 鸿蒙Next 使用AudioHapticManager音振协同播放问题 使用AudioHapticManager音振协同播放一段30秒的音频,但是只播放了6秒就停止了。是不是AudioHapticManager有一定的限制?还有AudioHapticManager可以进行循环播放吗?

我们的场景是接收到语音通话时,需要铃声和振动进行提醒用户。

2 回复

音频时延模式为低时延模式,该模式适用于比较短的音频文件,音频文件过长时可能被截断。设置成普通时延模式就能完全播放了。在监听流结束事件时,重新开始,可以达到循环播放目的。

async create() {
  const ringPath = filePath.getVoipSound() + "voip_call_in_ling.mp3";
  const hapticPath = filePath.getVoipSound() + "voip_call_in_vibrate.json";
  try {
    this.id = await this.audioHapticManager.registerSource(ringPath, hapticPath);
    //设置普通时延模式。注意低时延模式,该模式适用于比较短的音频文件,音频文件过长时可能被截断
    let latencyMode: audioHaptic.AudioLatencyMode = audioHaptic.AudioLatencyMode.AUDIO_LATENCY_MODE_NORMAL;
    this.audioHapticManager.setAudioLatencyMode(this.id, latencyMode);
    let usage: audio.StreamUsage = audio.StreamUsage.STREAM_USAGE_RINGTONE;
    this.audioHapticManager.setStreamUsage(this.id, usage);
    let options: audioHaptic.AudioHapticPlayerOptions = { muteAudio: false, muteHaptics: false };
    this.audioHapticPlayer = await this.audioHapticManager.createPlayer(this.id, options);
    this.audioHapticPlayer.on('endOfStream', () => {
      console.info(`Receive the callback of endOfStream.`);
      //播放结束,重新开始,达到循环目的
      this.start()
    })
    this.audioHapticPlayer.on('audioInterrupt', async(interruptEvent: audio.InterruptEvent) => {
      if (interruptEvent.forceType == audio.InterruptForceType.INTERRUPT_FORCE) {
        // 由系统进行操作,强制打断音频渲染,应用需更新自身状态及显示内容等
        switch (interruptEvent.hintType) {
          case audio.InterruptHint.INTERRUPT_HINT_PAUSE:
            // 音频流已被暂停,临时失去焦点,待可重获焦点时会收到resume对应的interruptEvent
            logger.info(TAG, 'Force paused. Update playing status and stop writing');
            break;
          case audio.InterruptHint.INTERRUPT_HINT_STOP:
            // 音频流已被停止,永久失去焦点,若想恢复渲染,需用户主动触发
            logger.info(TAG, 'Force stopped. Update playing status and stop writing');
            break;
          case audio.InterruptHint.INTERRUPT_HINT_DUCK:
            // 音频流已被降低音量渲染
            logger.info(TAG, 'Force ducked. Update volume status');
            break;
          case audio.InterruptHint.INTERRUPT_HINT_UNDUCK:
            // 音频流已被恢复正常音量渲染
            logger.info(TAG, 'Force ducked. Update volume status');
            break;
          default:
            break;
        }
      } else if (interruptEvent.forceType == audio.InterruptForceType.INTERRUPT_SHARE) {
        // 由应用进行操作,应用可以自主选择响应操作或忽略该事件
        switch (interruptEvent.hintType) {
          case audio.InterruptHint.INTERRUPT_HINT_RESUME:
            // 建议应用继续渲染(说明音频流此前被强制暂停,临时失去焦点,现在可以恢复渲染)
            logger.info(TAG, 'Resume force paused renderer or ignore');
            // 若选择继续渲染,需在此处主动执行开始渲染的若干操作
            break;
          default:
            break;
        }
      }
    });
  } catch (e) {
    logger.error(TAG, `创建播放器失败: ${JSON.stringify(e)}`);
  }
}

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-audiohaptic-V5#audiolatencymode

更多关于HarmonyOS 鸿蒙Next 使用AudioHapticManager音振协同播放问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对HarmonyOS 鸿蒙Next使用AudioHapticManager进行音振协同播放的问题,以下提供直接的技术解答:

在HarmonyOS中,AudioHapticManager是用于管理音频与触觉反馈(如振动)协同播放的组件。若遇到音振协同播放问题,首先需确保以下几点:

  1. 权限检查:确保应用已正确申请并获得了音频播放和振动相关的权限。

  2. API调用正确:检查AudioHapticManager的API调用是否正确,包括创建实例、设置参数(如音频ID、振动模式等)以及启动播放。

  3. 资源匹配:确保音频资源与振动模式匹配,即音频的节奏与振动的频率、强度等应相协调,以达到预期的音振协同效果。

  4. 系统兼容性:验证当前HarmonyOS版本是否支持所使用的AudioHapticManager特性,以及是否存在已知的兼容性问题。

  5. 错误日志分析:查看系统日志或应用日志,分析是否存在与AudioHapticManager相关的错误信息,以便定位问题。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。客服人员将提供更专业的技术支持与解决方案。

回到顶部