本申请涉及android系统技术,特别涉及一种android系统中的音频播放方法。
背景技术:
在android系统中,现有的使用audiotrack进行音频播放时,audiotrack应用与android系统平台的交互过程如图1所示,在图1中,minbuffer是android平台api返回值,告知应用当前需要配置给android平台的最小缓存数;trackbuffer为应用最终设置给平台的缓存数,需要保证trackbuffer>=minbuffer;write为应用向平台缓存中写数据,内部维护的已写数量总和;play是android平台api返回值,告知当前的播放进度;x是android平台内部的缓存,应用无法感知,对不同终端该值不同,需要缓存量大于x时才真正开始播放。
基于上述交互过程实现的音频播放流程具体包括:
1)应用在播放配置阶段创建audiotrack时,为audiotrack设置buffer大小为trackbuffer,为了能够正常播放,通常trackbuffer≥minbuffer;
2)在启动播放阶段,应用向trackbuffer中持续写入数据,当trackbuffer被填满后audiotrack开始播放;
3)在稳态播放过程中,当存在一帧待播放的音频数据时,应用记录已经送给平台的音频数write,同时不断通过api获取平台的播放进度play,判断如下:
a)若write–play≥trackbuffer,则认为平台的缓存已满,不作处理;
b)若write–play
4)判断若还存在待播放的音频数据,则继续执行步骤3,否则等待有新数据时再执行步骤3。
上述音频播放方式存在如下两个问题:
1、对于某些终端,当应用已经给audiotrack的buffer填充满t