Chrome `AudioContext.decodeAudioData` 解析 m4a/aac 的时间漂移问题
使用 AudioContext.decodeAudioData
解析音频文件得到 pcm 数据,然后使用 canvas 绘制波形图。发现选择同一个音频的 m4a 和 wav 两种格式,绘制出来的波形图长度不一样。
检查发现 m4a 的 pcm 数据里少了一些 frames,导致波形图短了一点。经过测试发现音频越长缺的数据越多。
safari(18.1.1) 和 firefox(136.0) 没有这个问题,只有chrome (133.0.6943.142)可以复现。应该是 chrome的 aac解码器问题。
claude 3.7 sonnet 对此的解释:
AAC帧解码误差累积: AAC是一种有损压缩格式,其帧长度不固定,Chrome的
decodeAudioData
在处理这种可变帧长格式时可能会产生微小的时间戳舍入误差,随时间累积导致偏移
尝试通过周期性地重复一些frame来补齐长度。