HarmonyOS鸿蒙Next中调用原生语音播放功能,播放内容包含数字的情况下,内容未播放完就结束了

HarmonyOS鸿蒙Next中调用原生语音播放功能,播放内容包含数字的情况下,内容未播放完就结束了 调用原生语音播放功能 播放内容包含数字的情况下,内容未播放完就结束了

import media from '@ohos.multimedia.media';
import { BusinessError } from '@ohos.base';

export default class AVPlayer {
  constructor() {

  }

  // 注册avplayer回调函数
  static setAVPlayerCallback(avPlayer: media.AVPlayer, completed: Function | null) {
    // seek操作结果回调函数
    avPlayer.on('seekDone', (seekDoneTime: number) => {
      console.info(`AVPlayer seek succeeded, seek time is ${seekDoneTime}`);
    })
    // error回调监听函数,当avPlayer在操作过程中出现错误时调用 reset接口触发重置流程
    avPlayer.on('error', (err: BusinessError) => {
      console.error(`Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`);
      avPlayer.reset(); // 调用reset重置资源,触发idle状态
    })
    // 状态机变化回调函数
    avPlayer.on('stateChange', async (state: string, reason: media.StateChangeReason) => {
      switch (state) {
        case 'idle': // 成功调用reset接口后触发该状态机上报
          console.info('AVPlayer state idle called.');
          avPlayer.release(); // 调用release接口销毁实例对象
          break;
        case 'initialized': // avplayer 设置播放源后触发该状态上报
          console.info('AVPlayer state initialized called.');
          avPlayer.prepare();
          break;
        case 'prepared': // prepare调用成功后上报该状态机
          console.info('AVPlayer state prepared called.');
          avPlayer.play(); // 调用播放接口开始播放
          break;
        case 'playing': // play成功调用后触发该状态机上报
          console.info('AVPlayer state playing called.');
          break;
        case 'paused': // pause成功调用后触发该状态机上报
          console.info('AVPlayer state paused called.');
          avPlayer.play(); // 再次播放接口开始播放
          break;
        case 'completed': // 播放结束后触发该状态机上报
          console.info('AVPlayer state completed called.');
          avPlayer.stop(); //调用播放结束接口
          completed && completed()
          break;
        case 'stopped': // stop接口成功调用后触发该状态机上报
          console.info('AVPlayer state stopped called.');
          avPlayer.reset(); // 调用reset接口初始化avplayer状态
          break;
        case 'released':
          console.info('AVPlayer state released called.');
          break;
        default:
          console.info('AVPlayer state unknown called.');
          break;
      }
    })
  }

  // 以下demo为通过url设置网络地址来实现播放直播码流的demo
  static async avPlayerLive(text: string = '', completed: Function | null) {
    let _text: string = text
    _text = _text.replaceAll(',', ',')
    _text = _text.replaceAll('%EF%BC%8C', ',')
    // 创建avPlayer实例对象
    let avPlayer: media.AVPlayer = await media.createAVPlayer();
    // 创建状态机变化回调函数
    AVPlayer.setAVPlayerCallback(avPlayer, completed);
    avPlayer.url = `xxx`;
  }
}

调用:

AVPlayer.avPlayerLive(`团购1号订单已开始配送`, () => {})

更多关于HarmonyOS鸿蒙Next中调用原生语音播放功能,播放内容包含数字的情况下,内容未播放完就结束了的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

升级版本试下,或者在1前后加上空格试下

更多关于HarmonyOS鸿蒙Next中调用原生语音播放功能,播放内容包含数字的情况下,内容未播放完就结束了的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中调用原生语音播放功能时,如果播放内容包含数字且未播放完就结束,可能是由于以下原因:

  1. 文本解析问题:鸿蒙的语音合成引擎在解析包含数字的文本时,可能未正确处理数字的转换,导致播放中断。例如,数字“123”可能被错误地解析为“一二三”或“一百二十三”,影响播放流程。

  2. 语音合成引擎限制:鸿蒙的语音合成引擎可能对某些特殊字符或数字的处理存在限制,尤其是在连续数字或复杂数字组合的情况下,可能导致播放提前结束。

  3. 缓冲区溢出或资源不足:如果语音播放的文本较长或包含大量数字,可能会导致缓冲区溢出或系统资源不足,从而中断播放。

  4. API调用问题:在调用语音播放API时,可能未正确设置播放参数,如播放长度、中断处理等,导致播放未按预期完成。

  5. 系统版本或兼容性问题:某些鸿蒙系统版本可能在语音合成功能上存在兼容性问题,尤其是在处理包含数字的文本时,可能导致播放异常。

建议检查语音播放的代码实现,确保文本解析和API调用正确,并确认系统版本是否支持相关功能。

在HarmonyOS鸿蒙Next中调用原生语音播放功能时,如果播放内容包含数字且未播放完就结束,可能是以下原因:

  1. 文本解析问题:系统在解析包含数字的文本时可能存在异常,导致播放中断。建议检查文本格式,确保数字与文字之间有适当的分隔符。

  2. 语音引擎限制:某些语音引擎可能对包含数字的文本处理不完善。可以尝试更新语音引擎或使用第三方语音服务。

  3. 资源限制:设备资源不足可能导致播放中断。确保设备有足够的内存和CPU资源。

  4. API调用问题:检查播放API的调用逻辑,确保播放任务正确执行,没有提前终止。

建议通过日志或调试工具定位具体问题,并参考官方文档或社区资源获取进一步支持。

回到顶部