HarmonyOS 鸿蒙Next: Audiorenderer停止播放的时机?
HarmonyOS 鸿蒙Next: Audiorenderer停止播放的时机? 各位好!我在Audiorenderer的writedata回调中判断pcm数据全部写入缓冲区后,调用了stop,但是实际运行时,有时(不是总是)末尾几秒到十几秒的音频会没播放就停止了。请问如何解决?
(this.renderModel as audio.AudioRenderer).on('writeData', (buffer1: ArrayBuffer) => {
try {
if(this.progCurr>=Vars.PCMLen){ //这里判断如果数据已经全部提供给缓冲区,就调用停止播放。但是运行时有时(不是总是)末尾几秒到十几秒的音频会没播放就停止了!
this.PlayerStop();
return audio.AudioDataCallbackResult.VALID;;
}
let bufView=new Uint8Array(buffer1);
let ptrCurr=this.progCurr;
for(let i=0;i<buffer1.byteLength;i++){
bufView[i]=this.bufPCM.readUInt8(ptrCurr+i);
}
this.progCurr += this.PlayerBufferSize;
return audio.AudioDataCallbackResult.VALID;
} catch (error) {
console.error('Error reading PCM source:', error);
// API version 11 不支持返回回调结果,从 API version 12 开始支持返回回调结果
return audio.AudioDataCallbackResult.INVALID;
}
});
更多关于HarmonyOS 鸿蒙Next: Audiorenderer停止播放的时机?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
我是从内存中读取的数据,读完之后stop,但是经常已读取的部分尾部数据没有播放,不知为什么。Audiorender是否有缓冲区播放完毕的回调,在这里stop可能就可不会漏播了?或者还有什么办法防止漏播尾部?
更多关于HarmonyOS 鸿蒙Next: Audiorenderer停止播放的时机?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
AudioRender不感知文件,播放到某个进度需要收到一个回调可以用OH_AudioRenderer_SetMarkPosition
。TS层参考:JS APIs Audio
markReach、periodReach,
有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html
我的buffer是从文件读取出来的, 我在文件读取完之后stop play, 检查实际读取到的字节数为0就认为读取完了。
在HarmonyOS中,AudioRenderer
停止播放的时机通常由以下几个情况决定:
-
手动停止:调用
AudioRenderer
的stop()
方法,音频播放会立即停止。 -
播放完成:当音频数据全部播放完毕,且没有新的数据写入时,
AudioRenderer
会自动停止播放。 -
资源释放:调用
AudioRenderer
的release()
方法,释放相关资源,播放会停止。 -
异常情况:如音频设备被占用、音频数据格式不支持等异常情况,
AudioRenderer
会停止播放并抛出相应错误。 -
系统事件:如系统进入休眠状态或应用被挂起,
AudioRenderer
可能会被系统强制停止播放。
这些是AudioRenderer
停止播放的主要时机。