HarmonyOS 短音效如何加载和播放

HarmonyOS 短音效如何加载和播放

HarmonyOS
2024-08-14 16:36:32
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

短音效可以使用soundpool进行加载和播放,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-inner-multimedia-soundpool-V5#ZH-CN_TOPIC_0000001930677541__unload

获取文件 
let file = this.context.resourceManager.getRawFdSync('音频名称'); 
获取soundid 
this.soundPool.load(file.fd, file.offset, file.length).then((soundId: number) => { 
  this.soundId = soundId 
})

soundpool不支持多实例,多次创建对应的是同个实例,同时media.createSoundPool()会清空内容重新初始化;soundpool当前最多支持32个并行流,可以在需要加载第33个音频时,将之前加载的音频通过unload卸载掉。加载、播放可以参考以下代码:

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) 
      }) 
    } 
  } 
}

目前soundpool最多只支持32个并行流,单个文件大小有限制,要求不超过1MB,大小超过1MB的长音频将截取1MB大小数据进行播放。

分享
微博
QQ
微信
回复
2024-08-14 21:20:56
相关问题
HarmonyOS 需要实现扫码音效播放问题
682浏览 • 1回复 待解决
HarmonyOS 设置音效类型为MOVIE
276浏览 • 1回复 待解决
HarmonyOS 录音语音播放相关demo
283浏览 • 1回复 待解决
视频直播播放HarmonyOS最佳实践
1477浏览 • 1回复 待解决
ArkTSNative如何动态加载、卸载so
2390浏览 • 1回复 待解决