端侧播客录音、转写与复盘工具。
把系统内录、麦克风录音、本地媒体和 URL 媒体转成可检索的播客笔记,并在隐私边界清晰的前提下生成摘要、标签、高光和单期问答。
Podcast Recap Local ASR 是一个 Android Kotlin + Jetpack Compose 应用骨架,面向“听播客、录播客、复盘内容”的本地优先工作流。
它把音频采集、端侧语音处理、会话持久化、AI 总结和导出组织成一条完整链路:
- 通过系统内录、麦克风、本地音视频文件或 URL 导入创建播客会话。
- 在本机完成音频切片、VAD、SenseVoice 转写和说话人分离标注。
- 只把转写文本、时间戳和说话人标签发送给 DeepSeek,用于摘要、标签、高光和问答。
- 将最终结果保存为结构化会话,可在详情页复制、追问或导出。
| 能力 | 当前状态 | 说明 |
|---|---|---|
| 播客会话管理 | 可用 | 新建、重命名、暂停、续录、完成、历史详情 |
| 音频来源 | 可用 | 系统内录、麦克风录音、本地音视频导入、URL 导入 |
| URL 导入 | 可用 | 支持小宇宙单集链接、直链媒体、RSS/XML enclosure |
| 端侧转写 | 已接入骨架 | SenseVoice sherpa-onnx 模型随 APK assets 安装到私有目录 |
| VAD | 已接入骨架 | Silero VAD assets 校验与状态展示 |
| 说话人分离 | 已接入骨架 | speaker segmentation / embedding assets 校验与标签展示 |
| AI 摘要 | 可用 | DeepSeek 生成概览、要点、行动项、开放问题、金句候选和时间线章节 |
| 单期问答 | 可用 | 基于当前会话内容追问,支持失败重试 |
| 导出 | 可用 | Markdown、TXT、JSON |
| 隐私提示 | 可用 | 首次启动隐私弹窗、设置页模型状态和 API Key 状态 |
当前仓库没有提交真实截图,README 不引用不存在的图片。核心界面包括:
- 首页:播客卡片、录音控制、导入入口、模型状态、处理阶段反馈。
- AI:选择已有播客后进入对话,围绕单期内容追问。
- 详情:转写、结构化摘要、标签、高光、问答历史、导出菜单。
- 设置:DeepSeek API Key、本地模型状态、VAD/说话人分离和摘要偏好。
flowchart LR
A["Audio sources<br/>Internal / Microphone / Local media / URL"] --> B["Capture & import<br/>AudioRecord / MediaProjection / MediaExtractor / OkHttp"]
B --> C["Local processing<br/>PCM chunking / VAD / SenseVoice ASR / Diarization"]
C --> D["Session repository<br/>Settings / Sessions / Segments / Summaries"]
D --> E["Compose UI<br/>Home / AI / History / Detail / Settings"]
D --> F["DeepSeek clients<br/>Summary / Tags / Highlights / QA"]
F --> D
D --> G["Export<br/>Markdown / TXT / JSON"]
app/src/main/java/com/example/blogrecording/
audio/ 音频采集、PCM 流、切片、重采样、静音检测
asr/ SenseVoice 识别与转写片段组装
common/ Result、错误模型、协程调度、日志
data/ 设置、会话、模型资产、JSON 编解码与恢复
diarization/ 说话人分离、标签与 profile 管理
export/ Markdown / TXT / JSON 导出
importing/ 本地媒体与 URL 媒体导入
qa/ 单期问答 prompt 与 DeepSeek 客户端
recording/ 分段录音控制器
security/ API Key 本地加密存储
service/ 前台录音服务与通知状态
summary/ 摘要、标签、高光、时间线章节
ui/ Compose 页面、状态映射与导航
vad/ VAD 模型与语音片段
- Android Gradle Plugin
9.0.1 - Kotlin
2.0.21 - Jetpack Compose + Material 3
- AndroidX DataStore Preferences
- Kotlin Coroutines
- OkHttp
- sherpa-onnx Android AAR
- SenseVoice / Silero VAD / speaker diarization ONNX assets
- DeepSeek Chat Completions API
- JUnit + AndroidX Instrumentation Test
- OpenSpec + GitHub Actions quality gate
- JDK 21
- Android SDK,compileSdk
36 - Windows PowerShell 或兼容 Gradle Wrapper 的终端
- 可用的 Android 设备或模拟器
- 如需 AI 摘要/问答,在 App 设置页填入 DeepSeek API Key
git clone https://github.com/zhitongliu061115-cpu/BlogRecording.git
cd BlogRecording
.\gradlew.bat testDebugUnitTest
.\gradlew.bat :app:assembleDebugDebug APK 输出位置:
app/build/outputs/apk/debug/app-debug.apk
.\gradlew.bat installDebug首次启动时,应用会把 APK assets 中的模型复制到 App 私有目录,并在设置页展示加载状态。
构建前必须存在真实模型和 AAR 文件。Gradle 已注册 verifyBundledModels,缺少或为空会导致 preBuild 失败,避免生成不可用 APK。
app/libs/sherpa-onnx-static-link-onnxruntime-1.13.2.aar
app/src/main/assets/models/sensevoice/model.int8.onnx
app/src/main/assets/models/sensevoice/tokens.txt
app/src/main/assets/models/vad/silero_vad.onnx
app/src/main/assets/models/diarization/segmentation.onnx
app/src/main/assets/models/diarization/embedding.onnx
资产管理建议:
- 私有仓库可使用 Git LFS 管理
.onnx与.aar。 - 公开仓库发布前,应确认第三方模型与 AAR 的许可证允许分发。
- 不要用空文件或占位文件绕过
verifyBundledModels。
这个项目按“音频本地处理,文本可选云端总结”设计。
| 数据类型 | 处理位置 | 说明 |
|---|---|---|
| 原始音频、PCM、音频片段 | 本机 | 不上传 |
| 声纹向量、speaker embedding | 本机 | 不上传 |
| API Key | 本机 | Android Keystore + AES/GCM 加密后保存 |
| 转写文本、时间戳、说话人标签 | 可发送给 DeepSeek | 仅用于摘要、标签、高光与问答 |
| 导出文件 | 用户选择的位置 | 支持保存或分享 |
常用本地检查:
git status --short
git diff --check
.\gradlew.bat testDebugUnitTest
.\gradlew.bat :app:assembleDebug完整 harness:
.\scripts\harness.ps1 -Change <openspec-change-id>有设备或模拟器时,可追加连接测试:
.\scripts\harness.ps1 -Change <openspec-change-id> -ConnectedAndroidTestGitHub Actions workflow 位于:
.github/workflows/change-quality-gate.yml
它会执行 OpenSpec validate、Gradle clean、Debug APK 构建、单元测试、Android lint,并上传 APK、测试报告、lint 报告和手动 QA 清单。
.
├── app/ Android App 模块
│ ├── libs/ sherpa-onnx AAR
│ └── src/
│ ├── main/ Kotlin 源码、Compose UI、Manifest、assets
│ ├── test/ JVM 单元测试
│ └── androidTest/ Android instrumentation tests
├── docs/ Git 与 SDD/Harness 规范
├── gradle/ Wrapper 与版本目录
├── openspec/ 规格驱动开发变更与 specs
├── scripts/harness.ps1 本地质量门禁脚本
├── build.gradle.kts
├── settings.gradle.kts
└── README.md
本仓库使用 OpenSpec 管理需求与变更。涉及功能、权限、网络、模型、存储或安全边界的修改,建议先创建或更新:
openspec/changes/<change-id>/
proposal.md
design.md
tasks.md
specs/
推荐提交前检查:
git status --short
git diff --check
git diff --stat
.\gradlew.bat testDebugUnitTest
.\gradlew.bat :app:assembleDebug提交前请确认:
- 不提交
local.properties、证书、Token、API Key 或个人路径。 - 不提交真实用户录音、转写文本、摘要内容或调试日志。
- 涉及行为变化时同步补充或更新测试。
- 涉及权限、网络、模型或密钥存储时,在 PR 中说明隐私和安全影响。
- 补充真实设备截图或 GIF,展示首页、AI 问答、详情导出流程。
- 完善 sherpa-onnx 原生识别链路的端到端验收记录。
- 扩展 URL 导入来源和失败提示。
- 强化长音频分片转写的恢复能力和进度展示。
- 为关键 Compose 流程补充更多 instrumentation tests。
本项目核心的端侧转写与复盘代码完全开源免费,并基于极度宽松的 MIT License 许可证分发。
我们秉持 Community over Code 的社区文化。这意味着: 您可以极其自由地使用、复制、修改、合并、出版发行、散布、再授权甚至贩售本软件及其副本。您唯一的义务是:在软件和软件的所有副本或主要部分中,都必须包含原有的版权声明和许可声明。
让每一次倾听都有回响——隐私归你,知识沉淀。
如果这个项目帮你把播客内容变成了更可用的知识资产,欢迎 star、提 issue 或按 OpenSpec 流程提交 PR。