Echo Loop 离线能力与音频引擎架构:just_audio、本地解码与 TTS/Kokoro/Piper 合成机制一览
【免费下载链接】Echo-LoopEcho Loop 是一款科学、高效的 AI 英语听说训练 App,通过精听、跟读、盲听、复述和间隔复习,自动驱动学习者把每一段音频真正练懂、练熟、练到会说。项目地址: https://gitcode.com/echo-loop/Echo-Loop
Echo Loop 是一款 AI 英语听说训练 App,内置完整的离线能力与音频引擎架构:基于 just_audio 的锁屏级播放控制、iOS/Android 原生本地音频解码,以及 Kokoro、Piper 双本地 TTS 引擎。本文将带你完整看懂它的播放引擎、本地解码桥接和语音合成三大核心机制。
🎧 音频引擎:just_audio + audio_service 的组合拳
Echo Loop 的播放层由三层组成,职责清晰、互不越界:
| 层级 | 文件 | 职责 |
|---|---|---|
| 全局后台控制器 | background_audio_handler.dart | 系统媒体会话、锁屏/通知栏状态、耳机控制的唯一入口 |
| 业务门面 | audio_engine_provider.dart | 业务层统一调用入口,隔离"旁路驱动" |
| 底层播放器 | just_audioAudioPlayer | 真正的解码与播放(见 pubspec.yaml) |
几个值得一提的工程细节:
- 锁屏进度条"全曲对齐":分段播放(如盲听按段落播放)时,锁屏进度会按全曲时长 + 绝对位置广播,避免每切一段进度就归零;
- 句间停顿保活:学习任务的停顿倒计时期间,通过循环播放打包的静音轨 silence_2s.m4a 保持 iOS 音频会话活跃,让后台倒计时照常推进,同时"进度冻结"上报
speed=0,锁屏图标仍显示"播放中"; - 会话隔离:每个学习流程持有独立 session id,讲解页等外来组件不会打断你正在练习的音频。
📦 本地音频解码:原生桥接拿到原始 PCM
字幕自动校准、静音检测等功能需要"听得见"音频波形,而 just_audio 只负责播放、不吐波形数据。Echo Loop 的解法是通过top.echo-loop/audio_decodeMethodChannel 调用平台原生解码:
- iOS / macOS:走 AVFoundation;
- Android:走 MediaExtractor + MediaCodec;
- 统一返回归一化单声道 Float32 PCM(1000 Hz 采样率),不支持的平台优雅降级返回 null。
核心实现在 native_audio_decoder.dart,配套的解码集成测试位于 native_audio_decoder_integration_test.dart。
🗣️ TTS 三引擎:系统 TTS、Piper、Kokoro 各管一档
所有合成语音都走同一条统一管线:文本 → 缓存查询 → 未命中则本地合成产文件 → 入库缓存 → 播放文件。管线的防竞态、优先级调度逻辑集中在 tts_coordinator.dart,用户主动发音的任务恒优先于后台预热任务。
三个引擎分别对应不同诉求:
1️⃣ 平台 TTS(系统引擎)——零下载、实时兜底
platform_tts_engine.dart 基于 flutter_tts,合成近实时;macOS 还特意自建原生通道top.echo-loop/tts_synth修复了 flutter_tts 漏设音色的问题。当本地引擎合成失败时,它会以实时朗读方式优雅降级,保证"永远有声音"。
2️⃣ Piper——速度档
piper_tts_engine.dart 使用本地 VITS 模型,实测 RTF≈0.1~0.3(比实时快 3~10 倍)。每个音色对应独立模型文件,由 piper_model_manager.dart 管理下载,并发试听不同音色互不串扰。
3️⃣ Kokoro 82M——质量档
kokoro_tts_engine.dart 通过 sherpa-onnx 在纯 CPU 上推理,发音自然度更高但 RTF≈3(长例句可达 20~30 秒),因此推理线程数按设备核心数分档(8 核以上给 6 线程),并把合成超时上限放到 90 秒,避免误杀长句。模型由 kokoro_model_manager.dart 负责下载与路径解析。
合成产物统一进入本地缓存(tts_cache_store.dart),同一句例句第二次发音就是"秒出"。
🧩 为什么这套架构对学习者友好
- 全程离线可用:本地解码 + 本地 TTS + 离线 ASR 模型,地铁、飞机上照常精听跟读;
- 低延迟与稳定性:TTS 结果文件化缓存 + 优先级调度,点发音即播;
- 锁屏即教室:后台保活 + 锁屏上一句/下一句切换,通勤路上也能完成整段练习。
📁 核心模块速查
- 音频引擎:lib/providers/audio_engine/
- 后台播放控制器:lib/services/background_audio_handler.dart
- 原生解码桥接:lib/services/native_audio_decoder.dart
- TTS 全套实现:lib/services/tts/
- 视频/媒体支持说明:docs/video-support.md
【免费下载链接】Echo-LoopEcho Loop 是一款科学、高效的 AI 英语听说训练 App,通过精听、跟读、盲听、复述和间隔复习,自动驱动学习者把每一段音频真正练懂、练熟、练到会说。项目地址: https://gitcode.com/echo-loop/Echo-Loop
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考