该条目讨论音频播放中播放级设置(音量、速度、淡入淡出因子、滤波器曲线)如何到达当前及未来的每个播放器对象,并指出两种后端形状需要相反的代码组织方式。
用途:帮助Kotlin音频播放开发者避免设置同步上的常见缺陷,确保设置在整个播放生命周期内正确生效。
主要能力:
- 采样后端模式:每个流有自己的消费者,消费者闭包捕获一个共享字段(如@Volatile currentCurve),设置时只需更新该字段,新建播放器自动读取最新值,无需推送。
- 句柄后端模式:每个新句柄从引擎默认值开始,需在创建处重新应用所有设置(如applyPlaybackLevels()),且创建点可能多于预期。
使用方式:条目提供代码片段和grep命令。对于句柄后端,建议编写统一的forEachLiveHandle枚举器,覆盖current、secondary(易遗漏)和precached集合;设置相互影响的级别(如用户音量与淡入淡出衰减)应在一次调用中设置;推送需切换到拥有句柄的线程,并将整个forEachLiveHandle块投递而非单个写入;当无设置可应用时(bands为空且preamp为0)跳过重新应用以节省开销。验证时,可先检查每个Handle.create()后是否紧跟applyPlaybackLevels,再在运行时于淡入淡出期间修改设置并断言提升后的句柄值。
适用场景:适用于需要在不遍历所有对象的情况下将设置同步到后续创建对象的音频播放系统,尤其是涉及交叉淡入淡出、预缓存和句柄生命周期的场景。
限制:条目为技巧说明,未提供完整项目或库;部分细节(如具体引擎API)需结合上下文;引用的代码和命令需在Kotlin项目中自行适配。