diff --git a/docs/research/asr-options.html b/docs/research/asr-options.html
new file mode 100644
index 0000000..e35cd99
--- /dev/null
+++ b/docs/research/asr-options.html
@@ -0,0 +1,986 @@
+
+
+
+
+
+
+ ASR 方案深度调研:高识别率中文语音输入选型
+
+
+
+
+
+ASR
+方案深度调研:高识别率中文语音输入选型
+
+- 调研日期:2026-10-04(文中价格与版本均为当日抓取,引用前请复核)
+- 问题:为 Tauri 2 + React/TypeScript
+互动叙事应用(网页端 +
+iOS/Android,中国大陆用户,中文长段口语讲述)选择高识别率语音输入方案,替换当前效果不佳的
+Web Speech API
+- 方法:所有关键结论均追溯至一手来源(官方文档、官方定价页、API
+reference、源码仓库、W3C/平台文档),URL
+随文标注;博客与二手转述仅作线索,不作结论依据
+- 产品约束(来自 ADR-0004 与本产品定位):
+
+- 场景是几十秒到几分钟的长段中文口语讲述,容忍 2–5
+秒转写延迟,整段上传可接受;
+- 音频"即焚"——服务端转写后不留原始音频,只保留文本与不可逆的韵律统计特征(语速/停顿/音高/能量),绝不存声纹;
+- 中国大陆合规运营,用户为大陆高知人群,境外 API
+的可用性与数据出境需评估;
+- 需要韵律特征提取能力(ASR 附带或旁路);
+- 成本敏感(早期产品,日活几百量级)。
+
+
+
+0. 执行摘要
+一句话结论:统一走"端上录音 → 上传自有服务端 → 服务端转写 +
+服务端韵律提取 →
+音频即焚"的管线;转写首选国内云厂商的录音文件识别(阿里云 NLS
+或火山引擎豆包大模型版,0.8–2.5 元/小时量级),自托管 SenseVoiceSmall
+作为降级与成本兜底;Web Speech API
+降级为可选的"零上传"体验而非主通路。
+推荐组合:
+
+
+
+| 端 |
+推荐方案 |
+理由 |
+
+
+
+
+| 网页端(桌面浏览器) |
+MediaRecorder 录音上传服务端为主;SpeechRecognition
+仅作为"音频不出本机"的可选模式保留 |
+Chrome 的 Web Speech 后端是 Google 云端服务(见
+1.1),大陆网络下质量/可用性不可控;Safari 支持但有 Siri
+依赖与场景限制 |
+
+
+| Tauri iOS |
+getUserMedia + MediaRecorder 录音(iOS 14.3+ WKWebView
+支持),上传自有服务端 |
+Web Speech 在 WKWebView 中不可用(WebKit 官方确认,见
+3.1);SFSpeechRecognizer 有 1
+分钟硬限制与每日限额,不适合几分钟的讲述(见 3.1) |
+
+
+| Tauri Android |
+同上(WebView 需处理 onPermissionRequest) |
+Android SpeechRecognizer
+默认实现"很可能把音频流送到远端服务器",且大陆 ROM 无 GMS
+时行为不可控(AOSP 源码注释,见 3.2) |
+
+
+| 服务端 |
+现有 AsrProvider 可插拔接口接入:首选阿里云 NLS
+录音文件识别(SpeechIO 中文榜 CER
+3.40%,国内可用性最稳)或火山豆包录音文件识别模型 2.0(0.8
+元/小时);并行跑 parselmouth + FFmpeg 韵律提取 |
+见第 2、5 节;韵律旁路与"即焚"纪律完全兼容 |
+
+
+| 降级/兜底 |
+自托管 SenseVoiceSmall(FunASR 或 llama.cpp
+单机二进制):中文识别优于 Whisper,自带情感/笑声/叹息等事件标签,CPU
+可跑 |
+见 4.1;云端不可用时顶上,也把单价打到近零 |
+
+
+
+成本量级(按 300 DAU、人均 4 分钟/日估算,约 600
+转写小时/月):国内云约 480–1,500 元/月;自托管
+SenseVoiceSmall 一台 4–8 核 CPU 服务器即可承载(推算过程见 4.5)。境外
+API 同等量级约 1,700–2,600
+元/月且存在可用性与数据出境问题,不推荐作为主通路。
+本调研中最反直觉的三个事实:
+
+- Chrome 的"免费"语音识别本质是把麦克风音频流上传到
+
google.com/speech-api 的未公开服务——Chromium
+源码的网络流量注解明确标注数据类型为 USER_CONTENT、目的地
+GOOGLE_OWNED_SERVICE(源码)。大陆用户走这条通路,效果差是网络问题而非模型问题。
+- Web Speech API 在 WKWebView 里根本不存在——即所有
+iOS 上的"浏览器"(Chrome iOS、微信内置浏览器)和 Tauri iOS
+应用都无法使用;WebKit 工程师在官方 bug
+跟踪中确认"SFSafariViewController 与主屏 Web App 均不可用"(WebKit Bug
+225298)。
+- iOS 原生 SFSpeechRecognizer 对单次识别有 1
+分钟硬限制,且"语音识别是基于网络的服务",每个设备/每个应用都有每日限额(Apple
+官方文档)——哪怕写原生插件也接不住"几分钟的叙事讲述"。
+
+
+1. 网页端现状与浏览器侧方案
+1.1 Web
+Speech API(SpeechRecognition)支持矩阵与后端真相
+Web Speech API 是 W3C 社区组草案(非正式标准),规范见 Web Speech API Editor's
+Draft;caniuse 数据标记其状态为 unoff(非标准)(caniuse speech-recognition
+数据)。2026-10 的支持矩阵:
+
+
+
+| 平台 |
+支持情况 |
+关键限制 |
+
+
+
+
+| Chrome 桌面(Win/macOS/Linux/ChromeOS) |
+✅ 自 Chrome 25(前缀 webkit),部分属性缺失 |
+后端是 Google 云端服务(下详);必须联网 |
+
+
+| Edge 桌面 |
+⚠️ caniuse 标记为"不支持(#3)":API 存在但事件不触发(caniuse 注记 3) |
+实际 Chromium 系 Edge 多数场景可用,但 caniuse
+记录存在例外报告,需实测 |
+
+
+| Safari 桌面(macOS 11.3+/Safari 14.1+) |
+⚠️ 前缀、部分支持 |
+需系统开启 Siri 或听写;SpeechGrammar 不支持 |
+
+
+| iOS Safari(14.5+) |
+⚠️ 前缀、部分支持 |
+SFSafariViewController、主屏 PWA 均不可用;需开启
+Siri(WebKit
+Bug 225298,WebKit 工程师 Sihui Liu 确认) |
+
+
+| Tauri iOS(WKWebView) |
+❌ 不可用 |
+同上,WKWebView 不在暴露范围内 |
+
+
+| Android Chrome |
+✅ |
+依赖 Google 服务,大陆环境不可用 |
+
+
+| Firefox 桌面 |
+❌ 从未发布 |
+仅有 media.webspeech.recognition.enable
+实验开关,官方称"权限问题未解决"(caniuse 注记 2) |
+
+
+
+Chrome 的识别后端:Chromium 源码
+network_speech_recognition_engine_impl.cc 写死服务地址
+https://www.google.com/speech-api/full-duplex/v1,其网络流量注解原文:"Chrome
+provides translation from speech audio recorded with a microphone to
+text, by using the Google speech recognition web service. Audio
+is sent to Google's servers (upstream) and text is returned
+(downstream)",数据类别 USER_CONTENT,目的地
+GOOGLE_OWNED_SERVICE,最近复核日期 2024-02-21(Chromium
+源码)。即:免费、无 SLA、未对第三方开放、音频出境。Chromium
+源码树中另有 soda_speech_recognition_engine_impl.cc(Speech
+On-Device API),但桌面 Chrome 的 Web Speech
+路径走网络引擎;ChromeOS/Android 上 SODA 才用于本地听写。
+Safari 的后端:Apple 官方未公开,社区一致认为是
+Apple 的语音识别服务(与系统听写同源),证据是官方文档要求"Siri
+或听写开启"及 supportsOnDeviceRecognition 属性(Apple
+文档)。
+对本产品的含义:当前
+src/ui/VoiceInput.tsx 通路 1(SpeechRecognition)在桌面
+Chrome 上把音频直送
+Google,大陆用户体验取决于网络;这解释了"效果差"。该通路可作为隐私卖点保留(用户可选"零上传"模式),但不应是主通路。
+1.2 浏览器本地推理(WASM)现状
+
+
+
+| 方案 |
+官方数据 |
+官方 Demo |
+结论 |
+
+
+
+
+| whisper.cpp WASM |
+现代 CPU 浏览器上 tiny/base 模型约 2–3 倍实时(60
+秒音频约 20–30 秒);最大只支持到 small 模型;音频上限 120
+秒;tiny 模型 74MB(官方
+README) |
+ggml.ai/whisper.cpp |
+tiny/base 的中文 CER 达不到"高识别率"要求;small
+级在浏览器里延迟不可接受。仅适合离线兜底 |
+
+
+| sherpa-onnx WASM |
+官方提供 WebAssembly 构建与 Colab 教程;HuggingFace 上有官方 Spaces
+demo:英语 Zipformer、中英 Zipformer、中英 Paraformer、中英粤
+Paraformer(官方文档) |
+HuggingFace Spaces(文档内链接) |
+中文流式模型在浏览器可行,但模型下载量大(百 MB
+级)、无官方中文准确率基准;适合作为技术储备 |
+
+
+| onnxruntime-web |
+支持 webgl/webgpu/webnn
+执行后端 + WASM CPU;官方定位浏览器端 ML 推理(官方教程) |
+官方 examples 仓库 |
+推理框架本身成熟,但"在浏览器跑 large-v3 级中文模型"没有官方
+benchmark;WebGPU 在 Safari 上长期缺席,覆盖率仍是问题 |
+
+
+
+结论:浏览器本地推理对"几分钟中文口语 +
+高识别率"的组合不达标——能跑动的模型(tiny/base)中文识别率不够,识别率够的模型(large-v3
+1.5GB+)下载与延迟都过不了产品关。WebGPU/WebNN 加速仍在推进,2026
+年不具备全量用户覆盖条件。不推荐作为主通路。
+
+2. 云端中文 ASR API 横向对比
+2.1
+中文普通话识别率:第三方基准
+厂商宣传口径("准确率 98%"类)不可横向比较,本调研以 SpeechColab
+维护的 SpeechIO Leaderboard 为第三方基准:46
+组中文真实场景测试集(新闻联播、访谈、播客、演讲、直播、相声、方言电影等,由专业标注团队转写),2025.01
+结果(SpeechIO
+Leaderboard):
+
+
+
+| 排名 |
+引擎 |
+公开集 CER(ZH00001–26) |
+全量 CER(含未公开集) |
+
+
+
+
+| 1 |
+Azure Batch(微软) |
+1.95% |
+2.99% |
+
+
+| 2 |
+喜马拉雅 API |
+1.72% |
+3.35% |
+
+
+| 3 |
+阿里云录音文件识别 |
+1.80% |
+3.40% |
+
+
+| 4 |
+讯飞语音转写(lfasr) |
+3.01% |
+4.80% |
+
+
+| 5 |
+腾讯云 |
+3.20% |
+4.64% |
+
+
+| 6 |
+思必驰 |
+3.61% |
+5.75% |
+
+
+| 7 |
+百度(极速版) |
+7.30% |
+10.10% |
+
+
+
+与本产品场景最贴近的是播客/访谈/演讲类子集(如"故事FM"播客
+4.5h、"鲁豫有约"访谈 3h):各引擎在这些口语集上的 CER 大致落在 2%–6%
+区间(逐测试集结果)。注意:榜单未覆盖火山引擎(字节),且自
+2025 年起各厂相继发布"大模型版"识别(见
+2.2),榜单数字可能已偏保守——建议选型时用我们自己的讲述样本做一次小规模盲测。
+阿里云官方的 SenseVoice 论文(阿里通义)报告 SenseVoice-Small 在
+AISHELL-1/AISHELL-2/WenetSpeech 等中文集上识别率优于 Whisper-Small(arXiv:2407.04051,SenseVoice README
+基准图),可作开源侧参照。
+2.2 逐家详述
+价格均为 2026-10-04 官方页面抓取。换算基准:1 小时 = 60 分钟。
+阿里云 NLS(智能语音交互)
+
+- 产品线:实时语音识别(流式)、一句话识别(≤60s/次)、录音文件识别(异步,提交+轮询)、录音文件识别极速版、录音文件识别闲时版;另有百炼平台的
+FunASR/Paraformer 模型 API。
+- 价格(官方计费文档):
+
+- 录音文件识别按量 2.50 元/小时(日用量
+0–299h),阶梯最低 1.00 元/小时(5000h+/日);资源包 1000 小时 1200
+元(合 1.20 元/小时)、20000 小时 20000 元(合 1.00 元/小时)
+- 录音文件识别闲时版(24h 内返回)1.00 元/小时,10
+万小时以上 0.60 元/小时
+- 录音文件识别极速版 3.30 元/小时起
+- 实时语音识别 3.50 元/小时起
+- 百炼 Paraformer 语音识别 0.288
+元/小时(不限量,大模型平台定价)
+
+- 能力:录音文件识别支持音频 ≤512MB、总时长 ≤12h 的
+URL 提交(API
+文档);支持说话人分离(
auto_split/speaker_num
+参数,FAQ);带词级时间戳;可返回
+JSON 逐句结果。
+- 免费额度:新用户 3 个月试用(2 路并发或每天 2
+小时录音文件识别额度)(快速入门)。
+- 合规:境内服务,可签署数据处理协议;audio
+即焚纪律可由服务端实现(转写结果落库、音频不落盘)。
+
+火山引擎(字节跳动,豆包语音)
+
+- 产品线:豆包录音文件识别模型
+2.0(大模型版)、录音文件识别标准版/极速版/闲时版、豆包流式语音识别模型
+2.0、大模型流式语音识别。
+- 价格(官方计费文档、计费概述):
+
+- 豆包录音文件识别模型 2.0:后付费 0.8
+元/小时;资源包 30 小时 23 元(约 0.77)、10000 小时 7200
+元(合 0.72)、300000 小时合 0.67 元/小时
+- 豆包流式语音识别模型 2.0:后付费 1 元/小时
+- 传统录音文件识别标准版:后付费 1.8 元/小时(0–300h)起;闲时版 1.2
+元/小时后付费、资源包低至 0.5 元/小时
+
+- 能力:标准版/极速版/闲时版均为"提交 + 查询"异步(接入必读);大模型版
+ASR 支持多语种、热词;新应用有免费试用额度。
+- 备注:SpeechIO
+榜单未收录火山,中文口语实测数据缺第三方验证——但字节系(抖音语音输入)的中文口语工程能力属于第一梯队,且单价最低档。
+
+腾讯云 ASR
+
+- 产品线:实时语音识别、录音文件识别(异步)、录音文件识别极速版(同步,100MB/2h
+内音频)、大模型 2.0
+版、语音流异步识别;增值:情绪识别、角色分离、口语转书面语。
+- 价格(官方计费概述、极速版文档):
+
+- 录音文件识别后付费 1.75 元/小时(0–12
+万小时/月);资源包 60 小时 90 元(1.5)、1000 小时 1200 元(1.2)
+- 录音文件识别(大模型 2.0 版):后付费 0.8 元/小时,资源包低至 0.72
+元/小时
+- 录音文件识别极速版:3.10 元/小时起
+- 情绪识别增值服务:后付费 0.85 元/小时(与 ASR
+叠加计费)——直接提供"情绪"维度的云侧输出,但注意它是离散情绪类别而非韵律连续特征
+
+- 免费额度(长期):录音文件识别 10 小时/月、实时 5
+小时/月、一句话识别 5000 次/月。
+- 榜单:SpeechIO 全量 CER 4.64%(2025.01)。
+
+讯飞开放平台(iFLYTEK)
+
+- 产品线:语音听写(≤60s/次,实时)、语音转写
+lfasr(≤5 小时/文件、≤500MB,异步)、实时语音转写。
+- 价格(语音转写产品页,含价格表;会员试用页):
+
+- 免费包:个人 5 小时/年、企业开发者 50 小时/年
+- 按时长套餐:80 小时/年 198 元(约 2.48 元/小时)、2000 小时/年 4000
+元(2.0)、10000 小时 17500 元(1.75)、300000 小时 360000
+元(1.2)
+- 语音听写套餐:20 万次/年 1000 元、100 万次/年 4000 元
+
+- 能力:中文方言是讯飞传统强项(202
+种方言免切识别,部分需另购);lfasr 支持批量、时间戳(lfasr API
+文档)。
+- 榜单:SpeechIO 全量 CER 4.80%(2025.01)。
+
+百度智能云
+
+- 价格(官方价格文档):音频文件转写后付费
+2 元/小时;小时包 1000 小时 1200 元(1.2
+元/小时)起;短语音识别按次(后付费 3.4 元/千次起);实时语音识别 3
+元/小时后付费、1.8 元/小时(1000h 包)。
+- 免费额度:10
+万次短语音识别/企业账号(产品页)。
+- 榜单:SpeechIO 全量 CER
+10.10%(2025.01,明显落后)——不推荐作为主通路。
+
+OpenAI(GPT-4o transcribe 等)
+
+- 价格(官方定价页):
gpt-4o-transcribe
+$0.006/分钟(约 2.16
+元/小时);gpt-4o-mini-transcribe
+$0.003/分钟;gpt-transcribe $0.0045/分钟;实时转写
+$0.017/分钟。注意:whisper-1 已不再出现在当前定价页。
+- 可用性:api.openai.com
+在大陆不可直连,需中转;数据出境 +
+《个人信息保护法》下的合规评估义务;无境内实体可签
+DPA。结论:不适合作为面向大陆用户的主通路;可作为开发期对照基准。
+
+Groq(Whisper 托管)
+
+- 价格(官方文档):
whisper-large-v3
+$0.111/小时(约 0.80
+元/小时)、whisper-large-v3-turbo $0.04/小时(约 0.29
+元/小时);单次最低计费 10 秒;文件上限 25MB(免费层)/100MB;官方自报
+WER 10.3%(large-v3)/12%(turbo,测试集未注明,按英文基准理解)。
+- 可用性:不对中国大陆提供服务、需境外支付;同上的出境合规问题。单价最低但综合不可用。
+
+Deepgram
+
+- 价格(官方定价页):Nova-3 Monolingual
+$0.0048/分钟(促销价,原价 $0.0077);Nova-3 Multilingual 0.0058/分钟;200
+免费额度。多语种版支持中文在内的 45+ 语种、含说话人分离。
+- 折合约 1.7–4.0 元/小时;境外服务,可用性与合规同上。
+
+AssemblyAI
+
+- 价格(官方定价页):Universal-2
+$0.15/小时(99 语种)、Universal-3.5 Pro $0.21/小时(18
+语种)。折 1.1–1.5 元/小时;境外服务。
+
+2.3
+横向对比表(录音文件转写,中文普通话)
+
+
+
+| 厂商 |
+后付费单价 |
+资源包低价 |
+免费额度 |
+第三方中文 CER(SpeechIO 2025.01) |
+单文件上限 |
+时间戳/说话人 |
+境内合规 |
+情绪/韵律附加 |
+
+
+
+
+| 阿里云 NLS |
+2.50 元/h |
+1.00 元/h(2 万 h 包) |
+3 个月试用 |
+3.40%(#3) |
+512MB/12h |
+词级时间戳;说话人分离(FAQ) |
+✅ |
+—(百炼另有模型) |
+
+
+| 火山引擎豆包 |
+0.80 元/h(大模型 2.0) |
+0.67 元/h |
+新应用试用额度 |
+未收录 |
+异步队列 |
+视版本 |
+✅ |
+— |
+
+
+| 腾讯云 |
+1.75 元/h;大模型 2.0 版 0.8 元/h |
+0.72 元/h |
+10 h/月 |
+4.64% |
+极速版 100MB/2h |
+支持 |
+✅ |
+情绪识别增值 0.85 元/h、角色分离 |
+
+
+| 讯飞 |
+约 2.0–2.48 元/h(套餐) |
+1.2 元/h(30 万 h 包) |
+企业 50 h/年 |
+4.80% |
+500MB/5h |
+时间戳 |
+✅ |
+方言最强(202 种) |
+
+
+| 百度 |
+2.00 元/h |
+1.2 元/h(1000h 包) |
+10 万次短语音 |
+10.10% |
+— |
+支持 |
+✅ |
+— |
+
+
+| OpenAI gpt-4o-transcribe |
+≈2.16 元/h |
+— |
+— |
+英文强,中文无第三方基准 |
+25MB |
+word 级 |
+❌ 数据出境 |
+❌ |
+
+
+| Groq whisper-large-v3 |
+≈0.80 元/h |
+— |
+有限免费层 |
+自报 WER 10.3%(英文) |
+25/100MB |
+segment/word |
+❌ |
+❌ |
+
+
+| Deepgram Nova-3 |
+≈1.7–4.0 元/h |
+$200 额度 |
+同上 |
+中文支持,无第三方基准 |
+— |
+含说话人分离 |
+❌ |
+Audio Intelligence(情感/意图) |
+
+
+| AssemblyAI |
+≈1.1–1.5 元/h |
+— |
+— |
+中文含于 99 语种 |
+— |
+含 |
+❌ |
+情感分析 |
+
+
+
+读表结论:
+
+- 境内四家(阿里/火山/腾讯/讯飞)在可用性、合规、单价三个维度全面优于境外四家;百度的识别率在第三方基准上掉队。
+- 阿里云是"识别率 × 工程成熟度"的最稳选择;火山大模型版是"单价最低 ×
+大厂背书"的高性价比选择;腾讯云附带唯一的云侧情绪识别增值,但韵律连续特征仍需旁路。
+- 境外 API
+只在一种情况下有意义:开发期做对照基准,或未来出海版本复用同一
+
AsrProvider 接口。
+
+2.4 数据合规要点
+
+- 语音含声纹,声纹属于生物识别信息,《个人信息保护法》第二十八条将其列为敏感个人信息,处理需"特定的目的和充分的必要性,并采取严格保护措施"(官方全文,CAC
+发布)。ADR-0004
+的"特征提取后即焚、不留声纹"正是对这一条款的架构级响应。
+- 向境外 API
+传输语音还触发第三章"个人信息跨境提供"的额外义务(安全评估/标准合同等),早期产品不值得为此付出合规成本。
+- 境内云厂商(阿里/腾讯/字节/讯飞/百度)均提供数据处理协议与"不用于模型训练"的默认承诺,需要在开通服务时确认并留存协议文本(各厂商控制台可签,本调研未逐家抓取协议原文,列为待办)。
+
+
+3. Tauri iOS/Android 原生通路
+3.1 iOS:SFSpeechRecognizer
+能力与边界
+Apple 官方文档(SFSpeechRecognizer,DocC
+数据)明确:
+
+- "Plan for a one-minute limit on audio
+duration":框架会停止超过一分钟的识别任务——对本产品"几十秒到几分钟"的讲述场景是硬伤(可通过分段重启缓解,但体验与准确率都受损)。
+- "speech recognition is a network-based
+service":按设备/按应用有每日识别限额,失败需引导用户稍后重试;部分语言必须联网。
+supportsOnDeviceRecognition(iOS 13+):仅部分 locale
+支持完全离线;中文是否支持离线取决于系统版本与设备,不可作为承诺。
+- 权限:需在 Info.plist 声明
+
NSSpeechRecognitionUsageDescription 与
+NSMicrophoneUsageDescription,运行时弹窗授权。
+- 文档还直接建议"Do not perform speech recognition on private
+or sensitive information"——Apple
+自己不建议把敏感语音送往其识别服务,这与本产品"个人经历讲述"的内容属性冲突。
+
+Web 侧能不能直接用:不能。WebKit 工程师在官方 bug
+跟踪中确认 SpeechRecognition API 在 SFSafariViewController 与主屏 Web
+App(PWA)中不可用(WebKit Bug
+225298);Tauri iOS 使用 WKWebView,属同一未暴露范围。
+如果非要原生插件:Tauri 2 插件可包含 Swift
+Package(官方插件开发文档),写一个
+SFSpeechRecognizer 插件工作量约数百行 Swift,但 1
+分钟限制与每日限额使其不适合做主通路。
+3.2
+Android:SpeechRecognizer 能力与边界
+AOSP 源码 SpeechRecognizer.java 的类注释(源码)原文:
+
+"The implementation of this API is likely to stream audio to
+remote servers to perform speech recognition. As such this API
+is not intended to be used for continuous
+recognition..."
+
+
+- 即:默认实现(Google 的 RecognitionService)是云端识别;大陆发行版
+ROM(无 GMS)往往没有可用的默认识别服务,行为不可控。
+createOnDeviceSpeechRecognizer()(API 33+)存在,但
+isOnDeviceRecognitionAvailable()
+取决于厂商配置,中文离线包是否可用因设备而异。
+- WebView 内
getUserMedia 需要宿主应用处理
+WebChromeClient.onPermissionRequest
+授权麦克风,否则默认拒绝(Android 官方 WebChromeClient 文档)。
+- Android 11+ 查询识别服务需在 manifest 加
+
<queries> 块(同上源码注释)。
+
+3.3 Tauri 2
+插件机制与社区现状
+
+- Tauri 2 官方插件机制:插件 = Cargo crate + 可选 NPM 包 + 可选
+Android 库工程(Kotlin/Java)与 iOS Swift
+Package;
npx @tauri-apps/cli plugin new --android --ios
+一键生成模板(官方插件开发文档)。
+- 社区已有现成 STT 插件:tauri-plugin-stt(MIT)——桌面端用
+whisper.cpp(whisper-rs,Metal/CUDA/Vulkan
+可选),移动端直接委托 OS 引擎(iOS SFSpeechRecognizer
+/ Android SpeechRecognizer)。它恰好印证了 3.1/3.2 的结论:移动端的 OS
+引擎路线会继承 1
+分钟限制与云端依赖。该插件代码可作为自写插件的模板,但不建议直接采用其移动端路径。
+- 官方插件仓库(plugins-workspace)暂无 speech
+插件;生态单薄,自写插件需自维护。
+
+
+
+- WKWebView 支持 getUserMedia 的起点是 iOS
+14.3:WebKit 官方博客原文"navigator.mediaDevices.getUserMedia
+can now be exposed to WKWebView applications... automatically
+exposed if the embedding application is able to natively capture either
+audio or video"(WebKit Blog:
+MediaRecorder API);此前是长期 bug(WebKit Bug
+208667)。WWDC21 亦确认"WKWebView supports getUserMedia from iOS
+14.3"(WWDCNotes:
+Explore WKWebView additions)。
+- MediaRecorder 支持矩阵:macOS Safari 14.1+、iOS Safari
+14.5+、Android Chrome、桌面 Chrome/Firefox 全绿,全局支持率 96.21%(caniuse
+mediarecorder)。
+- 坑清单(对 Tauri 落地):
+
+- iOS 需 Info.plist 加
+
NSMicrophoneUsageDescription;Tauri 侧确认 WKWebView
+配置允许媒体捕获(Tauri 默认配置通常已满足,需实测);
+- Safari 系产出的录音是
audio/mp4(AAC),不是
+webm/Opus;Android Chrome 产
+audio/webm;codecs=opus——服务端必须用 FFmpeg 统一转码(16kHz
+mono PCM)后再送 ASR;
+- Android WebView 偶发
NotReadableError(Fragment
+化生态的已知问题),需重试与降级提示;
+- 录音必须通过用户手势启动(iOS 平台要求)。
+
+
+本节结论:Tauri 手机端的正确通路是 Web 层
+getUserMedia + MediaRecorder 录音 →
+上传自有服务端,与网页端完全共用代码与服务端管线;原生 STT
+插件只在"未来要做离线模式"时才值得投入。
+
+4. 自托管开源模型
+4.1 SenseVoice(阿里
+FunAudioLLM,重点推荐)
+
+- 能力:单模型输出 ASR + 语种识别(中/粤/英/日/韩)+
+情感识别(HAPPY/SAD/ANGRY/NEUTRAL/FEARFUL/DISGUSTED/SURPRISED
+七类)+
+音频事件检测(BGM/掌声/笑声/哭声/咳嗽/喷嚏/呼吸等,其中"笑声/呼吸/哭泣"正是
+ADR-0004 要的副语言信号);带逆文本归一化(ITN,标点数字规范化)(README,论文
+arXiv:2407.04051)。
+- 速度与部署:非自回归端到端架构,同参数量下推理比
+Whisper-Small 快 5 倍以上、比 Whisper-Large 快 15 倍以上(README 基准);提供
+FunASR Python 服务、FastAPI 容器、llama.cpp GGUF
+单机二进制(内置 FSMN-VAD,无需 Python,runtime 说明,GGUF
+权重);官方明确"中文与粤语识别优于 Whisper"(同 README
+基准图)。
+- 端侧:sherpa-onnx
+官方支持 SenseVoice,可跑 iOS/Android/Raspberry
+Pi,十种语言绑定——给"未来端侧离线"留了路。
+- 许可:代码 MIT;权重采用 FunASR
+模型开源许可,官方澄清允许商用(需遵守署名与模型命名要求)(许可说明)。上线前请律师过一遍
+MODEL_LICENSE 文本。
+- 局限:单次推理上限约 30 秒音频,长音频必须 VAD
+切分(README 提供 FSMN-VAD 组合方案与无 VAD
+的定长滑窗脚本);情感/事件标签的效度数据来自作者自测基准,缺第三方复现。
+
+
+非自回归工业级中文 ASR(FunASR 生态默认中文模型),SenseVoice
+的同门前辈;阿里云百炼把它作为 API 出售(0.288 元/小时,见
+2.2),模型本身在 ModelScope 开源(模型页)。长音频需配
+VAD。若自托管,优先考虑
+SenseVoiceSmall(同生态、多情感事件输出、更快)。
+4.3 Whisper
+large-v3 / faster-whisper / whisper.cpp
+
+- 中文长口语表现:Whisper
+是通用多语模型,中文并非其最优语种;SpeechIO 中文榜未收录
+Whisper(跑分成本高),阿里 SenseVoice 基准显示其中文识别优于
+Whisper-Small/Large(SenseVoice
+README)。社区共识的额外问题:长静音/低质量音频下的幻觉(编造文本)风险,需要通过
+VAD 与 no_speech 阈值压制。
+- faster-whisper(CTranslate2):同精度下比官方
+openai/whisper 快 4 倍;官方基准——large-v2 在 RTX 3070 Ti 上转写 13
+分钟音频 fp16 1m03s(约 12 倍实时)、int8 batch=8 仅 16s;small 模型纯
+CPU(i7-12700K)int8 batch=8 为 51s(约 15 倍实时)(README 基准)。GPU
+仅需 cuBLAS/cuDNN,无需 FFmpeg(PyAV 内置)。
+- whisper.cpp:纯 C/C++,内存占用 tiny 273MB / base
+388MB / small 852MB / medium 2.1GB / large 3.9GB(README
+内存表);Apple Silicon 有 Metal/Core ML(encoder 走 ANE 比纯 CPU 快
+3 倍以上);官方 iOS/Android/WASM 示例;内置 Silero-VAD 支持。
+- 定位:若自托管,Whisper
+系适合"多语种混杂"场景;纯中文叙事场景,SenseVoiceSmall 是更优解。
+
+4.4 sherpa-onnx 端侧部署
+k2-fsa/sherpa-onnx:ONNX
+Runtime 驱动的离线 ASR,支持 Zipformer/Paraformer/SenseVoice/Whisper
+等模型,覆盖 iOS/Android/树莓派/桌面,WASM 版见 1.2。移动端"录音 +
+端侧转写 + 只上传文本"的极端隐私模式可以用它实现,代价是 App
+包体增加数百 MB(模型文件)——建议作为二期选项。
+4.5 自托管成本估算(与 2.3
+对照)
+量级假设:300 DAU × 4 分钟/日 ≈ 600
+转写小时/月。
+
+- 云端:火山豆包大模型 0.8 元/h → 约 480
+元/月;阿里云按量 2.5 元/h → 约 1500 元/月;阿里云 1000h 资源包
+→ 约 720 元/月;讯飞套餐二 → 约 1200 元/月。
+- 自托管:SenseVoiceSmall 官方口径比 Whisper-Small 快
+5 倍以上;即便保守按"Whisper-Small 级 CPU 吞吐 ~15 倍实时"(faster-whisper CPU
+基准)打五折算,单核也能做到约 7 倍实时 → 600 小时音频约需 86
+核·小时/月,一台 4 核 CPU
+云主机(约百元/月量级)富富有余。GPU
+都不需要。(此为推算,非官方基准;落地前用真实样本实测 RTF。)
+- 结论:几百 DAU
+阶段两者都便宜;云的隐性成本是接入与对账工作量,自托管的隐性成本是运维。推荐云为主、自托管为兜底,
AsrProvider
+接口切换成本很低。
+
+
+5. 韵律特征旁路
+需求回顾(ADR-0004):语速、停顿分布、音高变化范围、能量、填充词频率、情绪唤醒度、笑/叹息等副语言信号;存储为不可逆统计向量,不含声纹。
+5.1 端上提取(Web Audio API /
+原生)
+
+- 能量/RMS/过零率:Web Audio
+
AnalyserNode(原生 API,W3C Web Audio
+规范)+ meyda(JS
+音频特征库,支持 Web Audio 实时提取)。
+- 音高(F0):CREPE(MIT
+许可的深度学习音高模型,有 ONNX 导出与 TF.js
+生态,第三方项目确认其许可与权重来源);纯算法可用
+YIN/自相关自行实现。
+- 优点:原始音频不出端,"即焚"在最强意义上成立;零服务端算力。
+- 缺点:浏览器/WebView 间数值一致性需自行校准;移动端
+WebView
+后台节流;音高提取对录音质量敏感;与转写文本的时间对齐需要自己维护。适合做粗粒度能量/语速,音高等精细特征建议服务端做。
+
+5.2 服务端提取
+
+- parselmouth:Praat
+的 C/C++ 算法原封不动暴露给 Python(
to_pitch()
+自相关法、to_intensity()
+等),音高/强度/共振峰的学术标准实现。许可
+GPLv3+——服务端内部使用不构成"分发",通常可接受,上线前法务确认。
+- FFmpeg 滤镜:官方滤镜文档确认
silencedetect(静音段检测→停顿分布)、ebur128(响度/能量,BS.1770)、astats(统计特征)——零额外依赖即可拿到能量与停顿;音高仍需
+parselmouth/CREPE 类工具。
+- openSMILE(GeMAPS/eGeMAPS
+特征集,语音情感研究标准工具):注意许可陷阱——开源版"不允许用于任何类型的商业产品",商用需购买
+audEERING 商业许可(README
+许可段)。本产品应直接避开。
+- ASR 附带的免费午餐:SenseVoiceSmall
+的情感标签与事件标签(笑声/哭泣/呼吸/咳嗽)可直接映射 ADR-0004
+的"情绪唤醒度、笑/叹息"字段;腾讯云情绪识别增值(0.85
+元/h)是云侧替代(腾讯计费)。二者都是离散标签,不能替代连续的音高/能量统计。
+
+5.3 与"即焚"纪律的兼容设计
+
+- 服务端接收音频后全程内存处理:解码(FFmpeg 管道)→
+分支 A 送 ASR、分支 B 送韵律提取 → 汇总(文本 + 统计向量)→
+释放缓冲,任何环节不落盘(含临时文件用
+
tmpfs/内存管道)。
+- 特征只存聚合统计量(均值/方差/分位数/时长比),不存音高轮廓原始序列——音高随时间的曲线具有个体可辨识性,聚合后即不可逆。
+- 转写文本与特征的关联通过讲述事件 ID,音频本身无
+ID、无日志留存。
+- 拒绝任何"声纹/说话人身份"类输出:说话人分离(diarization)与声纹识别(speaker
+verification)在本产品是明确禁区——注意阿里/腾讯的说话人分离参数不要开启(单用户讲述场景本来也不需要)。
+
+
+6. 推荐架构
+6.1 总体:一条管线,两个端复用
+[网页端 / Tauri iOS / Tauri Android]
+ │ getUserMedia + MediaRecorder(用户手势启动)
+ │ 录音 blob(webm/opus 或 mp4/aac,视平台)
+ ▼
+[自有服务端 Hono] POST /api/asr(沿用现有路由与 AsrProvider 接口)
+ │ ① FFmpeg 转码:16kHz mono PCM(全程内存管道)
+ ├─②a ASR 分支:AsrProvider.transcribe()
+ │ 主:阿里云 NLS 录音文件识别 / 火山豆包大模型(可配置切换)
+ │ 备:自托管 SenseVoiceSmall(FunASR / llama.cpp)
+ ├─②b 韵律分支:FFmpeg silencedetect + ebur128(停顿/能量)
+ │ + parselmouth(音高统计)[+ SenseVoice 情感/事件标签]
+ │ ③ 结果聚合 → { transcript, prosody_stats, emo_tags }
+ │ ④ 音频缓冲立即释放(即焚);结果按 ADR-0004 落库
+ ▼
+[可编辑文本框回填](沿用 VoiceInput 的"确认后才提交"UX)
+6.2 网页端
+
+- 主通路:MediaRecorder 录音 → 上传(现有通路 2
+代码基本不动,换真实 provider)。
+- 可选"零上传"模式:保留
+
SpeechRecognition 通路作为隐私偏好选项,UI
+上明确标注"识别由浏览器/系统提供";桌面 Chrome(网络允许时)与 Safari
+可用。主线不再依赖它。
+- 保留纯文本兜底(现状已正确)。
+
+6.3 Tauri 手机端
+
+- 不引原生 STT 插件;iOS/Android 都走
+
getUserMedia+MediaRecorder 录音上传(WKWebView iOS 14.3+
+已支持 getUserMedia,WebKit
+Blog)。
+- 权限配置:iOS
NSMicrophoneUsageDescription;Android
+RECORD_AUDIO + WebView 的 onPermissionRequest
+处理(Tauri 默认 WebView 配置需实测验证一次)。
+- 服务端兼容
audio/mp4(Safari/WKWebView 产物)与
+audio/webm(Android/Chrome 产物)双格式,统一转码。
+- 二期可选:sherpa-onnx 端侧 SenseVoice 离线模式(包体换隐私)。
+
+6.4 服务端接入要点
+
+server/src/asr/provider.ts 的 AsrProvider
+接口无需改动,新增两个实现:AliyunFileAsrProvider、VolcanoFileAsrProvider,外加
+SenseVoiceProvider(HTTP 调本地 FunASR 服务或 llama.cpp
+server)。路由层加一个 provider 选择的环境变量即可。
+- 阿里云为异步(提交+轮询),对产品"容忍 2–5
+秒延迟"完全够用(转写通常秒级返回;闲时版保证 24h
+内,不可用为主力);火山大模型版同为 submit/query。
+- 韵律分支与 ASR 分支并行(Promise.all),超时与降级互不影响。
+- 即焚实现:流式处理 + 不落盘 +
+单元测试断言"处理后磁盘无音频文件"。
+
+
+7. 风险与开放问题
+
+- 厂商"用客户音频训练"条款:各家默认承诺不一(尤其免费额度阶段),开通时须逐家确认数据处理协议并留存;免费档通常允许改进模型,付费/企业档可关闭——需要商务确认(待办,未在本次调研逐家抓取协议原文)。
+- 榜单时效:SpeechIO 数据为
+2025.01,火山缺席、各厂"大模型版"未覆盖;必须用自有讲述样本(情感化口语、随意语法)做一次
+4 家盲测再最终定主 provider(建议样本 ≥30 分钟)。
+- Web Speech 国内实测:Chrome 走 Google
+服务的实际可达性与识别质量需在我们目标网络环境实测;Safari
+桌面端"零上传"模式需验证 Siri 未开启时的失败提示文案。
+- Tauri Android 麦克风授权链:WebView
+
onPermissionRequest 在 Tauri 2 的默认实现是否直通 Android
+运行时权限,需要真机验证(华为/小米/OPPO 各一)。
+- SenseVoice
+情感标签效度:七类情感与"情绪唤醒度"的映射关系需要心理学顾问校准;笑/叹息事件可先从
+AED 标签直接采用。
+- 方言/口音:默认"普通话 +
+轻度口音"假设;重度方言用户(粤语等)在讯飞上体验最好,可作为后期
+provider 策略维度(讯飞免费企业包 50h/年可作补充通道)。
+- 成本临界点:DAU 涨到数千时,自托管比重上升(云约
+0.7–2.5 元/h vs 自托管接近电费);
AsrProvider
+抽象保证切换成本可控。
+- openSMILE 许可:开源版禁商用,已排除;若未来需要
+GeMAPS 标准特征集,要么买商业许可,要么用 parselmouth 复现核心
+LLD。
+- 即焚的审计:建议加一条服务端日志规范——只记录"转写时长、耗时、特征维度数"等元数据,绝不记录音频哈希之外的可回放标识。
+- iOS 录音中断:来电/锁屏导致的 MediaRecorder
+停止需前端兜底(现状 onstop 已处理 blob 收尾,验证中断时 blob
+完整性即可)。
+
+
+附录:来源清单(按章节)
+浏览器侧
+
+云端 ASR
+
+Tauri 移动端
+
+自托管开源模型
+
+韵律特征
+
+
+
diff --git a/docs/research/asr-options.md b/docs/research/asr-options.md
new file mode 100644
index 0000000..27c81f5
--- /dev/null
+++ b/docs/research/asr-options.md
@@ -0,0 +1,412 @@
+# ASR 方案深度调研:高识别率中文语音输入选型
+
+- **调研日期**:2026-10-04(文中价格与版本均为当日抓取,引用前请复核)
+- **问题**:为 Tauri 2 + React/TypeScript 互动叙事应用(网页端 + iOS/Android,中国大陆用户,中文长段口语讲述)选择高识别率语音输入方案,替换当前效果不佳的 Web Speech API
+- **方法**:所有关键结论均追溯至一手来源(官方文档、官方定价页、API reference、源码仓库、W3C/平台文档),URL 随文标注;博客与二手转述仅作线索,不作结论依据
+- **产品约束**(来自 ADR-0004 与本产品定位):
+ 1. 场景是几十秒到几分钟的**长段中文口语讲述**,容忍 2–5 秒转写延迟,整段上传可接受;
+ 2. **音频"即焚"**——服务端转写后不留原始音频,只保留文本与不可逆的韵律统计特征(语速/停顿/音高/能量),绝不存声纹;
+ 3. 中国大陆合规运营,用户为大陆高知人群,境外 API 的可用性与数据出境需评估;
+ 4. 需要**韵律特征提取**能力(ASR 附带或旁路);
+ 5. 成本敏感(早期产品,日活几百量级)。
+
+---
+
+## 0. 执行摘要
+
+**一句话结论:统一走"端上录音 → 上传自有服务端 → 服务端转写 + 服务端韵律提取 → 音频即焚"的管线;转写首选国内云厂商的录音文件识别(阿里云 NLS 或火山引擎豆包大模型版,0.8–2.5 元/小时量级),自托管 SenseVoiceSmall 作为降级与成本兜底;Web Speech API 降级为可选的"零上传"体验而非主通路。**
+
+推荐组合:
+
+| 端 | 推荐方案 | 理由 |
+|---|---|---|
+| 网页端(桌面浏览器) | MediaRecorder 录音上传服务端为主;`SpeechRecognition` 仅作为"音频不出本机"的可选模式保留 | Chrome 的 Web Speech 后端是 Google 云端服务(见 1.1),大陆网络下质量/可用性不可控;Safari 支持但有 Siri 依赖与场景限制 |
+| Tauri iOS | `getUserMedia` + MediaRecorder 录音(iOS 14.3+ WKWebView 支持),上传自有服务端 | Web Speech 在 WKWebView 中不可用(WebKit 官方确认,见 3.1);SFSpeechRecognizer 有 1 分钟硬限制与每日限额,不适合几分钟的讲述(见 3.1) |
+| Tauri Android | 同上(WebView 需处理 `onPermissionRequest`) | Android SpeechRecognizer 默认实现"很可能把音频流送到远端服务器",且大陆 ROM 无 GMS 时行为不可控(AOSP 源码注释,见 3.2) |
+| 服务端 | 现有 `AsrProvider` 可插拔接口接入:首选阿里云 NLS 录音文件识别(SpeechIO 中文榜 CER 3.40%,国内可用性最稳)或火山豆包录音文件识别模型 2.0(0.8 元/小时);并行跑 parselmouth + FFmpeg 韵律提取 | 见第 2、5 节;韵律旁路与"即焚"纪律完全兼容 |
+| 降级/兜底 | 自托管 SenseVoiceSmall(FunASR 或 llama.cpp 单机二进制):中文识别优于 Whisper,自带情感/笑声/叹息等事件标签,CPU 可跑 | 见 4.1;云端不可用时顶上,也把单价打到近零 |
+
+成本量级(按 300 DAU、人均 4 分钟/日估算,约 600 转写小时/月):国内云约 **480–1,500 元/月**;自托管 SenseVoiceSmall 一台 4–8 核 CPU 服务器即可承载(推算过程见 4.5)。境外 API 同等量级约 1,700–2,600 元/月且存在可用性与数据出境问题,不推荐作为主通路。
+
+本调研中最反直觉的三个事实:
+
+1. **Chrome 的"免费"语音识别本质是把麦克风音频流上传到 `google.com/speech-api` 的未公开服务**——Chromium 源码的网络流量注解明确标注数据类型为 `USER_CONTENT`、目的地 `GOOGLE_OWNED_SERVICE`([源码](https://github.com/chromium/chromium/blob/main/content/browser/speech/network_speech_recognition_engine_impl.cc))。大陆用户走这条通路,效果差是网络问题而非模型问题。
+2. **Web Speech API 在 WKWebView 里根本不存在**——即所有 iOS 上的"浏览器"(Chrome iOS、微信内置浏览器)和 Tauri iOS 应用都无法使用;WebKit 工程师在官方 bug 跟踪中确认"SFSafariViewController 与主屏 Web App 均不可用"([WebKit Bug 225298](https://bugs.webkit.org/show_bug.cgi?id=225298))。
+3. **iOS 原生 SFSpeechRecognizer 对单次识别有 1 分钟硬限制**,且"语音识别是基于网络的服务",每个设备/每个应用都有每日限额([Apple 官方文档](https://developer.apple.com/documentation/speech/sfspeechrecognizer))——哪怕写原生插件也接不住"几分钟的叙事讲述"。
+
+---
+
+## 1. 网页端现状与浏览器侧方案
+
+### 1.1 Web Speech API(SpeechRecognition)支持矩阵与后端真相
+
+Web Speech API 是 W3C 社区组草案(非正式标准),规范见 [Web Speech API Editor's Draft](https://w3c.github.io/speech-api/);caniuse 数据标记其状态为 `unoff`(非标准)([caniuse speech-recognition 数据](https://caniuse.com/speech-recognition))。2026-10 的支持矩阵:
+
+| 平台 | 支持情况 | 关键限制 |
+|---|---|---|
+| Chrome 桌面(Win/macOS/Linux/ChromeOS) | ✅ 自 Chrome 25(前缀 `webkit`),部分属性缺失 | **后端是 Google 云端服务**(下详);必须联网 |
+| Edge 桌面 | ⚠️ caniuse 标记为"不支持(#3)":API 存在但事件不触发([caniuse 注记 3](https://caniuse.com/speech-recognition)) | 实际 Chromium 系 Edge 多数场景可用,但 caniuse 记录存在例外报告,需实测 |
+| Safari 桌面(macOS 11.3+/Safari 14.1+) | ⚠️ 前缀、部分支持 | 需系统开启 Siri 或听写;`SpeechGrammar` 不支持 |
+| iOS Safari(14.5+) | ⚠️ 前缀、部分支持 | **SFSafariViewController、主屏 PWA 均不可用**;需开启 Siri([WebKit Bug 225298](https://bugs.webkit.org/show_bug.cgi?id=225298),WebKit 工程师 Sihui Liu 确认) |
+| **Tauri iOS(WKWebView)** | ❌ 不可用 | 同上,WKWebView 不在暴露范围内 |
+| Android Chrome | ✅ | 依赖 Google 服务,大陆环境不可用 |
+| Firefox 桌面 | ❌ 从未发布 | 仅有 `media.webspeech.recognition.enable` 实验开关,官方称"权限问题未解决"([caniuse 注记 2](https://caniuse.com/speech-recognition)) |
+
+**Chrome 的识别后端**:Chromium 源码 `network_speech_recognition_engine_impl.cc` 写死服务地址 `https://www.google.com/speech-api/full-duplex/v1`,其网络流量注解原文:"Chrome provides translation from speech audio recorded with a microphone to text, **by using the Google speech recognition web service. Audio is sent to Google's servers** (upstream) and text is returned (downstream)",数据类别 `USER_CONTENT`,目的地 `GOOGLE_OWNED_SERVICE`,最近复核日期 2024-02-21([Chromium 源码](https://github.com/chromium/chromium/blob/main/content/browser/speech/network_speech_recognition_engine_impl.cc))。即:免费、无 SLA、未对第三方开放、音频出境。Chromium 源码树中另有 `soda_speech_recognition_engine_impl.cc`(Speech On-Device API),但桌面 Chrome 的 Web Speech 路径走网络引擎;ChromeOS/Android 上 SODA 才用于本地听写。
+
+**Safari 的后端**:Apple 官方未公开,社区一致认为是 Apple 的语音识别服务(与系统听写同源),证据是官方文档要求"Siri 或听写开启"及 `supportsOnDeviceRecognition` 属性([Apple 文档](https://developer.apple.com/documentation/speech/sfspeechrecognizer))。
+
+**对本产品的含义**:当前 `src/ui/VoiceInput.tsx` 通路 1(SpeechRecognition)在桌面 Chrome 上把音频直送 Google,大陆用户体验取决于网络;这解释了"效果差"。该通路可作为**隐私卖点保留**(用户可选"零上传"模式),但不应是主通路。
+
+### 1.2 浏览器本地推理(WASM)现状
+
+| 方案 | 官方数据 | 官方 Demo | 结论 |
+|---|---|---|---|
+| **whisper.cpp WASM** | 现代 CPU 浏览器上 tiny/base 模型约 **2–3 倍实时**(60 秒音频约 20–30 秒);最大只支持到 `small` 模型;音频上限 120 秒;tiny 模型 74MB([官方 README](https://github.com/ggml-org/whisper.cpp/tree/master/examples/whisper.wasm)) | [ggml.ai/whisper.cpp](https://ggml.ai/whisper.cpp/) | tiny/base 的中文 CER 达不到"高识别率"要求;small 级在浏览器里延迟不可接受。仅适合离线兜底 |
+| **sherpa-onnx WASM** | 官方提供 WebAssembly 构建与 Colab 教程;HuggingFace 上有官方 Spaces demo:英语 Zipformer、**中英 Zipformer、中英 Paraformer、中英粤 Paraformer**([官方文档](https://k2-fsa.github.io/sherpa/onnx/wasm/index.html)) | HuggingFace Spaces([文档内链接](https://k2-fsa.github.io/sherpa/onnx/wasm/index.html)) | 中文流式模型在浏览器可行,但模型下载量大(百 MB 级)、无官方中文准确率基准;适合作为技术储备 |
+| **onnxruntime-web** | 支持 `webgl`/`webgpu`/`webnn` 执行后端 + WASM CPU;官方定位浏览器端 ML 推理([官方教程](https://onnxruntime.ai/docs/tutorials/web/)) | 官方 examples 仓库 | 推理框架本身成熟,但"在浏览器跑 large-v3 级中文模型"没有官方 benchmark;WebGPU 在 Safari 上长期缺席,覆盖率仍是问题 |
+
+**结论**:浏览器本地推理对"几分钟中文口语 + 高识别率"的组合**不达标**——能跑动的模型(tiny/base)中文识别率不够,识别率够的模型(large-v3 1.5GB+)下载与延迟都过不了产品关。WebGPU/WebNN 加速仍在推进,2026 年不具备全量用户覆盖条件。不推荐作为主通路。
+
+---
+
+## 2. 云端中文 ASR API 横向对比
+
+### 2.1 中文普通话识别率:第三方基准
+
+厂商宣传口径("准确率 98%"类)不可横向比较,本调研以 SpeechColab 维护的 **SpeechIO Leaderboard** 为第三方基准:46 组中文真实场景测试集(新闻联播、访谈、播客、演讲、直播、相声、方言电影等,由专业标注团队转写),2025.01 结果([SpeechIO Leaderboard](https://github.com/SpeechColab/Leaderboard)):
+
+| 排名 | 引擎 | 公开集 CER(ZH00001–26) | 全量 CER(含未公开集) |
+|---|---|---|---|
+| 1 | Azure Batch(微软) | 1.95% | 2.99% |
+| 2 | 喜马拉雅 API | 1.72% | 3.35% |
+| 3 | **阿里云录音文件识别** | **1.80%** | **3.40%** |
+| 4 | 讯飞语音转写(lfasr) | 3.01% | 4.80% |
+| 5 | 腾讯云 | 3.20% | 4.64% |
+| 6 | 思必驰 | 3.61% | 5.75% |
+| 7 | 百度(极速版) | 7.30% | 10.10% |
+
+与本产品场景最贴近的是**播客/访谈/演讲类**子集(如"故事FM"播客 4.5h、"鲁豫有约"访谈 3h):各引擎在这些口语集上的 CER 大致落在 2%–6% 区间([逐测试集结果](https://github.com/SpeechColab/Leaderboard))。注意:榜单未覆盖火山引擎(字节),且自 2025 年起各厂相继发布"大模型版"识别(见 2.2),榜单数字可能已偏保守——建议选型时用我们自己的讲述样本做一次小规模盲测。
+
+阿里云官方的 SenseVoice 论文(阿里通义)报告 SenseVoice-Small 在 AISHELL-1/AISHELL-2/WenetSpeech 等中文集上识别率优于 Whisper-Small([arXiv:2407.04051](https://arxiv.org/abs/2407.04051),[SenseVoice README 基准图](https://github.com/FunAudioLLM/SenseVoice)),可作开源侧参照。
+
+### 2.2 逐家详述
+
+价格均为 2026-10-04 官方页面抓取。换算基准:1 小时 = 60 分钟。
+
+#### 阿里云 NLS(智能语音交互)
+
+- **产品线**:实时语音识别(流式)、一句话识别(≤60s/次)、录音文件识别(异步,提交+轮询)、录音文件识别极速版、录音文件识别闲时版;另有百炼平台的 FunASR/Paraformer 模型 API。
+- **价格**([官方计费文档](https://help.aliyun.com/zh/isi/getting-started/billing-10)):
+ - 录音文件识别按量 **2.50 元/小时**(日用量 0–299h),阶梯最低 1.00 元/小时(5000h+/日);资源包 1000 小时 1200 元(合 1.20 元/小时)、20000 小时 20000 元(合 1.00 元/小时)
+ - 录音文件识别闲时版(24h 内返回)**1.00 元/小时**,10 万小时以上 0.60 元/小时
+ - 录音文件识别极速版 3.30 元/小时起
+ - 实时语音识别 3.50 元/小时起
+ - 百炼 Paraformer 语音识别 **0.288 元/小时**(不限量,大模型平台定价)
+- **能力**:录音文件识别支持音频 ≤512MB、总时长 ≤12h 的 URL 提交([API 文档](https://www.alibabacloud.com/help/zh/isi/developer-reference/api-reference-2));支持说话人分离(`auto_split`/`speaker_num` 参数,[FAQ](https://help.aliyun.com/zh/isi/support/faq-about-speech-recognition));带词级时间戳;可返回 JSON 逐句结果。
+- **免费额度**:新用户 3 个月试用(2 路并发或每天 2 小时录音文件识别额度)([快速入门](https://help.aliyun.com/zh/isi/getting-started/start-here))。
+- **合规**:境内服务,可签署数据处理协议;audio 即焚纪律可由服务端实现(转写结果落库、音频不落盘)。
+
+#### 火山引擎(字节跳动,豆包语音)
+
+- **产品线**:豆包录音文件识别模型 2.0(大模型版)、录音文件识别标准版/极速版/闲时版、豆包流式语音识别模型 2.0、大模型流式语音识别。
+- **价格**([官方计费文档](https://www.volcengine.com/docs/6561/1359370)、[计费概述](https://www.volcengine.com/docs/DoubaoVoice/BillingOverview-15)):
+ - 豆包录音文件识别模型 2.0:后付费 **0.8 元/小时**;资源包 30 小时 23 元(约 0.77)、10000 小时 7200 元(合 0.72)、300000 小时合 0.67 元/小时
+ - 豆包流式语音识别模型 2.0:后付费 1 元/小时
+ - 传统录音文件识别标准版:后付费 1.8 元/小时(0–300h)起;闲时版 1.2 元/小时后付费、资源包低至 0.5 元/小时
+- **能力**:标准版/极速版/闲时版均为"提交 + 查询"异步([接入必读](https://docs.volcengine.com/docs/DoubaoVoice/Accessmust-read?lang=zh));大模型版 ASR 支持多语种、热词;新应用有免费试用额度。
+- **备注**:SpeechIO 榜单未收录火山,中文口语实测数据缺第三方验证——但字节系(抖音语音输入)的中文口语工程能力属于第一梯队,且单价最低档。
+
+#### 腾讯云 ASR
+
+- **产品线**:实时语音识别、录音文件识别(异步)、录音文件识别极速版(同步,100MB/2h 内音频)、大模型 2.0 版、语音流异步识别;增值:情绪识别、角色分离、口语转书面语。
+- **价格**([官方计费概述](https://cloud.tencent.com/document/product/1093/35686)、[极速版文档](https://cloud.tencent.com/document/product/1093/52097)):
+ - 录音文件识别后付费 **1.75 元/小时**(0–12 万小时/月);资源包 60 小时 90 元(1.5)、1000 小时 1200 元(1.2)
+ - 录音文件识别(大模型 2.0 版):后付费 0.8 元/小时,资源包低至 0.72 元/小时
+ - 录音文件识别极速版:3.10 元/小时起
+ - **情绪识别增值服务**:后付费 0.85 元/小时(与 ASR 叠加计费)——直接提供"情绪"维度的云侧输出,但注意它是离散情绪类别而非韵律连续特征
+- **免费额度**(长期):录音文件识别 10 小时/月、实时 5 小时/月、一句话识别 5000 次/月。
+- **榜单**:SpeechIO 全量 CER 4.64%(2025.01)。
+
+#### 讯飞开放平台(iFLYTEK)
+
+- **产品线**:语音听写(≤60s/次,实时)、语音转写 lfasr(≤5 小时/文件、≤500MB,异步)、实时语音转写。
+- **价格**([语音转写产品页](https://www.xfyun.cn/services/lfasr),含价格表;[会员试用页](https://www.xfyun.cn/doc/member/trial.html)):
+ - 免费包:个人 5 小时/年、**企业开发者 50 小时/年**
+ - 按时长套餐:80 小时/年 198 元(约 2.48 元/小时)、2000 小时/年 4000 元(2.0)、10000 小时 17500 元(1.75)、300000 小时 360000 元(1.2)
+ - 语音听写套餐:20 万次/年 1000 元、100 万次/年 4000 元
+- **能力**:中文方言是讯飞传统强项(202 种方言免切识别,部分需另购);lfasr 支持批量、时间戳([lfasr API 文档](https://www.xfyun.cn/doc/asr/lfasr/API.html))。
+- **榜单**:SpeechIO 全量 CER 4.80%(2025.01)。
+
+#### 百度智能云
+
+- **价格**([官方价格文档](https://ai.baidu.com/ai-doc/SPEECH/Tldjm0i4c)):音频文件转写后付费 **2 元/小时**;小时包 1000 小时 1200 元(1.2 元/小时)起;短语音识别按次(后付费 3.4 元/千次起);实时语音识别 3 元/小时后付费、1.8 元/小时(1000h 包)。
+- **免费额度**:10 万次短语音识别/企业账号(产品页)。
+- **榜单**:SpeechIO 全量 CER 10.10%(2025.01,明显落后)——不推荐作为主通路。
+
+#### OpenAI(GPT-4o transcribe 等)
+
+- **价格**([官方定价页](https://platform.openai.com/docs/pricing)):`gpt-4o-transcribe` **$0.006/分钟**(约 2.16 元/小时);`gpt-4o-mini-transcribe` $0.003/分钟;`gpt-transcribe` $0.0045/分钟;实时转写 $0.017/分钟。注意:`whisper-1` 已不再出现在当前定价页。
+- **可用性**:api.openai.com 在大陆不可直连,需中转;数据出境 + 《个人信息保护法》下的合规评估义务;无境内实体可签 DPA。**结论:不适合作为面向大陆用户的主通路**;可作为开发期对照基准。
+
+#### Groq(Whisper 托管)
+
+- **价格**([官方文档](https://console.groq.com/docs/speech-to-text)):`whisper-large-v3` **$0.111/小时**(约 0.80 元/小时)、`whisper-large-v3-turbo` $0.04/小时(约 0.29 元/小时);单次最低计费 10 秒;文件上限 25MB(免费层)/100MB;官方自报 WER 10.3%(large-v3)/12%(turbo,测试集未注明,按英文基准理解)。
+- **可用性**:不对中国大陆提供服务、需境外支付;同上的出境合规问题。单价最低但综合不可用。
+
+#### Deepgram
+
+- **价格**([官方定价页](https://deepgram.com/pricing)):Nova-3 Monolingual $0.0048/分钟(促销价,原价 $0.0077);Nova-3 Multilingual $0.0058/分钟;$200 免费额度。多语种版支持中文在内的 45+ 语种、含说话人分离。
+- 折合约 1.7–4.0 元/小时;境外服务,可用性与合规同上。
+
+#### AssemblyAI
+
+- **价格**([官方定价页](https://www.assemblyai.com/pricing)):Universal-2 **$0.15/小时**(99 语种)、Universal-3.5 Pro $0.21/小时(18 语种)。折 1.1–1.5 元/小时;境外服务。
+
+### 2.3 横向对比表(录音文件转写,中文普通话)
+
+| 厂商 | 后付费单价 | 资源包低价 | 免费额度 | 第三方中文 CER(SpeechIO 2025.01) | 单文件上限 | 时间戳/说话人 | 境内合规 | 情绪/韵律附加 |
+|---|---|---|---|---|---|---|---|---|
+| 阿里云 NLS | 2.50 元/h | 1.00 元/h(2 万 h 包) | 3 个月试用 | **3.40%**(#3) | 512MB/12h | 词级时间戳;说话人分离([FAQ](https://help.aliyun.com/zh/isi/support/faq-about-speech-recognition)) | ✅ | —(百炼另有模型) |
+| 火山引擎豆包 | **0.80 元/h**(大模型 2.0) | 0.67 元/h | 新应用试用额度 | 未收录 | 异步队列 | 视版本 | ✅ | — |
+| 腾讯云 | 1.75 元/h;大模型 2.0 版 0.8 元/h | 0.72 元/h | 10 h/月 | 4.64% | 极速版 100MB/2h | 支持 | ✅ | **情绪识别增值 0.85 元/h**、角色分离 |
+| 讯飞 | 约 2.0–2.48 元/h(套餐) | 1.2 元/h(30 万 h 包) | 企业 50 h/年 | 4.80% | 500MB/5h | 时间戳 | ✅ | 方言最强(202 种) |
+| 百度 | 2.00 元/h | 1.2 元/h(1000h 包) | 10 万次短语音 | 10.10% | — | 支持 | ✅ | — |
+| OpenAI gpt-4o-transcribe | ≈2.16 元/h | — | — | 英文强,中文无第三方基准 | 25MB | word 级 | ❌ 数据出境 | ❌ |
+| Groq whisper-large-v3 | ≈0.80 元/h | — | 有限免费层 | 自报 WER 10.3%(英文) | 25/100MB | segment/word | ❌ | ❌ |
+| Deepgram Nova-3 | ≈1.7–4.0 元/h | $200 额度 | 同上 | 中文支持,无第三方基准 | — | 含说话人分离 | ❌ | Audio Intelligence(情感/意图) |
+| AssemblyAI | ≈1.1–1.5 元/h | — | — | 中文含于 99 语种 | — | 含 | ❌ | 情感分析 |
+
+**读表结论**:
+1. 境内四家(阿里/火山/腾讯/讯飞)在可用性、合规、单价三个维度全面优于境外四家;百度的识别率在第三方基准上掉队。
+2. 阿里云是"识别率 × 工程成熟度"的最稳选择;火山大模型版是"单价最低 × 大厂背书"的高性价比选择;腾讯云附带唯一的云侧**情绪识别**增值,但韵律连续特征仍需旁路。
+3. 境外 API 只在一种情况下有意义:开发期做对照基准,或未来出海版本复用同一 `AsrProvider` 接口。
+
+### 2.4 数据合规要点
+
+- 语音含声纹,声纹属于生物识别信息,《个人信息保护法》第二十八条将其列为**敏感个人信息**,处理需"特定的目的和充分的必要性,并采取严格保护措施"([官方全文,CAC 发布](https://www.cac.gov.cn/2021-08/20/c_1631050028355286.htm))。ADR-0004 的"特征提取后即焚、不留声纹"正是对这一条款的架构级响应。
+- 向境外 API 传输语音还触发第三章"个人信息跨境提供"的额外义务(安全评估/标准合同等),早期产品不值得为此付出合规成本。
+- 境内云厂商(阿里/腾讯/字节/讯飞/百度)均提供数据处理协议与"不用于模型训练"的默认承诺,需要在开通服务时确认并留存协议文本(各厂商控制台可签,本调研未逐家抓取协议原文,列为待办)。
+
+---
+
+## 3. Tauri iOS/Android 原生通路
+
+### 3.1 iOS:SFSpeechRecognizer 能力与边界
+
+Apple 官方文档([SFSpeechRecognizer](https://developer.apple.com/documentation/speech/sfspeechrecognizer),[DocC 数据](https://developer.apple.com/tutorials/data/documentation/speech/sfspeechrecognizer.json))明确:
+
+- **"Plan for a one-minute limit on audio duration"**:框架会停止超过一分钟的识别任务——对本产品"几十秒到几分钟"的讲述场景是**硬伤**(可通过分段重启缓解,但体验与准确率都受损)。
+- **"speech recognition is a network-based service"**:按设备/按应用有每日识别限额,失败需引导用户稍后重试;部分语言必须联网。
+- `supportsOnDeviceRecognition`(iOS 13+):仅部分 locale 支持完全离线;中文是否支持离线取决于系统版本与设备,不可作为承诺。
+- 权限:需在 Info.plist 声明 `NSSpeechRecognitionUsageDescription` 与 `NSMicrophoneUsageDescription`,运行时弹窗授权。
+- 文档还直接建议"**Do not perform speech recognition on private or sensitive information**"——Apple 自己不建议把敏感语音送往其识别服务,这与本产品"个人经历讲述"的内容属性冲突。
+
+**Web 侧能不能直接用**:不能。WebKit 工程师在官方 bug 跟踪中确认 SpeechRecognition API 在 SFSafariViewController 与主屏 Web App(PWA)中不可用([WebKit Bug 225298](https://bugs.webkit.org/show_bug.cgi?id=225298));Tauri iOS 使用 WKWebView,属同一未暴露范围。
+
+**如果非要原生插件**:Tauri 2 插件可包含 Swift Package([官方插件开发文档](https://v2.tauri.app/develop/plugins/)),写一个 SFSpeechRecognizer 插件工作量约数百行 Swift,但 1 分钟限制与每日限额使其不适合做主通路。
+
+### 3.2 Android:SpeechRecognizer 能力与边界
+
+AOSP 源码 `SpeechRecognizer.java` 的类注释([源码](https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/speech/SpeechRecognizer.java))原文:
+
+> "The implementation of this API is **likely to stream audio to remote servers** to perform speech recognition. As such this API is **not intended to be used for continuous recognition**..."
+
+- 即:默认实现(Google 的 RecognitionService)是云端识别;大陆发行版 ROM(无 GMS)往往没有可用的默认识别服务,行为不可控。
+- `createOnDeviceSpeechRecognizer()`(API 33+)存在,但 `isOnDeviceRecognitionAvailable()` 取决于厂商配置,中文离线包是否可用因设备而异。
+- WebView 内 `getUserMedia` 需要宿主应用处理 `WebChromeClient.onPermissionRequest` 授权麦克风,否则默认拒绝(Android 官方 WebChromeClient 文档)。
+- Android 11+ 查询识别服务需在 manifest 加 `` 块(同上源码注释)。
+
+### 3.3 Tauri 2 插件机制与社区现状
+
+- Tauri 2 官方插件机制:插件 = Cargo crate + 可选 NPM 包 + 可选 Android 库工程(Kotlin/Java)与 iOS Swift Package;`npx @tauri-apps/cli plugin new --android --ios` 一键生成模板([官方插件开发文档](https://v2.tauri.app/develop/plugins/))。
+- 社区已有现成 STT 插件:[tauri-plugin-stt](https://github.com/brenogonzaga/tauri-plugin-stt)(MIT)——桌面端用 whisper.cpp(whisper-rs,Metal/CUDA/Vulkan 可选),**移动端直接委托 OS 引擎**(iOS SFSpeechRecognizer / Android SpeechRecognizer)。它恰好印证了 3.1/3.2 的结论:移动端的 OS 引擎路线会继承 1 分钟限制与云端依赖。该插件代码可作为自写插件的模板,但不建议直接采用其移动端路径。
+- 官方插件仓库(plugins-workspace)暂无 speech 插件;生态单薄,自写插件需自维护。
+
+### 3.4 移动端录音的现实:`getUserMedia` / MediaRecorder
+
+- **WKWebView 支持 getUserMedia 的起点是 iOS 14.3**:WebKit 官方博客原文"navigator.mediaDevices.getUserMedia can now be exposed to WKWebView applications... **automatically exposed if the embedding application is able to natively capture either audio or video**"([WebKit Blog: MediaRecorder API](https://webkit.org/blog/11353/mediarecorder-api/));此前是长期 bug([WebKit Bug 208667](https://bugs.webkit.org/show_bug.cgi?id=208667))。WWDC21 亦确认"WKWebView supports getUserMedia from iOS 14.3"([WWDCNotes: Explore WKWebView additions](https://wwdcnotes.com/documentation/wwdc21-10032-explore-wkwebview-additions/))。
+- MediaRecorder 支持矩阵:macOS Safari 14.1+、iOS Safari 14.5+、Android Chrome、桌面 Chrome/Firefox 全绿,全局支持率 96.21%([caniuse mediarecorder](https://caniuse.com/mediarecorder))。
+- **坑清单**(对 Tauri 落地):
+ 1. iOS 需 Info.plist 加 `NSMicrophoneUsageDescription`;Tauri 侧确认 WKWebView 配置允许媒体捕获(Tauri 默认配置通常已满足,需实测);
+ 2. **Safari 系产出的录音是 `audio/mp4`(AAC),不是 webm/Opus**;Android Chrome 产 `audio/webm;codecs=opus`——服务端必须用 FFmpeg 统一转码(16kHz mono PCM)后再送 ASR;
+ 3. Android WebView 偶发 `NotReadableError`(Fragment 化生态的已知问题),需重试与降级提示;
+ 4. 录音必须通过用户手势启动(iOS 平台要求)。
+
+**本节结论**:Tauri 手机端的正确通路是 **Web 层 `getUserMedia` + MediaRecorder 录音 → 上传自有服务端**,与网页端完全共用代码与服务端管线;原生 STT 插件只在"未来要做离线模式"时才值得投入。
+
+---
+
+## 4. 自托管开源模型
+
+### 4.1 SenseVoice(阿里 FunAudioLLM,重点推荐)
+
+- **能力**:单模型输出 ASR + 语种识别(中/粤/英/日/韩)+ **情感识别**(HAPPY/SAD/ANGRY/NEUTRAL/FEARFUL/DISGUSTED/SURPRISED 七类)+ **音频事件检测**(BGM/掌声/笑声/哭声/咳嗽/喷嚏/呼吸等,其中"笑声/呼吸/哭泣"正是 ADR-0004 要的副语言信号);带逆文本归一化(ITN,标点数字规范化)([README](https://github.com/FunAudioLLM/SenseVoice),[论文 arXiv:2407.04051](https://arxiv.org/abs/2407.04051))。
+- **速度与部署**:非自回归端到端架构,同参数量下推理比 Whisper-Small 快 5 倍以上、比 Whisper-Large 快 15 倍以上([README 基准](https://github.com/FunAudioLLM/SenseVoice));提供 FunASR Python 服务、FastAPI 容器、**llama.cpp GGUF 单机二进制**(内置 FSMN-VAD,无需 Python,[runtime 说明](https://www.funasr.com/llama-cpp.html),[GGUF 权重](https://huggingface.co/FunAudioLLM/SenseVoiceSmall-GGUF));官方明确"中文与粤语识别优于 Whisper"(同 README 基准图)。
+- **端侧**:[sherpa-onnx 官方支持 SenseVoice](https://k2-fsa.github.io/sherpa/onnx/sense-voice/index.html),可跑 iOS/Android/Raspberry Pi,十种语言绑定——给"未来端侧离线"留了路。
+- **许可**:代码 MIT;权重采用 FunASR 模型开源许可,官方澄清**允许商用**(需遵守署名与模型命名要求)([许可说明](https://github.com/QwenAudio/SenseVoice/issues/334#issuecomment-5083546605))。上线前请律师过一遍 MODEL_LICENSE 文本。
+- **局限**:单次推理上限约 30 秒音频,长音频必须 VAD 切分(README 提供 FSMN-VAD 组合方案与无 VAD 的定长滑窗脚本);情感/事件标签的效度数据来自作者自测基准,缺第三方复现。
+
+### 4.2 Paraformer(阿里)
+
+非自回归工业级中文 ASR(FunASR 生态默认中文模型),SenseVoice 的同门前辈;阿里云百炼把它作为 API 出售(0.288 元/小时,见 2.2),模型本身在 ModelScope 开源([模型页](https://www.modelscope.cn/models/damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch/summary))。长音频需配 VAD。若自托管,优先考虑 SenseVoiceSmall(同生态、多情感事件输出、更快)。
+
+### 4.3 Whisper large-v3 / faster-whisper / whisper.cpp
+
+- **中文长口语表现**:Whisper 是通用多语模型,中文并非其最优语种;SpeechIO 中文榜未收录 Whisper(跑分成本高),阿里 SenseVoice 基准显示其中文识别优于 Whisper-Small/Large([SenseVoice README](https://github.com/FunAudioLLM/SenseVoice))。社区共识的额外问题:长静音/低质量音频下的**幻觉**(编造文本)风险,需要通过 VAD 与 no_speech 阈值压制。
+- **faster-whisper**(CTranslate2):同精度下比官方 openai/whisper 快 4 倍;官方基准——large-v2 在 RTX 3070 Ti 上转写 13 分钟音频 fp16 1m03s(约 12 倍实时)、int8 batch=8 仅 16s;small 模型纯 CPU(i7-12700K)int8 batch=8 为 51s(约 15 倍实时)([README 基准](https://github.com/SYSTRAN/faster-whisper))。GPU 仅需 cuBLAS/cuDNN,无需 FFmpeg(PyAV 内置)。
+- **whisper.cpp**:纯 C/C++,内存占用 tiny 273MB / base 388MB / small 852MB / medium 2.1GB / large 3.9GB([README 内存表](https://github.com/ggml-org/whisper.cpp));Apple Silicon 有 Metal/Core ML(encoder 走 ANE 比纯 CPU 快 3 倍以上);官方 iOS/Android/WASM 示例;内置 Silero-VAD 支持。
+- **定位**:若自托管,Whisper 系适合"多语种混杂"场景;纯中文叙事场景,SenseVoiceSmall 是更优解。
+
+### 4.4 sherpa-onnx 端侧部署
+
+[k2-fsa/sherpa-onnx](https://github.com/k2-fsa/sherpa-onnx):ONNX Runtime 驱动的离线 ASR,支持 Zipformer/Paraformer/SenseVoice/Whisper 等模型,覆盖 iOS/Android/树莓派/桌面,WASM 版见 1.2。移动端"录音 + 端侧转写 + 只上传文本"的极端隐私模式可以用它实现,代价是 App 包体增加数百 MB(模型文件)——建议作为二期选项。
+
+### 4.5 自托管成本估算(与 2.3 对照)
+
+量级假设:300 DAU × 4 分钟/日 ≈ **600 转写小时/月**。
+
+- **云端**:火山豆包大模型 0.8 元/h → **约 480 元/月**;阿里云按量 2.5 元/h → 约 1500 元/月;阿里云 1000h 资源包 → 约 720 元/月;讯飞套餐二 → 约 1200 元/月。
+- **自托管**:SenseVoiceSmall 官方口径比 Whisper-Small 快 5 倍以上;即便保守按"Whisper-Small 级 CPU 吞吐 ~15 倍实时"([faster-whisper CPU 基准](https://github.com/SYSTRAN/faster-whisper))打五折算,单核也能做到约 7 倍实时 → 600 小时音频约需 86 核·小时/月,**一台 4 核 CPU 云主机(约百元/月量级)富富有余**。GPU 都不需要。(此为推算,非官方基准;落地前用真实样本实测 RTF。)
+- 结论:几百 DAU 阶段两者都便宜;云的隐性成本是接入与对账工作量,自托管的隐性成本是运维。推荐**云为主、自托管为兜底**,`AsrProvider` 接口切换成本很低。
+
+---
+
+## 5. 韵律特征旁路
+
+需求回顾(ADR-0004):语速、停顿分布、音高变化范围、能量、填充词频率、情绪唤醒度、笑/叹息等副语言信号;存储为**不可逆统计向量**,不含声纹。
+
+### 5.1 端上提取(Web Audio API / 原生)
+
+- **能量/RMS/过零率**:Web Audio `AnalyserNode`(原生 API,[W3C Web Audio 规范](https://webaudio.github.io/web-audio-api/))+ [meyda](https://github.com/meyda/meyda)(JS 音频特征库,支持 Web Audio 实时提取)。
+- **音高(F0)**:[CREPE](https://github.com/marl/crepe)(MIT 许可的深度学习音高模型,有 ONNX 导出与 TF.js 生态,第三方项目确认其许可与权重来源);纯算法可用 YIN/自相关自行实现。
+- **优点**:原始音频**不出端**,"即焚"在最强意义上成立;零服务端算力。
+- **缺点**:浏览器/WebView 间数值一致性需自行校准;移动端 WebView 后台节流;音高提取对录音质量敏感;与转写文本的时间对齐需要自己维护。适合做**粗粒度能量/语速**,音高等精细特征建议服务端做。
+
+### 5.2 服务端提取
+
+- **[parselmouth](https://github.com/YannickJadoul/Parselmouth)**:Praat 的 C/C++ 算法原封不动暴露给 Python(`to_pitch()` 自相关法、`to_intensity()` 等),音高/强度/共振峰的学术标准实现。许可 GPLv3+——服务端内部使用不构成"分发",通常可接受,上线前法务确认。
+- **FFmpeg 滤镜**:官方滤镜文档确认 [`silencedetect`](https://ffmpeg.org/ffmpeg-filters.html#silencedetect)(静音段检测→停顿分布)、[`ebur128`](https://ffmpeg.org/ffmpeg-filters.html#ebur128)(响度/能量,BS.1770)、[`astats`](https://ffmpeg.org/ffmpeg-filters.html#astats)(统计特征)——零额外依赖即可拿到能量与停顿;音高仍需 parselmouth/CREPE 类工具。
+- **[openSMILE](https://github.com/audeering/opensmile)**(GeMAPS/eGeMAPS 特征集,语音情感研究标准工具):**注意许可陷阱**——开源版"不允许用于任何类型的商业产品",商用需购买 audEERING 商业许可([README 许可段](https://github.com/audeering/opensmile))。本产品应直接避开。
+- **ASR 附带的免费午餐**:SenseVoiceSmall 的情感标签与事件标签(笑声/哭泣/呼吸/咳嗽)可直接映射 ADR-0004 的"情绪唤醒度、笑/叹息"字段;腾讯云情绪识别增值(0.85 元/h)是云侧替代([腾讯计费](https://cloud.tencent.com/document/product/1093/35686))。二者都是离散标签,**不能替代**连续的音高/能量统计。
+
+### 5.3 与"即焚"纪律的兼容设计
+
+1. 服务端接收音频后全程**内存处理**:解码(FFmpeg 管道)→ 分支 A 送 ASR、分支 B 送韵律提取 → 汇总(文本 + 统计向量)→ 释放缓冲,任何环节不落盘(含临时文件用 `tmpfs`/内存管道)。
+2. 特征只存**聚合统计量**(均值/方差/分位数/时长比),不存音高轮廓原始序列——音高随时间的曲线具有个体可辨识性,聚合后即不可逆。
+3. 转写文本与特征的关联通过讲述事件 ID,音频本身无 ID、无日志留存。
+4. 拒绝任何"声纹/说话人身份"类输出:说话人分离(diarization)与声纹识别(speaker verification)在本产品是明确禁区——注意阿里/腾讯的说话人分离参数**不要开启**(单用户讲述场景本来也不需要)。
+
+---
+
+## 6. 推荐架构
+
+### 6.1 总体:一条管线,两个端复用
+
+```
+[网页端 / Tauri iOS / Tauri Android]
+ │ getUserMedia + MediaRecorder(用户手势启动)
+ │ 录音 blob(webm/opus 或 mp4/aac,视平台)
+ ▼
+[自有服务端 Hono] POST /api/asr(沿用现有路由与 AsrProvider 接口)
+ │ ① FFmpeg 转码:16kHz mono PCM(全程内存管道)
+ ├─②a ASR 分支:AsrProvider.transcribe()
+ │ 主:阿里云 NLS 录音文件识别 / 火山豆包大模型(可配置切换)
+ │ 备:自托管 SenseVoiceSmall(FunASR / llama.cpp)
+ ├─②b 韵律分支:FFmpeg silencedetect + ebur128(停顿/能量)
+ │ + parselmouth(音高统计)[+ SenseVoice 情感/事件标签]
+ │ ③ 结果聚合 → { transcript, prosody_stats, emo_tags }
+ │ ④ 音频缓冲立即释放(即焚);结果按 ADR-0004 落库
+ ▼
+[可编辑文本框回填](沿用 VoiceInput 的"确认后才提交"UX)
+```
+
+### 6.2 网页端
+
+- **主通路**:MediaRecorder 录音 → 上传(现有通路 2 代码基本不动,换真实 provider)。
+- **可选"零上传"模式**:保留 `SpeechRecognition` 通路作为隐私偏好选项,UI 上明确标注"识别由浏览器/系统提供";桌面 Chrome(网络允许时)与 Safari 可用。主线不再依赖它。
+- 保留纯文本兜底(现状已正确)。
+
+### 6.3 Tauri 手机端
+
+- 不引原生 STT 插件;iOS/Android 都走 `getUserMedia`+MediaRecorder 录音上传(WKWebView iOS 14.3+ 已支持 getUserMedia,[WebKit Blog](https://webkit.org/blog/11353/mediarecorder-api/))。
+- 权限配置:iOS `NSMicrophoneUsageDescription`;Android `RECORD_AUDIO` + WebView 的 `onPermissionRequest` 处理(Tauri 默认 WebView 配置需实测验证一次)。
+- 服务端兼容 `audio/mp4`(Safari/WKWebView 产物)与 `audio/webm`(Android/Chrome 产物)双格式,统一转码。
+- 二期可选:sherpa-onnx 端侧 SenseVoice 离线模式(包体换隐私)。
+
+### 6.4 服务端接入要点
+
+- `server/src/asr/provider.ts` 的 `AsrProvider` 接口无需改动,新增两个实现:`AliyunFileAsrProvider`、`VolcanoFileAsrProvider`,外加 `SenseVoiceProvider`(HTTP 调本地 FunASR 服务或 llama.cpp server)。路由层加一个 provider 选择的环境变量即可。
+- 阿里云为异步(提交+轮询),对产品"容忍 2–5 秒延迟"完全够用(转写通常秒级返回;闲时版保证 24h 内,不可用为主力);火山大模型版同为 submit/query。
+- 韵律分支与 ASR 分支并行(Promise.all),超时与降级互不影响。
+- 即焚实现:流式处理 + 不落盘 + 单元测试断言"处理后磁盘无音频文件"。
+
+---
+
+## 7. 风险与开放问题
+
+1. **厂商"用客户音频训练"条款**:各家默认承诺不一(尤其免费额度阶段),开通时须逐家确认数据处理协议并留存;免费档通常允许改进模型,付费/企业档可关闭——需要商务确认(待办,未在本次调研逐家抓取协议原文)。
+2. **榜单时效**:SpeechIO 数据为 2025.01,火山缺席、各厂"大模型版"未覆盖;**必须用自有讲述样本(情感化口语、随意语法)做一次 4 家盲测**再最终定主 provider(建议样本 ≥30 分钟)。
+3. **Web Speech 国内实测**:Chrome 走 Google 服务的实际可达性与识别质量需在我们目标网络环境实测;Safari 桌面端"零上传"模式需验证 Siri 未开启时的失败提示文案。
+4. **Tauri Android 麦克风授权链**:WebView `onPermissionRequest` 在 Tauri 2 的默认实现是否直通 Android 运行时权限,需要真机验证(华为/小米/OPPO 各一)。
+5. **SenseVoice 情感标签效度**:七类情感与"情绪唤醒度"的映射关系需要心理学顾问校准;笑/叹息事件可先从 AED 标签直接采用。
+6. **方言/口音**:默认"普通话 + 轻度口音"假设;重度方言用户(粤语等)在讯飞上体验最好,可作为后期 provider 策略维度(讯飞免费企业包 50h/年可作补充通道)。
+7. **成本临界点**:DAU 涨到数千时,自托管比重上升(云约 0.7–2.5 元/h vs 自托管接近电费);`AsrProvider` 抽象保证切换成本可控。
+8. **openSMILE 许可**:开源版禁商用,已排除;若未来需要 GeMAPS 标准特征集,要么买商业许可,要么用 parselmouth 复现核心 LLD。
+9. **即焚的审计**:建议加一条服务端日志规范——只记录"转写时长、耗时、特征维度数"等元数据,绝不记录音频哈希之外的可回放标识。
+10. **iOS 录音中断**:来电/锁屏导致的 MediaRecorder 停止需前端兜底(现状 onstop 已处理 blob 收尾,验证中断时 blob 完整性即可)。
+
+---
+
+## 附录:来源清单(按章节)
+
+**浏览器侧**
+- W3C Web Speech API 草案:https://w3c.github.io/speech-api/
+- caniuse SpeechRecognition 数据与注记:https://caniuse.com/speech-recognition
+- Chromium 语音识别网络引擎源码(Google 后端实证):https://github.com/chromium/chromium/blob/main/content/browser/speech/network_speech_recognition_engine_impl.cc
+- WebKit Bug 225298(WKWebView/SFSafariViewController 不可用):https://bugs.webkit.org/show_bug.cgi?id=225298
+- whisper.cpp WASM 示例 README(性能/上限/体积):https://github.com/ggml-org/whisper.cpp/tree/master/examples/whisper.wasm
+- whisper.cpp WASM 在线 demo:https://ggml.ai/whisper.cpp/
+- sherpa-onnx WASM 文档与 demo 列表:https://k2-fsa.github.io/sherpa/onnx/wasm/index.html
+- ONNX Runtime Web 教程(WebGPU/WebNN):https://onnxruntime.ai/docs/tutorials/web/
+- caniuse MediaRecorder:https://caniuse.com/mediarecorder
+- WebKit Blog: MediaRecorder API(WKWebView getUserMedia, iOS 14.3):https://webkit.org/blog/11353/mediarecorder-api/
+- WebKit Bug 208667(getUserMedia 在 WKWebView 的历史问题):https://bugs.webkit.org/show_bug.cgi?id=208667
+
+**云端 ASR**
+- SpeechIO 中文 ASR 排行榜(2025.01 CER):https://github.com/SpeechColab/Leaderboard
+- 阿里云 NLS 计费:https://help.aliyun.com/zh/isi/getting-started/billing-10
+- 阿里云录音文件识别 API(512MB/12h):https://www.alibabacloud.com/help/zh/isi/developer-reference/api-reference-2
+- 阿里云免费试用说明:https://help.aliyun.com/zh/isi/getting-started/start-here
+- 火山引擎豆包语音计费:https://www.volcengine.com/docs/6561/1359370 ;https://www.volcengine.com/docs/DoubaoVoice/BillingOverview-15 ;接入必读:https://docs.volcengine.com/docs/DoubaoVoice/Accessmust-read?lang=zh
+- 腾讯云 ASR 计费概述(含免费额度、情绪识别增值):https://cloud.tencent.com/document/product/1093/35686 ;极速版限制:https://cloud.tencent.com/document/product/1093/52097
+- 讯飞语音转写产品页与价格:https://www.xfyun.cn/services/lfasr ;API 限制:https://www.xfyun.cn/doc/asr/lfasr/API.html ;会员试用价格:https://www.xfyun.cn/doc/member/trial.html
+- 百度语音价格:https://ai.baidu.com/ai-doc/SPEECH/Tldjm0i4c
+- OpenAI API 定价(transcription 系列):https://platform.openai.com/docs/pricing
+- Groq Speech-to-Text(价格/限制/WER):https://console.groq.com/docs/speech-to-text
+- Deepgram 定价:https://deepgram.com/pricing
+- AssemblyAI 定价:https://www.assemblyai.com/pricing
+- 《个人信息保护法》全文(CAC):https://www.cac.gov.cn/2021-08/20/c_1631050028355286.htm
+
+**Tauri 移动端**
+- Apple SFSpeechRecognizer 文档(1 分钟限制/限额/离线属性):https://developer.apple.com/documentation/speech/sfspeechrecognizer
+- AOSP SpeechRecognizer 源码(远端服务器注释/on-device API):https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/speech/SpeechRecognizer.java
+- Tauri 2 插件开发文档:https://v2.tauri.app/develop/plugins/
+- 社区插件 tauri-plugin-stt:https://github.com/brenogonzaga/tauri-plugin-stt
+- WWDCNotes: Explore WKWebView additions(iOS 14.3 getUserMedia):https://wwdcnotes.com/documentation/wwdc21-10032-explore-wkwebview-additions/
+
+**自托管开源模型**
+- SenseVoice(能力/基准/许可/部署):https://github.com/FunAudioLLM/SenseVoice ;论文:https://arxiv.org/abs/2407.04051 ;llama.cpp 运行时:https://www.funasr.com/llama-cpp.html ;GGUF:https://huggingface.co/FunAudioLLM/SenseVoiceSmall-GGUF ;许可澄清:https://github.com/QwenAudio/SenseVoice/issues/334#issuecomment-5083546605
+- FunASR:https://github.com/modelscope/FunASR
+- sherpa-onnx SenseVoice 支持:https://k2-fsa.github.io/sherpa/onnx/sense-voice/index.html
+- Paraformer 模型页:https://www.modelscope.cn/models/damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch/summary
+- whisper.cpp(内存表/平台/Core ML):https://github.com/ggml-org/whisper.cpp
+- faster-whisper(基准):https://github.com/SYSTRAN/faster-whisper
+- OpenAI Whisper:https://github.com/openai/whisper
+
+**韵律特征**
+- meyda(JS 特征提取):https://github.com/meyda/meyda
+- CREPE(音高模型,MIT):https://github.com/marl/crepe
+- parselmouth(Praat in Python):https://github.com/YannickJadoul/Parselmouth
+- openSMILE(注意商用许可限制):https://github.com/audeering/opensmile
+- FFmpeg 滤镜(silencedetect / ebur128 / astats):https://ffmpeg.org/ffmpeg-filters.html