HarmonyOS soundpool使用问题
现在需要实现点击按钮发出声音,当按钮点击很快的时候声音可以重叠于是用了soundpool但是出现错误”soundPool load failed and catch error is No such file or directory“。参考代码:
let soundPool: media.SoundPool;
let audioRendererInfo: audio.AudioRendererInfo = {
usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
rendererFlags: 1
}
media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
if (error) {
return;
} else {
let file: fs.File;
let soundID: number = 0;
let fileSize: number = 1; //通过fs.stat()获取size值
let uri: string = "";
//获取fd的描述信息
fs.open('/assets/addsub.mp3', fs.OpenMode.READ_ONLY).then((file_: fs.File) => {
file = file_;
console.info("file fd: " + file.fd);
uri = 'fd://' + (file.fd).toString()
soundPool = soundPool_;
soundPool.load(uri).then((soundId: number) => {
console.info('soundPool load uri success');
soundID = soundId;
console.info(`createSoundPool success`)
let playParameters: media.PlayParameters = {
loop: 1, // 循环4次
rate: audio.AudioRendererRate.RENDER_RATE_NORMAL, // 正常倍速
leftVolume: 0.5, // range = 0.0-1.0
rightVolume: 0.5, // range = 0.0-1.0
priority: 0, // 最低优先级
}
soundPool.play(soundId, playParameters).then((streamId: number) => {
console.info('play success');
}, (err: BusinessError) => {
console.error('soundpool play failed and catch error is ' + err.message);
});
})
}, (err: BusinessError) => {
console.error('soundPool load failed and catch error is ' + err.message);
});
}
})
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS soundpool播放声音的问题
400浏览 • 1回复 待解决
SoundPool实现音频播放功能
1152浏览 • 1回复 待解决
SoundPool播放的音频是否支持WMV格式
1816浏览 • 1回复 待解决
HarmonyOS resourceManager使用问题
293浏览 • 1回复 待解决
HarmonyOS Navigation使用问题
262浏览 • 1回复 待解决
HarmonyOS RichEditor 使用问题
347浏览 • 1回复 待解决
HarmonyOS Navigation 使用问题
291浏览 • 1回复 待解决
HarmonyOS地图使用问题
193浏览 • 1回复 待解决
HarmonyOS websocket使用问题
41浏览 • 1回复 待解决
HarmonyOS lottie使用问题
212浏览 • 1回复 待解决
HarmonyOS Slide使用问题
111浏览 • 1回复 待解决
HarmonyOS filePreview使用问题
191浏览 • 1回复 待解决
HarmonyOS ProtoBuffer使用问题
269浏览 • 1回复 待解决
HarmonyOS customdialog使用问题
286浏览 • 1回复 待解决
HarmonyOS textpicker使用问题
156浏览 • 1回复 待解决
HarmonyOS onAreaChange使用问题
539浏览 • 1回复 待解决
HarmonyOS getRawFileContent使用问题咨询
432浏览 • 1回复 待解决
HarmonyOS Text/Span使用问题
281浏览 • 1回复 待解决
HarmonyOS swiper + LazyForEach使用问题
148浏览 • 1回复 待解决
HarmonyOS @Extend 的使用问题
328浏览 • 1回复 待解决
HarmonyOS Promise & taskpool使用问题
146浏览 • 1回复 待解决
HarmonyOS Scroll组件使用问题
209浏览 • 1回复 待解决
HarmonyOS MMKV的使用问题
286浏览 • 1回复 待解决
HarmonyOS picker使用问题确认
209浏览 • 1回复 待解决
HarmonyOS LazyForEach组件dataSource使用问题
260浏览 • 2回复 待解决
看报错内容,初步判断是soundPool的文件路径没有找到,请检查一下soundPool文件的路径是否正确。
1、entry/src/main/ets/assets下的文件不能通过fs.open(’/assets/addsub.mp3’)获取到,可将需要的音频文件放到resources/rawfile目录或resources/resfile目录下,参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/resource-categories-and-access-V5
2、rawfile目录下文件可通过
获取RawFileDescriptor,通过
加载,且只能通过这种方式加载,不能通过uri的形式加载;
3、resfile目录下文件可通过
方式获取到文件,通过
加载;
4、soundPool.load()的回调中并未真正加载成功,不能在load的回调中直接play,可以在media.createSoundPool()创建soundPool实例后,在soundPool实例的回调监听soundPool.on(‘loadComplete’)中调用play方法。参考demo如下: