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');
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
HarmonyOS
赞
收藏 0
回答 1
相关问题
SoundPool实现音频播放功能
2208浏览 • 1回复 待解决
HarmonyOS SoundPool播放rawfile音频失败
744浏览 • 1回复 待解决
基于AVPlayer音频后台播放
1429浏览 • 1回复 待解决
SoundPool播放的音频是否支持WMV格式
2586浏览 • 1回复 待解决
HarmonyOS soundpool提前load多个音频后,多次play报错
641浏览 • 1回复 待解决
HarmonyOS 使用SoundPool无法播放rawfile下的mp3音频文件
986浏览 • 1回复 待解决
AVplayer开发音频播放功能
1803浏览 • 1回复 待解决
AVPlayer实现音频播放(c++侧)
2221浏览 • 1回复 待解决
HarmonyOS avplayer播放amr音频的码率问题
616浏览 • 1回复 待解决
HarmonyOS avplayer音频播放切换播放时,两个音频同时播放,没有清除第一个音频,页面关闭音频还在播放
806浏览 • 1回复 待解决
HarmonyOS 使用SoundPool开发音频播放功能,创建实例为空
661浏览 • 1回复 待解决
HarmonyOS AVPlayer播放本地沙箱目录音频文件
1605浏览 • 1回复 待解决
HarmonyOS 播放视频,多个XComponent公用一个AVPlayer
870浏览 • 1回复 待解决
HarmonyOS 使用AVPlayer播放音频,如何动态切换音频地址,而不用销毁重建
781浏览 • 1回复 待解决
HarmonyOS 调用avPlayer播放网络音频如何设置超时时长?
881浏览 • 1回复 待解决
使用AVPlayer播放音频文件的几种方式实现
4100浏览 • 1回复 待解决
创建多个视频组件无法播放
3060浏览 • 1回复 待解决
HarmonyOS soundpool播放声音的问题
1173浏览 • 1回复 待解决
HarmonyOS无法获取OHAudio Renderer音频播放延迟
1024浏览 • 1回复 待解决
HarmonyOS AVPlayer 播放问题
1802浏览 • 1回复 待解决
HarmonyOS 使用AVPlayer开发音频播放功能,mp3类型的本地音频文件可以正常播放,但是wav类型的音频文件播放失败
781浏览 • 1回复 待解决
HarmonyOS AudioCapturer录制的音频文件无法播放
833浏览 • 1回复 待解决
HarmonyOS XComponent和AVplayer实现视频播放,视频被拉伸
1189浏览 • 1回复 待解决
HarmonyOS 如果要同时支持播放MP3和PCM格式的音频,除了avplayer,还有其他组件支持吗?
713浏览 • 1回复 待解决
soundpool当前最多支持32个并行流,可以在需要加载第33个音频时,将之前加载的音频通过unload卸载掉。
注意:soundpool不支持多实例,多次创建对应的是同个实例,根据上面的soundpool示例可以参考一下如下改动: