Repository navigation
MiMo ASR Assistant v1.1.4 发布说明
2026-08-07 | 音频解码引擎切换版本
本说明逐条对照当前代码/diff 核验,不保留「代码未实现/已被替换但文档宣称已完成」的条目。
核心变更:改用精简 ffmpeg 实现音视频通吃,取代有限支持的 Rust 自实现
问题背景:此前音频解码依赖纯 Rust 自实现(symphonia + rubato + hound)做「输入容器 → 解码 → 重采样 → PCM」的逐采样管线。该方案对解码器支持面有限(仅覆盖部分常见编码),对扩展容器/编码组合常解析失败,且重采样等密集计算在纯 Rust 慢路径下性能受限。
本次变更:音频解码整体切换到捆绑的精简 ffmpeg.exe(FFmpeg 9.0 --disable-everything 精简构建)作为外部进程,实现音视频通吃:
- 输入通吃:WAV / MP3 / M4A / FLAC / AAC / OGG 等音频,以及 MP4 / MKV / MOV / AVI / FLV / TS 等视频容器——统一经 ffmpeg 提取音轨并转码为 16kHz / mono / 16bit WAV。
- 取代 Rust 自实现:symphonia / rubato 依赖移除(
Cargo.toml不再声明),原src-tauri/src/ffmpeg/mod.rs(纯 Rust 解码管线)删除,由src-tauri/src/ffmpeg_exe.rs接管。 - 纯 Rust WAV 切片保留:WAV 域切片/解析仍由
wav_codec(纯字节操作,零解码依赖)完成;WAV 文件走直接切片快路径,非 WAV 先经 ffmpeg 归一为 WAV。 - 完整性门禁:
resources/ffmpeg.exe与ffmpeg.exe.sha256入库,build.rs编译期 SHA-256 fail-closed 门禁 + 运行时FfmpegBin::resolve二次校验。 - 静默运行:ffmpeg 以
CREATE_NO_WINDOW后台运行,无黑窗口;stderr 独立线程抽干,主线程轮询try_wait+ 取消/超时检查,Windows 上用taskkill /T杀进程树。 - 无网络能力:精简构建禁用网络协议,转码全程本地,不上传任何数据。
注:v1.1.3 说明中「convert_to_wav 分段解码」「Channel buffer 8→4」等针对旧纯 Rust 解码管线(symphonia/rubato)的优化条目,已随解码整体迁移到捆绑 ffmpeg.exe 而移除,不再适用于当前代码。
其他更新
- Markdown 实时渲染修复(延续 v1.1.3 持续优化):转写/规整结果改为实时按内容判定渲染(
needsMarkdownParsing),修复「任务完成后 Markdown 仍原样显示」;流式输出时# 标题换行即渲染为标题、**加粗**即时生效。移除已无用的fileRenderMode/getRenderMode/resetRenderMode/finalizeRenderMode死代码。 - 导入后选中修复:导入文件后用新文件 UUID 选中(此前误用磁盘路径作
selectedFileId,导致工作区恒空);selectFile增加 ID 存在性校验。 - 滚动智能跟踪:滞回(deadband)双阈值,追踪中滚离底部超 60px 才关闭、回滚至 8px 内才重开,修复「跳转到底部」按钮滑动时闪烁。
- 提示词上下按钮:设置页上移/下移按钮宽度由 28px 缩窄为 17px(原宽度五分之三)。
- 精简诊断日志:移除逐 chunk 诊断日志,转写与规整不再刷屏;关键日志仍落盘。
- release 文档收纳:历史
RELEASE_v*.md统一移入release说明文档/目录,该目录加入.gitignore(不追踪)。
版本号
index.html, package.json, package-lock.json, Cargo.toml, Cargo.lock, tauri.conf.json → 1.1.4