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问题
45浏览 • 1回复 待解决
HarmonyOS soundpool播放声音的问题
428浏览 • 1回复 待解决
HarmonyOS 使用SoundPool无法播放rawfile下的mp3音频文件
43浏览 • 1回复 待解决
SoundPool实现音频播放功能
1190浏览 • 1回复 待解决
SoundPool播放的音频是否支持WMV格式
1834浏览 • 1回复 待解决
HarmonyOS Navigation使用问题
276浏览 • 1回复 待解决
HarmonyOS Navigation 使用问题
310浏览 • 1回复 待解决
HarmonyOS地图使用问题
206浏览 • 1回复 待解决
HarmonyOS resourceManager使用问题
313浏览 • 1回复 待解决
HarmonyOS lottie使用问题
226浏览 • 1回复 待解决
HarmonyOS RichEditor 使用问题
356浏览 • 1回复 待解决
HarmonyOS websocket使用问题
94浏览 • 1回复 待解决
HarmonyOS onAreaChange使用问题
563浏览 • 1回复 待解决
HarmonyOS filePreview使用问题
210浏览 • 1回复 待解决
HarmonyOS ProtoBuffer使用问题
294浏览 • 1回复 待解决
HarmonyOS Slide使用问题
127浏览 • 1回复 待解决
HarmonyOS textpicker使用问题
176浏览 • 1回复 待解决
HarmonyOS customdialog使用问题
321浏览 • 1回复 待解决
HarmonyOS Text/Span使用问题
289浏览 • 1回复 待解决
HarmonyOS swiper + LazyForEach使用问题
172浏览 • 1回复 待解决
HarmonyOS Promise & taskpool使用问题
163浏览 • 1回复 待解决
HarmonyOS getRawFileContent使用问题咨询
456浏览 • 1回复 待解决
HarmonyOS @Extend 的使用问题
352浏览 • 1回复 待解决
HarmonyOS Scroll组件使用问题
232浏览 • 1回复 待解决
HarmonyOS picker使用问题确认
226浏览 • 1回复 待解决
看报错内容,初步判断是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如下: