HarmonyOS soundpool和AVPlayer都无法快速播放多个短促音频
soundpool和AVplayer加载音频都有延迟,快速播放多个短促音频不能及时播放出来,导致听起来断断续续,这边看看有没有什么办法解决。
参考demo:
import { audio } from '@kit.AudioKit';
import { media } from '@kit.MediaKit';
import { fileIo } from '@kit.CoreFileKit';
import { BusinessError } from '@kit.BasicServicesKit';
let soundPool: media.SoundPool;
let streamId: number = 0;
let soundId: number = 0;
let audioRendererInfo: audio.AudioRendererInfo = {
usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
rendererFlags: 1
}
let playParameters: media.PlayParameters = {
loop: 3, // 循环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, // 最低优先级
}
let uri: string = "";
async function create() {
//创建soundPool实例
soundPool = await media.createSoundPool(5, audioRendererInfo);
//注册监听
loadCallback();
finishPlayCallback();
setErrorCallback();
// 加载音频资源
await fileIo.open('/test_01.mp3', fileIo.OpenMode.READ_ONLY).then((file: fileIo.File) => {
console.info("file fd: " + file.fd);
uri = 'fd://' + (file.fd).toString()
}); // '/test_01.mp3' 作为样例,使用时需要传入文件对应路径。
soundId = await soundPool.load(uri);
}
function loadCallback() {
// 加载完成回调
soundPool.on('loadComplete', (soundId_: number) => {
console.info('loadComplete, soundId: ' + soundId_);
})
}
//设置播放完成监听
function finishPlayCallback() {
// 播放完成回调
soundPool.on('playFinished', () => {
console.info("recive play finished message");
// 可进行下次播放
})
}
//设置错误类型监听
function setErrorCallback() {
soundPool.on('error', (error: BusinessError) => {
console.info('error happened,message is :' + error.message);
})
}
async function PlaySoundPool() {
// 开始播放,这边play也可带播放播放的参数PlayParameters
soundPool.play(soundId, playParameters, (error, streamID: number) => {
if (error) {
console.info(`play sound Error: errCode is ${error.code}, errMessage is ${error.message}`)
} else {
streamId = streamID;
console.info('play success soundid:' + streamId);
}
});
// 设置循环播放次数
await soundPool.setLoop(streamId, 2); // 播放3次
// 设置对应流的优先级
await soundPool.setPriority(streamId, 1);
// 设置音量
await soundPool.setVolume(streamId, 0.5, 0.5);
}
async function release() {
// 终止指定流的播放
await soundPool.stop(streamId);
// 卸载音频资源
await soundPool.unload(soundId);
//关闭监听
setOffCallback();
// 释放SoundPool
await soundPool.release();
}
//关闭监听
function setOffCallback() {
soundPool.off('loadComplete');
soundPool.off('playFinished');
soundPool.off('error');
}
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
SoundPool实现音频播放功能
1408浏览 • 1回复 待解决
HarmonyOS SoundPool播放rawfile音频失败
38浏览 • 1回复 待解决
SoundPool播放的音频是否支持WMV格式
1947浏览 • 1回复 待解决
AVplayer开发音频播放功能
1251浏览 • 1回复 待解决
基于AVPlayer音频后台播放
618浏览 • 1回复 待解决
HarmonyOS 使用SoundPool无法播放rawfile下的mp3音频文件
227浏览 • 1回复 待解决
AVPlayer实现音频播放(c++侧)
1384浏览 • 1回复 待解决
HarmonyOS 使用SoundPool开发音频播放功能,创建实例为空
30浏览 • 1回复 待解决
HarmonyOS 使用AVPlayer播放音频,如何动态切换音频地址,而不用销毁重建
19浏览 • 1回复 待解决
HarmonyOS AVPlayer播放本地沙箱目录音频文件
436浏览 • 1回复 待解决
使用AVPlayer播放音频文件的几种方式实现
2010浏览 • 1回复 待解决
HarmonyOS 调用avPlayer播放网络音频如何设置超时时长?
262浏览 • 1回复 待解决
创建多个视频组件无法播放
2255浏览 • 1回复 待解决
HarmonyOS AVPlayer 播放问题
766浏览 • 1回复 待解决
HarmonyOS soundpool播放声音的问题
587浏览 • 1回复 待解决
HarmonyOS无法获取OHAudio Renderer音频播放延迟
463浏览 • 1回复 待解决
HarmonyOS XComponent和AVplayer实现视频播放,视频被拉伸
46浏览 • 1回复 待解决
HarmonyOS 如果要同时支持播放MP3和PCM格式的音频,除了avplayer,还有其他组件支持吗?
78浏览 • 1回复 待解决
ArkTS如何通过SoundPool播放rawfile目录下的mp3格式的短音频?
426浏览 • 1回复 待解决
HarmonyOS AvPlayer视频播放速度问题
492浏览 • 1回复 待解决
HarmonyOS音频播放问题
457浏览 • 1回复 待解决
HarmonyOS 音频播放相关
34浏览 • 1回复 待解决
OpenHarmony系统setting应用无法使用TonePlayer音频播放
2700浏览 • 1回复 待解决
AVPlayer实现视频播放
1071浏览 • 1回复 待解决
soundpool当前最多支持32个并行流,可以在需要加载第33个音频时,将之前加载的音频通过unload卸载掉。
注意:soundpool不支持多实例,多次创建对应的是同个实例,根据上面的soundpool示例可以参考一下如下改动: