想象你走进一间能容纳两百人的会议室,台上讲师正在分享,身后巨幕上,一行行文字像字幕一样实时滚动——讲师话音刚落,屏幕上的字已经跟上。听障同事专注地看着字幕,后排观众戴着耳机也能跟上节奏。这一切并非放映员手动敲出来的,而是角落里坐着一位“AI 速记员”:它竖起耳朵捕捉每一段声波,脑子里飞速转着词典,双手(其实是算法)不停把声音“翻译”成文字。这位速记员的正式名字叫“AI 语音识别实时字幕系统”,是“无障碍 AI(A11y)”最生动的落地应用。无障碍的英文是 Accessibility,缩写为 A11y(A 开头、y 结尾、中间省略 11 个字母)。 这篇教程将带你以“会议组织者”的视角,一步步搞清楚这位速记员是怎么工作的:它的耳朵(声学模型)怎么听音辨形、大脑(语言模型)怎么猜词断句、手脚(流式处理)怎么边听边写;我们又该怎么给它搭好台子(前端接入),并按照无障碍规范把字幕呈现给所有观众。你要是理解了这套流程,就掌握了现代实时语音识别字幕的核心认知框架。

岗位关联

对 AI 从业者而言,A11y 不是“可选加分项”,而是越来越多法规强制要求的工程能力。掌握 AI 语音识别生成实时字幕的完整链路,意味着你既能驾驭模型算法,又能落地为真实可用的无障碍体验,这正是全栈 AI 工程师最稀缺的复合技能。

目录
  1. 可视化演示
  2. 语音识别原理
  3. 声学与语言模型
  4. 流式实时处理
  5. 性能优化策略
  6. 前端工程接入
  7. 无障碍实践
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

模拟语音识别ASR流水线、流式字幕延迟与准确率权衡及字幕渲染同步机制,展示AI实时字幕生成的核心处理流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

模式1:ASR语音识别流水线 音频流分帧提取MFCC特征 声学模型+语言模型解码出文本 text = decode(acoustic(features)) 流式ASR实现低延迟实时转录。

语音识别原理

假设你是这场培训的会议组织者,要请一位速记员为两百人的会场做实时字幕。这位速记员有完整的工作流程:竖起耳朵把空气中的声波“抓”进来,把连续说话声拆成一个个独立的音节,再根据语法和习惯把音节组织成通顺的句子,最后敲进电脑投上大屏。这套“听声→辨音→组词→输出”的流水线,正是 AI 语音识别系统的核心链路,也决定了后面所有环节的基调。

在 AI 的世界里,这套流程对应的专业名词是:音频采集与数字化、声学特征提取、解码搜索、文本后处理。系统输入是一段连续的波形,输出是一句完整的文字。难点在于“一段声音对应多种可能文本”,比如“今天天气很好”和“今天天气挺好”听起来几乎一样。所以识别本质上是一个“在所有候选里找最合理答案”的搜索问题。

工程师把这个问题写成贝叶斯框架下的最大后验概率估计:在所有可能的文本序列 W 中,挑选让后验概率 P(W|X) 最大的那一个作为识别结果。X 是音频特征,P(W|X) 是“听到这段声音后,它对应这段文本”的可信度。将这个概率拆开后,可以看到声学模型与语言模型两个角色各司其职。

你看,速记员并不是“听见什么就写什么”的复读机,而是一个“听得懂人话”的聪明人:耳朵负责判断声音像不像某个词,即声学似然;大脑负责判断整句话像不像人话,即语言先验。两者相乘再归一化,才能选出最合理的字幕。下一节我们就去拜访速记员的耳朵和大脑。

W^=arg⁡max⁡WP(W∣X)=arg⁡max⁡WP(X∣W)⋅P(W)P(X)\displaystyle \hat{W} = \arg\max_{W} P(W \mid X) = \arg\max_{W} \frac{P(X \mid W) \cdot P(W)}{P(X)}
这句话的意思是:模型不追求“听起来最像”,而追求“在声音证据和语言习惯共同支持下最合理”。
  1. W(候选文本序列)模型可能输出的每一种词组合,例如“今天天气很好”和“今天天气挺好”都是候选。
    W={w1,w2,…,wn}W = \{ w_1, w_2, \dots, w_n \}
  2. X(声学特征序列)麦克风采集到的音频经过特征提取后得到的向量序列,是声音的物理形貌。
    X={x1,x2,…,xT}X = \{ x_1, x_2, \dots, x_T \}
  3. P(X∣W)(声学似然)给定文本 W,声学模型算出“这段话听起来像它”的可能性。
    P(X∣W)=∏t=1Tp(xt∣st)P(X \mid W) = \prod_{t=1}^{T} p(x_t \mid s_t)
  4. P(W)(语言先验概率)语言模型算出这个文本本身像“人话”的程度。
    P(W)=∏t=1nP(wt∣w1,…,wt−1)P(W) = \prod_{t=1}^{n} P(w_t \mid w_1, \dots, w_{t-1})
  5. arg max(最优解搜索)遍历所有候选文本,挑出后验概率最大者作为最终字幕。
    W^=arg⁡max⁡WP(W∣X)\hat{W} = \arg\max_{W} P(W \mid X)

声学与语言模型

速记员能准确写下“欢迎大家来到前端无障碍 AI 课堂”,靠的是两样武器:一双训练有素的耳朵,一个装满语言习惯的大脑。耳朵能分辨 rèn shi 和 rèn shí 的细微差异;大脑则记得“欢迎”后面常接“来到”,“来到”后面常接地点或活动,于是不假思索就补全了下半句。

技术世界里,这对“耳朵和大脑”对应声学模型与语言模型。声学模型把音频帧映射到音素——也就是拼音的基本单位;语言模型则计算词序列的出现概率。两者恰好对应第一节公式里的 P(X|W) 与 P(W):一个回答“声音像不像这句话”,一个回答“这句话像不像人话”。

早期声学模型普遍采用 GMM-HMM 混合结构,如今主流是端到端深度神经网络,如 Conformer、Whisper,直接学习“语音特征→文本单元”的映射。语言模型方面,从统计 n-gram 过渡到大模型时代的 Transformer,用海量语料学习词与词的共现规律。下面用 n-gram 公式演示语言模型的思考方式:预测下一个词的概率,主要看它前面 n-1 个词是什么。

速记员的“耳聪目明”不是天生的,而是靠海量语音和文本“喂”出来的:声学模型在带标注的语音库里长大,语言模型在书籍和对话语料里泡大。两位老搭档配合默契,字幕自然又快又准。

P(wt∣wt−1,wt−2,…,wt−n+1)=Count(wt−n+1…wt−1wt)Count(wt−n+1…wt−1)\displaystyle P(w_t \mid w_{t-1}, w_{t-2}, \dots, w_{t-n+1}) = \frac{\text{Count}(w_{t-n+1} \dots w_{t-1} w_t)}{\text{Count}(w_{t-n+1} \dots w_{t-1})}
n-gram 模型通过“数一数历史上这两个词出现过多少次”来猜测下一个词,朴素但有效。
  1. w_t(待预测词)当前位置上要猜的词,例如“欢迎来到”之后的“无障碍”。
    wt=无障碍w_t = \text{无障碍}
  2. 条件历史(前 n-1 个词)用最近几个词作为约束,n=2 时只看上一个词。
    wt−1,wt−2,…,wt−n+1w_{t-1}, w_{t-2}, \dots, w_{t-n+1}
  3. 分子(同现计数)语料库中整个 n 元词组“欢迎来到无障碍”一起出现的次数。
    Count(wt−n+1…wt−1wt)\text{Count}(w_{t-n+1} \dots w_{t-1} w_t)
  4. 分母(历史计数)语料库中前面 n-1 个词“欢迎来到”出现的次数,两者相除得到条件概率。
    Count(wt−2,wt−1,wt)Count(wt−2,wt−1)\frac{\text{Count}(w_{t-2}, w_{t-1}, w_t)}{\text{Count}(w_{t-2}, w_{t-1})}

流式实时处理

速记员真正的绝活,是“不等你说完就开始写”。如果等整场演讲结束才整理出文字,那叫会后速记,不叫实时字幕。她必须在演讲者话音刚落的 1-2 秒内让文字上屏,这意味着声音还在流动时,就要边接收、边切分、边识别、边输出。

工程上这叫流式语音识别(Streaming ASR),有三个关键步骤:语音活动检测判断当前有没有人说话;分帧与加窗把连续波形切成 20-30 毫秒的小片;增量解码在累积的音频上不断输出中间结果,并在后续上下文到来时修正。

分帧时相邻帧通常部分重叠,帧长 25ms、帧移 10ms 是常见配置,重叠是为了避免音素恰好被切在帧边界上。给定音频总时长 T,能切出多少帧由下面的公式决定。

对速记员来说,把连续声音切成短块,就像把流水账切成一句句便于速记的话;帧的重叠像她大脑的“预读半拍”,为下一个词提前做准备;VAD 则是她手里的“麦克风开关”——没人说话时就放下笔歇一歇,既不浪费笔墨,也不会把“嗯嗯啊啊”写进字幕。

N=⌊T−LS⌋+1\displaystyle N = \left\lfloor \frac{T - L}{S} \right\rfloor + 1
帧长是“一次听多久”,帧移是“每次往前挪多久”,两者共同决定音频被切成多少块。
  1. N(总帧数)整段音频被切出的帧数量,每一帧对应一次模型打分。
    N=⌊T−LS⌋+1N = \left\lfloor \frac{T - L}{S} \right\rfloor + 1
  2. T(音频总时长)从开口到当前的累积时长,例如一句话约 2500ms。
    T=2500 msT = 2500 \text{ ms}
  3. L(帧长)单帧覆盖的时长,常见取 25ms,类似每次“听”一个小音节。
    L=25 msL = 25 \text{ ms}
  4. S(帧移)相邻两帧起点的时间间隔,常见取 10ms,重叠让音素不被截断。
    S=10 msS = 10 \text{ ms}

性能优化策略

速记员再厉害,也怕现场翻车:手速跟不上嘴速,字幕就会像掉帧的电影一样卡顿。聪明的会议组织者会帮她调整节奏,比如提前给她看演讲稿预热,给手写板扩容缓冲,把长句切成短句让她分块消化——这些做法对应到系统层面,就是性能优化。

实时字幕的体验核心是“延迟感知”。从说话人发声到观众看到字幕,总延迟由四段构成:音频采集与编码、网络传输、模型解码、渲染上屏。性能优化本质是拆解并压缩每一段延迟,而不是简单换一台更强的服务器。

音频采集端要控制单次编码块大小,采集 100-250ms 的音频块后立即发送,比攒满 1 秒再发延迟低得多。解码端则常用“部分假设”机制:模型先输出一个临时文本,随着更多上下文到来再修正。所以字幕是“逐词蹦出”而不是“一句一顿”。

想让速记员跟得上语速,不能只给她“加压”,而要全链路“顺滑”。把大块音频切成小包、把模型从“深思熟虑”切换成“快问快答”、让文字像流水一样持续涌上屏幕,观众才会觉得“这字幕和声音是同步的”。

Ltotal=Laudio+Lnet+Ldecode+Lrender\displaystyle L_{\text{total}} = L_{\text{audio}} + L_{\text{net}} + L_{\text{decode}} + L_{\text{render}}
端到端延迟是四段延迟之和,优化要逐段下手,而不是只盯着模型跑得快不快。
  1. L_total(端到端延迟)从声音发出到字幕显示的总耗时,实时字幕通常目标在 300ms-1s 之间。
    Ltotal∈[300,1000] msL_{\text{total}} \in [300, 1000] \text{ ms}
  2. L_audio(采集编码延迟)麦克风采样成帧并编码的耗时,音频块越小延迟越低。
    Laudio=Nblockfs×1000L_{\text{audio}} = \frac{N_{\text{block}}}{f_s} \times 1000
  3. L_net(网络传输延迟)音频上传与结果回传的耗时,大约等于半个网络往返时间。
    Lnet≈RTT2L_{\text{net}} \approx \frac{RTT}{2}
  4. L_decode(解码计算延迟)模型前向推理的耗时,与模型参数量和硬件算力强相关。
    Ldecode∝模型参数量L_{\text{decode}} \propto \text{模型参数量}
  5. L_render(渲染上屏延迟)浏览器把识别结果绘制到 DOM 的耗时。
    Lrender=Tdraw+TpaintL_{\text{render}} = T_{\text{draw}} + T_{\text{paint}}

前端工程接入

会议室里所有设备都要由组织者提前布置。要给这位 AI 速记员安排一个顺手“工位”,需要解决三个问题:麦克风怎么接(采集音频)、声音怎么传给她(网络通道)、她写好的字怎么上屏(字幕渲染)。前端工程师正是这位“工位设计师”。

浏览器端获取语音的主流方案有两条路。简单场景用 Web Speech API,几行代码就能拿到识别文本,但它依赖浏览器内置引擎,延迟偏高、不支持自定义模型、跨浏览器差异大。进阶场景用 getUserMedia + AudioWorklet 采集原始音频,再通过 WebSocket 推送到自建或商用的 ASR 服务,实现可控的流式字幕。

专业级字幕应用推荐后一种方案。把麦克风采集的音频统一转成 16kHz 单声道、16bit PCM 编码,这是绝大多数 ASR 服务的标准输入。然后每 100-250ms 切一块,通过 WebSocket 实时推送。一块未压缩的 PCM 音频占多大带宽,用下面的公式计算。

你为速记员搭的工位是否顺手,直接决定她的发挥:采样率太低等于让她耳朵退化,WebSocket 不稳定等于传话小哥总迷路,渲染方案落后等于她写好的字迟迟上不了屏。前端工程师把这三件事做扎实,才算真正把 AI 速记员请进了会议室。

B=fs×T×b8\displaystyle B = f_s \times T \times \frac{b}{8}
音频数据量等于采样率乘以时长乘以每个样本的字节数,这决定了你的 WebSocket 需要多大的传输能力。
  1. B(音频数据量)一帧 PCM 音频在网络上传输所占用的字节数。
    B=fs×T×b8B = f_s \times T \times \frac{b}{8}
  2. f_s(采样率)每秒采集的声音样本个数,16kHz 即每秒 16000 个样本。
    fs=16000 Hzf_s = 16000 \text{ Hz}
  3. T(音频块时长)前端每个 WebSocket 消息携带的音频时长,例如 0.2 秒。
    T=0.2 sT = 0.2 \text{ s}
  4. b(位深)每个样本用多少位表示,16bit 即每个样本 2 字节。
    b8=2 Bytes\frac{b}{8} = 2 \text{ Bytes}

无障碍实践

速记员辛苦打出的字幕,最终要给谁看?也许是听力障碍的同事,也许是在嘈杂环境里听课的观众,也许是非母语学习者。字幕不只是“画面上的字”,更是一把让信息平等流动的钥匙。A11y 关注的核心,就是让每个人都能平等获得信息。

Web 无障碍标准 WCAG 2.1 对字幕有明确要求:所有预录和实时的音视频内容必须提供同期字幕;文字要有足够对比度;信息不能只靠颜色传达。实时字幕系统还要借助 ARIA live region 技术,让屏幕阅读器用户能“听到”字幕更新,而不是错过屏幕上的变化。

字幕文本与背景的对比度至少要达到 4.5:1,大号文本可放宽到 3:1。对比度由两个颜色的相对亮度计算而来,公式如下。实际工程中常用白字加黑边或半透明黑底,既能保证对比度,又能压住视频里复杂的背景画面。

速记员把字写对只是第一步,让戴助听器的同事、视力下降的观众、依赖读屏软件的用户都能“看到”或“读到”这些字,才是 A11y 追求的终点。实时字幕这盏灯,既要亮得及时,也要让每个人都被照得舒服。

C=L1+0.05L2+0.05\displaystyle C = \frac{L_{1} + 0.05}{L_{2} + 0.05}
对比度是“亮的颜色有多亮、暗的颜色有多暗”的比值,数值越高,字在背景上越清晰。
  1. C(对比度比率)前景与背景颜色的亮度比值,WCAG 要求普通文本 ≥ 4.5。
    C≥4.5:1C \geq 4.5 : 1
  2. L1(较亮颜色相对亮度)由 RGB 三通道经伽马校正后加权求和得到,白字接近 1。
    L=0.2126R+0.7152G+0.0722BL = 0.2126 R + 0.7152 G + 0.0722 B
  3. L2(较暗颜色相对亮度)深色背景的亮度值通常很低,纯黑背景接近 0。
    L2<L1L_2 < L_1
  4. 0.05(环境光补偿)加入常数避免纯黑时除数为零,使对比度上限为 21:1。
    Cmax⁡=21:1C_{\max} = 21 : 1

AI 应用场景

线上会议实时字幕

阶段:流式语音识别 + 前端实时渲染

解决的问题:听障用户无法参与线上会议,现场语速快、多人发言时纯靠耳朵跟不上。传统做法是会后发会议纪要,无法满足实时沟通需求。AI 实时字幕将会议音频流式转写,并在一秒内显示在屏幕上。

具体案例:腾讯会议、Google Meet 已内置实时字幕:浏览器端用 getUserMedia 采集麦克风音频,AudioWorklet 以 16kHz 采样,WebSocket 每 200ms 推送一帧,ASR 服务返回增量文本并附带说话人标签,前端渲染在屏幕底部。

视频编辑自动字幕

阶段:离线批量 ASR + 时间戳对齐

解决的问题:UP 主手动给视频加字幕耗时巨大,一段 10 分钟视频可能要花两小时对轴。AI 自动字幕用离线 ASR 一次性转写全文,并输出每句话的起止时间戳,直接导出 SRT/ASS 字幕文件。

具体案例:剪映“智能字幕”和 B 站投稿自动生成字幕,底层用 Whisper 类模型对整段音轨分块识别,再经标点恢复和 VAD 切句,生成可编辑的字幕轨。

课堂讲座无障碍投屏

阶段:实时字幕 + A11y 规范渲染

解决的问题:阶梯教室后排听不清、听障学生需读唇,外语讲座缺乏翻译。AI 实时字幕把教师语音转成文字投到副屏,并支持多语言翻译。

具体案例:某高校智慧教室方案中,教师佩戴领夹麦,音频经教室网关送入本地 ASR 服务器,字幕以白字黑底、28px、对比度 12:1 渲染到侧屏;火警等重要系统提示通过 ARIA live region 同步给读屏用户。

Python 演示

python55 行
import time  class StreamingCaptionSimulator:    """模拟流式语音识别字幕生成器.     演示实时字幕的三大环节: 分块输入, 增量解码, 最终归一    """     def __init__(self, decode_ms=60):        self.decode_ms = decode_ms      # 模拟解码延迟        self.partial_text = ""          # 当前临时字幕(会随上下文修正)        self.final_text = ""            # 最终字幕(音频流结束后确定)        self.block_no = 0               # 已处理音频块数     def feed(self, audio_block_text):        """送入一个音频块, 返回当前可展示的增量字幕."""        time.sleep(self.decode_ms / 1000.0)        if audio_block_text == "。":            return self.partial_text        self.partial_text += audio_block_text        self.block_no += 1        return self.partial_text     def finish(self):        """音频流结束, 提交最终字幕."""        self.final_text = self.partial_text        self.partial_text = ""        return self.final_text  def main():    speech_blocks = [        "大家好",        "欢迎来到",        "无障碍AI课堂",        "今天我们学习",        "实时字幕技术。",    ]    sim = StreamingCaptionSimulator(decode_ms=50)     print("=== AI 语音识别实时字幕模拟 ===\n")    for block in speech_blocks:        caption = sim.feed(block)        ts = sim.block_no * 250          # 每个音频块模拟 250ms        print(f"[t={ts}ms] 送入音频块: {block}")        print(f"[t={ts + sim.decode_ms}ms] 屏幕上显示: {caption}")     final_sentence = sim.finish()    print("\n=== 语音流结束, 字幕归一 ===")    print(f"最终完整字幕: {final_sentence}")  if __name__ == "__main__":    main()
目的:模拟实时字幕系统中“音频分块到达 + 增量识别 + 最终归一”的核心流程,帮助理解流式处理与整句处理的区别。
  1. self.partial_text = ""保存当前“临时字幕”,对应流式识别中的中间假设。
  2. def feed(self, audio_block_text)模拟一个音频块到达识别引擎。
  3. time.sleep(self.decode_ms / 1000.0)模拟模型解码耗时,体现“听到不等于立刻能看到”。
  4. self.partial_text += audio_block_text增量拼接已识别文本,模拟逐词蹦出的效果。
  5. def finish(self)模拟语音流结束后的最终归一,提交完整字幕。
  6. ts = sim.block_no * 250用块序号换算音频流的模拟时间戳,理解进度概念。

常见误区

误区我把 ASR 返回的文字直接塞进页面,一行行显示出来,这不就是实时字幕吗?还要做什么?

正解实时字幕还需要标点恢复、数字和金额的逆文本正则化、断句排版。比如 ASR 返回“三点零六教室”要转成“306 教室”、“we will arrive at 5pm“要转成”我们将在下午 5 点到达“。没有这些处理,字幕虽然有”字”,但读起来像流水账,反而增加阅读负担。

为何常见:表面看 ASR 输出已经是文字串,容易忽略人眼阅读对断句、格式和规范化的依赖。

误区教程里几行代码就能出字幕,我直接用 Web Speech API 上线不就行了?

正解Web Speech API 延迟波动大、结果不稳定、无法离线运行,各浏览器引擎实现也不一致,还拿不到中间数据做自定义优化。生产级字幕应用建议 getUserMedia + AudioWorklet 采集 16kHz PCM,走 WebSocket 连自建或商用 ASR,自己控制缓冲、重试和渲染。

为何常见:教学 Demo 让人误以为三五行代码就能覆盖真实场景。

误区既然离线转写准确率高,我干脆等一句话说完再把整段音频发给模型,这样字幕更准。

正解等整句结束再发,会引入句长级别的延迟——一句话说 3 秒,观众就要干等 3 秒多才看到文字。流式增量识别虽然每个瞬间是“临时假设”,但模型会在后续上下文到来时修正,配合设计良好的显示策略,既快又准。

为何常见:离线转写工具培养了“整段上传”的心智,忽略了实时场景对延迟的极度敏感。

误区反正就是一行白字,放哪都行,字小点也没关系,重点是把内容显示出来。

正解A11y 规范要求对比度 ≥ 4.5:1、字号足够大、文字不可只靠颜色区分。白字直接叠在亮色视频上可能完全看不清;纯用红色表示“警报”会让色盲用户无法感知。黑边、半透明底、大字号、ARIA live region 都是基本要求。

为何常见:视力正常的人很难体验低视力与色盲用户看字幕的困难。

误区说话人停了一秒,VAD 判定静音,我就把屏幕上的字幕清空,等着新一轮识别。

正解真实演讲中句内停顿很常见。清屏后观众刚看清的字瞬间消失,紧接着又弹出下一段,阅读负担极大。应区分“句内停顿”和“句间停顿”:短停顿保留已有字幕,长停顿才开启新一轮,并将旧字幕上滚。

为何常见:简单实现把“没有新音频”直接等同于“一句话结束”,忽略了人眼阅读的连续性。

面试题

Q1. 语音识别核心公式 $\hat{W} = \arg\max_{W} P(W \mid X)$ 的含义是?

单选题 · easy

  • A.在所有音频中找出最可能的文本
  • B.在所有文本中找出最可能的音频
  • C.对给定音频求最大概率的文本← 正确答案
  • D.对给定文本求最大概率的音频

答案:C。公式给定的是音频 X,要求在所有候选文本 W 中选出令后验概率 P(W|X) 最大的那个。A 少了“给定音频”这个条件,B 和 D 把条件与目标颠倒了,只有 C 准确描述了“已知声音找最合理文字”的决策过程。

Q2. 声学模型的主要职责是?

单选题 · easy

  • A.预测下一个词的出现概率
  • B.把音频特征映射成文本单元← 正确答案
  • C.决定字幕的颜色和对比度
  • D.压缩音频文件减小体积

答案:B。声学模型是速记员的“耳朵”,负责把声音特征映射到音素或文本单元。A 是语言模型的职责,C 是前端样式工作,D 是音频编码工作,都与识别本身无关。

Q3. 三元模型(n=3)计算 P(无障碍 | 欢迎,来到) 时,分子是哪一项?

单选题 · mid

  • A.“欢迎来到”在语料中出现的次数
  • B.“来到无障碍”在语料中出现的次数
  • C.“欢迎来到无障碍”在语料中出现的次数← 正确答案
  • D.“无障碍”在语料中出现的次数

答案:C。三元模型的分子是完整的 n 元词组“欢迎来到无障碍”同现次数,分母是前 n-1 个词“欢迎来到”的出现次数。A 是分母不是分子,B 丢掉了条件词“欢迎”,D 无任何条件信息。

Q4. 帧长 25ms、帧移 10ms,一段 200ms 的音频能切出多少帧?

单选题 · mid

  • A.8 帧
  • B.16 帧
  • C.18 帧← 正确答案
  • D.20 帧

答案:C。代入帧数公式 N = ⌊(T-L)/S⌋ + 1,T=200ms、L=25ms、S=10ms,得 ⌊175/10⌋+1 = ⌊17.5⌋+1 = 18。17.5 向下取整为 17,再加首帧 1,因此是 18 帧。

Q5. 前端实现专业级实时字幕,推荐采用哪种方案?

单选题 · mid

  • A.用浏览器自带的 Web Speech API
  • B.采集音频经 WebSocket 传识别服务← 正确答案
  • C.先录完一整段话再上传转写
  • D.用 CSS 动画自动生成字幕文本

答案:B。专业级方案是 getUserMedia + AudioWorklet 采集 16kHz PCM 音频,通过 WebSocket 流式推送到自建或商用 ASR 服务,从而控制延迟与模型。A 适合 Demo 不适合生产,C 引入句长级延迟,D 与语音识别无关。

Q6. 关于降低实时字幕端到端延迟,以下哪些做法有效?

多选题 · hard

  • A.减小音频分块大小并边采边发← 正确答案
  • B.采用更小的流式模型降低推理耗时← 正确答案
  • C.等整句话说完再统一进行解码
  • D.用增量解码先出临时字幕再修正← 正确答案

答案:ABD。减小分块降低采集端延迟,小模型降低解码延迟,增量解码让字幕提前出现,三者都有效。C 恰恰相反,等整句说完会让延迟随句长线性增长,是典型误区。

Q7. WCAG 2.1 要求普通文本与背景的对比度至少为?

单选题 · easy

  • A.3:1
  • B.4.5:1← 正确答案
  • C.7:1
  • D.21:1

答案:B。WCAG 2.1 的 AA 级标准要求普通文本对比度 ≥ 4.5:1,大号文本可放宽到 3:1。7:1 是 AAA 级标准,21:1 是黑白极端的理论最大值,3:1 只适用于大号文字。

Q8. VAD(语音活动检测)的核心作用是什么?

单选题 · easy

  • A.判断一段音频中是否有人声← 正确答案
  • B.识别出说话人是谁并做声纹
  • C.把识别文字渲染成滚动字幕
  • D.对音频做降噪和回声消除

答案:A。VAD 是速记员的“麦克风开关”,决定何时开始识别、何时停笔,避免把静音和噪声当语音。声纹识别是另一项技术,降噪是前端预处理,渲染字幕是前端展示工作。

Q9. 关于流式字幕的“增量识别”,下列说法正确的有?

多选题 · hard

  • A.每个音频块到达后立即输出中间结果← 正确答案
  • B.后续上下文会让中间结果被修正← 正确答案
  • C.增量识别结果一定等于最终识别结果
  • D.增量识别能降低观众的感知延迟← 正确答案

答案:ABD。增量识别边收边出,先用部分上下文给临时假设,再随上下文增加修正。因为中间结果可能被改写,所以 C 的“一定等于”错误;A、B、D 都准确描述了增量识别的机制与收益。

Q10. 关于 ARIA live region 在实时字幕中的作用,说法正确的有?

多选题 · mid

  • A.让字幕文字排版看起来更美观
  • B.让屏幕阅读器自动播报字幕变化← 正确答案
  • C.提高语音识别引擎的准确率
  • D.将字幕内容变化实时告知辅助技术← 正确答案

答案:BD。ARIA live region(如 role=“status“)告诉辅助技术”这里的内容会动态更新”,读屏软件随即自动播报,因此 B、D 正确。A 是视觉样式问题,C 是模型算法问题,都与 ARIA 无关。