HarmonyOS鸿蒙Next中华为快游戏创建音频实例介绍

HarmonyOS鸿蒙Next中华为快游戏创建音频实例介绍

问题描述

在游戏项目中调用华为快游戏 qg.createInnerAudioContext() 创建音频实例,设置好 srcplay 后,音频播放无声音,提示:

  • System error: create audio error or audio instance is out of limit
  • 或者 InnerAudioContext onEnded: currently is no music

问题分析

一方面,音频实例对象由于安卓设备的限制,无法同时存在过多实例对象,另外一方面引擎底层不会主动回收这些实例对象。 所以,一旦我们创建过多音频对象时,后续的音频播放要么没有效果,要么音量非常低(微信小游戏)。 为此,我们一般播放完音频后,切换其 src 播放下一首或者页面销毁时调用销毁实例方法来解决该问题。

问题解决

有两个方法可以解决这个问题:

  1. 在页面的生命周期 onDestroy() 方法中销毁音频实例对象
  2. 不要重复创建音频实例对象,通过修改 url 的方式播放不同的音频。

示例代码如下:

// 初始化音频实例对象
const innerAudioContext = qg.createInnerAudioContext()

audio(url) {
    this.innerAudioContext.loop = true;
    this.innerAudioContext.src = url;
    this.innerAudioContext.startTime = 0;
    this.innerAudioContext.onPlay(() => {
        console.log('开始播放')
    })
    this.innerAudioContext.onPause(() => {
        console.log('暂停播放')
    })
    this.innerAudioContext.onStop(() => {
        console.log('停止播放')
    })
    this.innerAudioContext.onCanplay(() => {
        console.log('进入可播放状态')
    })
    this.innerAudioContext.onError((res) => {
        console.log(res.errMsg)
        console.log(res.errCode)
    })
    this.innerAudioContext.play();
}

// 页面生命周期里销毁
onDestroy() {
    this.innerAudioContext.destroy()
}

// 使用时修改其 `url`,而不是重新创建实例对象
this.audio("xxx.mp3")

更多关于HarmonyOS鸿蒙Next中华为快游戏创建音频实例介绍的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中华为快游戏创建音频实例介绍的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,华为快游戏通过AudioContext类创建音频实例。开发者需先导入@ohos.multimedia.audio模块,然后使用createAudioContext()方法初始化音频实例。通过该实例,可以加载音频文件、控制播放、暂停、停止等操作,并监听音频状态变化。示例代码如下:

import audio from '@ohos.multimedia.audio';

let audioContext = audio.createAudioContext();
audioContext.src = 'path/to/audio.mp3';
audioContext.play();

此功能适用于游戏背景音乐、音效等场景,提升用户体验。

回到顶部