Files
jev-match-game/docs/research/asr-options.html
T

987 lines
59 KiB
HTML
Raw Blame History

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