项目需求文档 (PRD)
impress_asr_input_rust
1. 项目概述
1.1 项目名称
impress_asr_input_rust
1.2 项目定位
一款高性能、跨平台的桌面语音识别输入工具,采用纯 Rust 技术栈实现,提供低延迟的语音转文字体验。
1.3 核心价值主张
- 🚀 极速识别:1 秒内完成语音识别响应
- 🦀 纯 Rust 实现:高性能、内存安全、无外部依赖
- 🖥️ 全平台支持:Windows、Linux、macOS 统一体验
- 🎯 用户友好:完整的图形界面和系统托盘集成
2. 功能需求
2.1 核心功能
2.1.1 语音录制与识别
| 功能点 |
描述 |
优先级 |
| 一键录音 |
点击按钮即可开始/停止录音 |
P0 |
| 实时波形显示 |
录音时显示音频波形可视化 |
P1 |
| 自动识别 |
录音停止后自动触发识别 |
P0 |
| 识别结果显示 |
实时展示识别出的文字 |
P0 |
| 结果复制 |
一键复制识别结果到剪贴板 |
P1 |
| 历史记录 |
保存识别历史记录 |
P2 |
2.1.2 音频文件识别
| 功能点 |
描述 |
优先级 |
| 文件选择 |
支持拖拽和文件选择器导入音频 |
P0 |
| 格式支持 |
支持 WAV、MP3、FLAC、OGG 等格式 |
P0 |
| 批量处理 |
支持批量导入多个音频文件 |
P2 |
| 进度显示 |
显示识别进度和预计剩余时间 |
P1 |
| 导出结果 |
支持导出为 TXT、SRT 字幕格式 |
P1 |
2.1.3 配置管理
| 功能点 |
描述 |
优先级 |
| 模型选择 |
选择/切换 ONNX 语音识别模型 |
P0 |
| 语言设置 |
设置识别语言(中文、英文等) |
P0 |
| 麦克风选择 |
选择输入音频设备 |
P0 |
| 快捷键配置 |
自定义全局快捷键 |
P1 |
| 主题设置 |
深色/浅色主题切换 |
P2 |
2.2 系统托盘功能
| 功能点 |
描述 |
优先级 |
| 托盘图标 |
显示应用状态图标 |
P0 |
| 快速菜单 |
右键菜单提供常用功能 |
P0 |
| 状态指示 |
显示录音/识别状态 |
P1 |
| 全局快捷键 |
后台监听录音快捷键 |
P1 |
3. 技术架构
3.1 技术栈选型
┌─────────────────────────────────────────────────────────────┐
│ 用户界面层 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Tauri v2 + React/TypeScript │ │
│ │ (或纯 Rust: Iced/Slint) │ │
│ └─────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ 应用逻辑层 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Rust 业务逻辑层 │ │
│ │ - 状态管理 - 配置管理 - 任务调度 │ │
│ └─────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ 核心服务层 │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 音频服务 │ │ 识别服务 │ │ 系统服务 │ │
│ │ cpal/rodio │ │ ort/onnxruntime │ tray/icon │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ 模型层 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ ONNX 模型 (SenseVoice/FunASR 等) │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
3.2 核心依赖清单
| 类别 |
Crate |
用途 |
| UI 框架 |
tauri v2 |
跨平台桌面应用框架 |
| UI 框架 (备选) |
iced / slint |
纯 Rust GUI 方案 |
| 音频输入 |
cpal |
跨平台音频输入/输出 |
| 音频解码 |
rodio |
音频文件解码播放 |
| 音频处理 |
hound |
WAV 文件读写 |
| ONNX 推理 |
ort / onnxruntime |
ONNX 模型推理引擎 |
| 张量处理 |
ndarray |
多维数组运算 |
| 系统托盘 |
tauri-plugin-tray |
系统托盘支持 |
| 快捷键 |
global-hotkey |
全局快捷键监听 |
| 配置管理 |
serde + toml |
配置文件序列化 |
| 日志 |
tracing + tracing-subscriber |
结构化日志 |
| 异步运行时 |
tokio |
异步任务执行 |
3.3 推荐的 ONNX 模型
| 模型 |
语言支持 |
大小 |
特点 |
| SenseVoice |
中/英/日/韩 |
~100MB |
阿里达摩院,高精度,支持情感识别 |
| FunASR Paraformer |
中/英 |
~60MB |
阿里,流式识别,低延迟 |
| Whisper (ONNX 版) |
多语言 |
~40MB-1GB |
OpenAI,多语言支持好 |
推荐首选: SenseVoice Small 版本,在速度和精度间取得良好平衡
4. 性能要求
4.1 延迟指标
| 场景 |
目标 |
可接受上限 |
| 录音启动延迟 |
< 100ms |
< 200ms |
| 识别响应延迟 (5 秒音频) |
< 500ms |
< 1s |
| 识别响应延迟 (30 秒音频) |
< 2s |
< 5s |
| 界面响应帧率 |
60 FPS |
> 30 FPS |
| 应用启动时间 |
< 2s |
< 5s |
4.2 资源占用
| 指标 |
空闲状态 |
录音状态 |
识别状态 |
| 内存占用 |
< 100MB |
< 150MB |
< 500MB |
| CPU 占用 |
< 1% |
< 5% |
< 30% |
4.3 优化策略
- 模型量化: 使用 INT8 量化模型减少推理时间
- 模型预加载: 应用启动时预加载模型到内存
- 流式识别: 支持边录音边识别,减少等待时间
- 音频分片: 长音频分段并行处理
- GPU 加速: 支持 CUDA/DirectML 后端加速
5. 用户界面设计
5.1 页面结构
┌─────────────────────────────────────────────────────────┐
│ impress_asr_input_rust □ ○ × │
├─────────────────────────────────────────────────────────┤
│ ┌─────────┬─────────────────────────────────────────┐ │
│ │ │ │ │
│ │ 侧边 │ 主内容区域 │ │
│ │ 导航 │ │ │
│ │ │ ┌─────────────────────────────────┐ │ │
│ │ 🎙️ │ │ │ │ │
│ │ 录音 │ │ 录音/识别测试 │ │ │
│ │ │ │ │ │ │
│ │ 📁 │ └─────────────────────────────────┘ │ │
│ │ 文件 │ │ │
│ │ │ │ │
│ │ ⚙️ │ │ │
│ │ 设置 │ │ │
│ │ │ │ │
│ └─────────┴─────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
5.2 录音识别测试页面
┌─────────────────────────────────────────────────────────┐
│ 录音识别测试 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────┐ │
│ │ ╭────╮ │ │
│ │ ╱ ╲ 波形可视化 │ │
│ │ │ ▓▓ │ ~~~~~~~~~ │ │
│ │ ╲ ╱ │ │
│ │ ╰────╯ │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ 🎤 录音 │ │ ⏹ 停止 │ │
│ └──────────┘ └──────────┘ │
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 识别结果: │ │
│ │ ┌─────────────────────────────────────────────┐ │ │
│ │ │ 这里是识别出的文字内容... │ │ │
│ │ │ │ │ │
│ │ └─────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ [📋 复制] [🗑️ 清除] [💾 保存] │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 状态:就绪 | 时长:00:00 | 模型:SenseVoice-ZH │
└─────────────────────────────────────────────────────────┘
5.3 文件识别转文字页面
┌─────────────────────────────────────────────────────────┐
│ 文件识别转文字 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 📁 拖拽音频文件到此处,或点击选择文件 │ │
│ │ 支持:WAV, MP3, FLAC, OGG, M4A │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 文件列表: │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 📄 meeting_20240115.wav 待处理 [开始] │ │
│ │ 📄 voice_note_001.mp3 ✓ 已完成 [查看] │ │
│ │ 📄 interview.flac 处理中 50% [取消] │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ [批量开始] [批量导出] [清空列表] │
│ │
└─────────────────────────────────────────────────────────┘
5.4 功能配置页面
┌─────────────────────────────────────────────────────────┐
│ 设置 │
├─────────────────────────────────────────────────────────┤
│ │
│ ── 识别模型 ─────────────────────────────────────── │
│ 模型选择:[SenseVoice Small ▼] [下载更多模型] │
│ 识别语言:[中文普通话 ▼] │
│ 使用 GPU 加速:☐ 启用 │
│ │
│ ── 音频输入 ─────────────────────────────────────── │
│ 麦克风:[Built-in Microphone ▼] │
│ 采样率:[16000 Hz ▼] │
│ 声道:[单声道 ▼] │
│ │
│ ── 快捷键 ───────────────────────────────────────── │
│ 开始/停止录音:[Ctrl+Shift+R] [修改] │
│ 快速复制结果:[Ctrl+Shift+C] [修改] │
│ 显示/隐藏窗口:[Ctrl+Shift+H] [修改] │
│ │
│ ── 外观 ─────────────────────────────────────────── │
│ 主题:[深色 ▼] │
│ 语言:[简体中文 ▼] │
│ │
│ ── 其他 ─────────────────────────────────────────── │
│ 开机自启:☐ │
│ 自动检查更新:☑ │
│ 保存识别历史:☑ 保留天数:[30] 天 │
│ │
│ [保存设置] [重置默认] │
└─────────────────────────────────────────────────────────┘
5.5 系统托盘菜单
╭────────────────────────────────────╮
│ 🎤 开始录音 │
│ ───────────────────────────────── │
│ 📂 打开文件识别... │
│ 📋 复制上次结果 │
│ 📜 查看历史记录 │
│ ───────────────────────────────── │
│ ⚙️ 设置 │
│ ❌ 退出 │
╰────────────────────────────────────╯
6. 项目结构
impress_asr_input_rust/
├── Cargo.toml
├── README.md
├── PRD.md
├── .gitignore
├── ├──
├── src/
│ ├── main.rs # 应用入口
│ ├── lib.rs # 库导出
│ ├──
│ ├── app/ # Tauri 应用层
│ │ ├── mod.rs
│ │ ├── main.rs # Tauri 主程序
│ │ ├── commands.rs # Tauri 命令处理
│ │ └── state.rs # 应用状态管理
│ │
│ ├── audio/ # 音频处理模块
│ │ ├── mod.rs
│ │ ├── capture.rs # 音频捕获
│ │ ├── decoder.rs # 音频解码
│ │ ├── processor.rs # 音频预处理
│ │ └── resampler.rs # 音频重采样
│ │
│ ├── asr/ # 语音识别核心
│ │ ├── mod.rs
│ │ ├── engine.rs # 识别引擎
│ │ ├── model.rs # ONNX 模型加载
│ │ ├── decoder.rs # 识别结果解码
│ │ └── stream.rs # 流式识别
│ │
│ ├── ui/ # UI 组件 (如使用 Iced)
│ │ ├── mod.rs
│ │ ├── views/
│ │ │ ├── mod.rs
│ │ │ ├── record.rs # 录音页面
│ │ │ ├── file.rs # 文件识别页面
│ │ │ └── settings.rs # 设置页面
│ │ ├── components/
│ │ │ ├── mod.rs
│ │ │ ├── waveform.rs # 波形组件
│ │ │ └── player.rs # 播放器组件
│ │ └── theme.rs # 主题样式
│ │
│ ├── config/ # 配置管理
│ │ ├── mod.rs
│ │ ├── settings.rs # 设置结构
│ │ └── manager.rs # 配置管理器
│ │
│ ├── tray/ # 系统托盘
│ │ ├── mod.rs
│ │ └── handler.rs # 托盘事件处理
│ │
│ └── utils/ # 工具函数
│ ├── mod.rs
│ ├── logger.rs # 日志工具
│ └── hotkey.rs # 快捷键处理
│
├── models/ # ONNX 模型目录
│ └── sensevoice-small.onnx
│
├── web/ # Tauri 前端 (如使用 Tauri)
│ ├── package.json
│ ├── vite.config.ts
│ ├── index.html
│ └── src/
│ ├── main.tsx
│ ├── App.tsx
│ ├── pages/
│ │ ├── Record.tsx
│ │ ├── FileConvert.tsx
│ │ └── Settings.tsx
│ └── components/
│
└── resources/
├── icons/
│ ├── icon.ico
│ ├── icon.png
│ └── tray-icon.png
├── locales/
│ ├── zh-CN.ftl
│ └── en-US.ftl
└── configs/
└── default.toml
7. 开发里程碑
Phase 1: 基础框架 (2 周)
Phase 2: 音频核心 (2 周)
Phase 3: ASR 集成 (2 周)
Phase 4: 功能完善 (2 周)
Phase 5: 优化与发布 (1 周)
8. 交付物
8.1 软件交付
- Windows:
.msi / .exe 安装程序
- macOS:
.dmg / .app 安装包
- Linux:
.deb / .rpm / AppImage
8.2 代码交付
- 完整的源代码 (GitHub 仓库)
- Cargo 文档 (
cargo doc)
- 开发者文档
8.3 用户文档
- README.md (使用指南)
- 用户手册
- FAQ
9. 风险与缓解
| 风险 |
影响 |
概率 |
缓解措施 |
| ONNX 模型推理速度慢 |
高 |
中 |
模型量化、GPU 加速、选择更轻量模型 |
| 跨平台音频 API 兼容性 |
中 |
中 |
充分测试各平台,使用成熟的 cpal 库 |
| Tauri v2 稳定性 |
中 |
低 |
准备 Iced 备选方案 |
| 模型文件过大 |
低 |
高 |
首次启动下载,提供多个模型尺寸选择 |
10. 成功标准
技术指标
用户体验指标
工程指标
附录
A. 参考项目
B. 相关 Rust 项目
C. 版本历史
| 版本 |
日期 |
描述 |
| v0.1 |
2026-05-20 |
初始 PRD 版本 |
文档创建:2026-05-20
项目状态:规划阶段