HarmonyOS 鸿蒙Next短音效如何加载和播放

发布于 1周前 作者 itying888 来自 鸿蒙OS

HarmonyOS 鸿蒙Next短音效如何加载和播放

static async loadSound(context: common.AbilityStageContext) { let audioRendererInfo: audio.AudioRendererInfo = { usage: audio.StreamUsage.STREAM_USAGE_MUSIC, rendererFlags: 0 } MyUtils.soundPool = await media.createSoundPool(12, audioRendererInfo); for (let i = 0; i < 88; i++) { const index = i; let name: string = ‘’; if (i == 0) { name = ‘b00’; } else if (i < 36) { name = ‘b’ + Math.ceil(i / 5) + (i - 1) % 5; } else if (i - 36 < 2) { name = ‘w0’ + (i - 36); } else { name = ‘w’ + Math.ceil((i - 37) / 7) + (i - 38) % 7; } name += ‘.mp3’; context.resourceManager.getRawFd(name).then(file => { MyUtils.soundPool.load(file.fd, file.offset, file.length).then(soundId => { console.log(‘guojs index:’ + index + " name:" + name); MyUtils.soundIds.set(index, soundId); }), (reason: string) => { console.log(‘guojs error:’ + index + " error:" + reason); }).catch(reason => { console.log(‘guojs catch error:’ + index + " error:" + reason); }) }); } // let file = context.resourceManager.getRawFdSync(‘b00.mp3’); }

log 提示多个fail:guojs error:24 error:BusinessError: load sound failed

好像就是只能load 32个,那我弹奏钢琴的时候,这个声音要求是立即发出了,怎么弄呢? 有88个琴键,每次按的时候临时加载吗?


更多关于HarmonyOS 鸿蒙Next短音效如何加载和播放的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

短音效可以使用soundpool进行加载和播放. 参考文档:SoundPool (音频池)-multimedia-ArkTS API-Media Kit(媒体服务)-媒体 - 华为HarmonyOS开发者 (huawei.com)

soundpool不支持多实例,多次创建对应的是同个实例,同时media.createSoundPool()会清空内容重新初始化; soundpool当前最多支持32个并行流,可以在需要加载第33个音频时,将之前加载的音频通过unload卸载掉。单个文件大小有限制,要求不超过1MB,大小超过1MB的长音频将截取1MB大小数据进行播放。

加载、播放可以参考以下代码:

import { media } from '@kit.MediaKit';
import { audio } from '@kit.AudioKit';
import { common } from '@kit.AbilityKit';

let audioRendererInfo: audio.AudioRendererInfo = {
  usage: audio.StreamUsage.STREAM_USAGE_MOVIE,
  rendererFlags: 0
}
let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
@Entry
@Component
struct Index {

  soundId : number = 0;
  soundPool?: media.SoundPool

  async aboutToAppear(): Promise<void> {
    let file = context.resourceManager.getRawFdSync('音频文件');
    this.soundPool = await media.createSoundPool(32,audioRendererInfo);
    this.soundId = await this.soundPool.load(file.fd, file.offset, file.length)
  }
  build() {
    Column() {
      Button("播放").onClick(() => {
        this.soundPool?.play(this.soundId)
      })
    }
  }
}

更多关于HarmonyOS 鸿蒙Next短音效如何加载和播放的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,加载和播放Next短音效通常涉及使用鸿蒙系统提供的音频播放接口。以下是关于如何在鸿蒙系统中实现这一功能的基本步骤:

  1. 资源准备

    • 确保短音效文件已正确放置在项目的资源目录中,并且其格式是鸿蒙系统支持的音频格式(如MP3、WAV等)。
  2. 加载音效

    • 使用鸿蒙提供的音频管理API加载音效文件。这通常涉及到创建一个音频播放器实例,并指定要播放的音效文件的路径或资源ID。
  3. 播放音效

    • 调用音频播放器实例的播放方法,开始播放已加载的音效。可以控制播放的参数,如音量、是否循环等。
  4. 释放资源

    • 在音效播放完毕后,及时释放音频播放器实例和相关资源,以避免内存泄漏。

需要注意的是,具体的API调用和参数设置可能会根据鸿蒙系统的不同版本和设备的不同而有所差异。因此,在开发过程中,建议参考鸿蒙系统的官方文档和API指南,以确保代码的正确性和兼容性。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。在这里,你可以获得更专业的帮助和支持。

回到顶部