求助:AudioKit从5.4.1升级至5.6后RawDataTap执行频率低于预期
AudioKit RawDataTap 帧间隔异常问题报告
- 提供了用于复现问题的Demo项目,需在真实iOS设备上运行
- 该问题与Stack Overflow上的同类历史问题相关
- 在AudioKit 5.4.1版本中,
doHandleTapBlock方法会严格按照指定的bufferSize频率执行,例如当bufferSize设为256时,每处理256帧就执行一次 - 升级到AudioKit 5.6版本后,
doHandleTapBlock的执行频率变为每4410帧(约100毫秒)一次,此为设备实测结果 - 在Demo项目中,通过子类化
RawDataTap的方式,直观展示了两次doHandleTapBlock执行之间的AVAudioTime帧间隔 - 改用AVFoundation原生的
installTap也存在相同的异常间隔问题,但如果为每个传入的buffer手动设置frameLength为指定的bufferSize,间隔时间就能恢复符合预期的bufferLength时长。根据AVAudioPCMBuffer的官方说明,该属性必须在buffer被使用前设置 - 尝试在
doHandleTapBlock方法内部设置bufferLength,无法解决此问题 - 查看BaseTap的新版本代码后发现:buffer会在
handleTapBlock方法内被复制到bufferWithCapacity变量中,后续仅为这个复制后的变量设置frameLength,而原buffer的frameLength从未被设置。推测正是这个原因,导致系统使用frameCapacity来决定tap的更新频率,从而出现异常 - 虽然可以改用AVFoundation原生的
installTap作为临时替代方案,但该问题仍值得向AudioKit团队反馈
内容的提问来源于stack exchange,提问作者anytwopoints
相关产品推荐
相关产品推荐

