可以使用getRawFdSync方法读取rawfile下的文件:import audio from '@ohos.multimedia.audio'; import media from '@ohos.multimedia.media'; import { BusinessError } from '@ohos.base'; import common from '@ohos.app.ability.common'; import { emitter } from '@kit.BasicServicesKit'; let soundPool: media.SoundPool; let streamIda: number = 0; let soundIda: number = 0; let audioRendererInfo: audio.AudioRendererInfo = { usage: audio.StreamUsage.STREAM_USAGE_MUSIC, rendererFlags: 1 } let PlayParameters: media.PlayParameters = { loop: 0, // 循环4次 rate: audio.AudioRendererRate.RENDER_RATE_NORMAL, // 正常倍速 leftVolume: 1, // range = 0.0-1.0 rightVolume: 1, // range = 0.0-1.0 priority: 3, // 最低优先级 } @Entry @Component struct IR240823214914038 { @State message: string = '播放音频'; async aboutToAppear(): Promise<void> { create(); } async aboutToDisappear() { release(); } onPageShow(): void { emitter.on('eventId', () => { console.info('callback'); }); } build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) Button('play').onClick((event: ClickEvent) => { PlaySoundPool1(); }) } .width('100%') } .height('100%') } } async function create() { //创建soundPool实例 soundPool = await media.createSoundPool(10, audioRendererInfo); //注册监听 loadCallback(); finishPlayCallback(); setErrorCallback(); CreatAudio('01.mp3') } async function CreatAudio(path:string) { // 加载音频资源 let context = getContext() as common.UIAbilityContext; let fileDescriptor = context.resourceManager.getRawFdSync(path); if (canIUse('SystemCapability.Multimedia.Media.SoundPool')){ soundPool.load(fileDescriptor.fd,fileDescriptor.offset,fileDescriptor.length).then((soundId1: number) => { console.info('soundPool load uri success 1'); soundIda=soundId1; console.log(`${soundId1}`) }).catch((err: BusinessError) => { console.error('soundPool load failed and catch error is ' + err.message); }) } } async function loadCallback() { // 加载完成回调 soundPool.on('loadComplete', (soundId_: number) => { console.info('loadComplete, soundId: ' + soundId_); }) } //设置播放完成监听 async function finishPlayCallback() { // 播放完成回调 soundPool.on('playFinished', () => { console.info("recive play finished message"); // 可进行下次播放 }) } //设置错误类型监听 function setErrorCallback() { soundPool.on('error', (error) => { console.error('error happened,message is :' + error.code); console.error('error happened,message is :' + error.message); }) } async function PlaySoundPool1() { console.log("play"); // 开始播放,这边play也可带播放播放的参数PlayParameters streamIda = await soundPool.play(soundIda,PlayParameters); } async function unload(){ //终止指定流的播放 soundPool.stop(streamIda); // 卸载音频资源 await soundPool.unload(soundIda); } async function release() { if (streamIda!=0) { //终止指定流的播放 soundPool.stop(streamIda); // 卸载音频资源 await soundPool.unload(soundIda); } //关闭监听 setOffCallback(); // 释放SoundPool await soundPool.release(); } //关闭监听 function setOffCallback() { soundPool.off('loadComplete'); soundPool.off('playFinished'); soundPool.off('error'); }
可以使用getRawFdSync方法读取rawfile下的文件: