我开发了一款名为Earleaf的Android有声书播放器,这是我的第一个Android项目。其中技术最有趣的部分是名为"页面同步"的功能:你拍下实体书的一页,应用就能在音频中定位到对应位置。

匹配流程分两个阶段。首先,使用Vosk语音识别在设备端对有声书进行转写,生成按词索引的数据,存储在FTS4中(10小时的书约7.2万个词)。拍照时,ML Kit通过OCR提取文字,我再用FTS4前缀查询找到候选位置。然后通过滑动窗口结合莱文斯坦相似度评分,缩小范围至最佳匹配。整个搜索过程耗时100-500毫秒。

最棘手的bug出现在音频重采样环节。Vosk需要16kHz采样率,但大多数有声书是44.1kHz。这个比例是无理数,因此每个块的舍入误差累积会导致12小时的书出现约30秒的时间戳漂移。解决方法是不再对每个块单独舍入,而是全局跟踪累计帧数。

如果有人感兴趣,我写了关于这个流程的详细技术文章:https://earleaf.app/blog/a-deep-dive-into-page-sync

欢迎在Google Play上查看这款应用:https://play.google.com/store/apps/details?id=app.earleaf