想象你在餐厅点了一桌菜,传统做法是后厨全部做完再一次性端上桌,你饿着肚子干等半小时。聪明的餐厅不会这样——他们让后厨做出一道菜就先端一道,你刚落座,凉菜就上了桌,热菜接力跟上。这个“边做边端”的智慧,正是TTS实时推理的核心。 人机对话也一样。用户说完一句话,AI如果花3秒把整段语音合成了才播放,人会明显觉得“卡顿、不自然”。流式TTS像后厨流水线:把一句话切成小块,前排服务员刚记完需求,后厨立刻开炒第一道菜;第一块音频还在播放,第二块已经在锅里翻滚。最终用户感受到的是 “话音刚落,声音就响”。 这篇文章带你从零认识TTS实时推理与流式语音合成。内容包括:流式合成原理(为什么能边生成边播放)、端到端管线(后厨里谁负责什么)、首包延迟优化(第一道菜怎么上得更快)、流式传输策略(菜怎么从后厨端到客人桌前)、实时交互体验(客人怎么随时打断换菜),以及工程落地(餐厅高峰期怎么不崩盘)。读完你会明白,所谓“AI 开口”,其实是一套精妙的实时流水线。

岗位关联

掌握流式TTS,你就能搭建 AI 语音助手、智能客服机器人等实时交互产品——这是语音领域最抢手的工程能力之一,也是从“能做 demo”进阶到“能上线”的分水岭。

目录
  1. 可视化演示
  2. 流式合成原理
  3. 端到端管线
  4. 首包延迟优化
  5. 流式传输策略
  6. 实时交互体验
  7. 工程落地实践
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示TTS实时推理从文本分块、流式合成、双缓冲播放到延迟优化的完整管线,含overlap-add平滑拼接与动态批处理加速。

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

文本分块与流式输出 长文本按句子边界切分为chunk,TTS逐块合成降低首字延迟 TTFA = 分块时间 + 首块合成时间 分块策略直接影响流式TTS的响应速度。

流式合成原理

传统餐厅一桌菜要全部做好才一次上齐,客人只能干等。聪明的餐厅改成“流水席”:第一道凉菜30秒上桌,热菜陆续接力,客人始终有得吃。流式TTS学的就是这套规矩——绝不攒齐一整段音频才播放。

传统TTS走的是“全部文本 → 全部声学特征 → 全部波形 → 统一播放”的批处理路子。它必须等整段文本全都算完,用户才能听到第一个字。流式TTS则把一句话切成小块(比如按字或按标点断句),每算出一小块音频,就立刻推给播放器。为什么能“断点续算”?因为语音合成模型天生是逐步递推的:生成第 n 块音频时,只需要知道上一步留下的“锅气”状态,以及当前这一小块输入。

Sn=f(Sn−1,xn)\displaystyle S_n = f(S_{n-1}, x_n)

1. 状态变量 $S_n$:第 n 步输出的模型状态,相当于后厨锅里保留的“锅气”,它浓缩了前面所有菜的信息。

Sn\displaystyle S_n

2. 前序状态 $S_{n-1}$:上一步留下的中间结果,让模型不必回头重读旧文本。

Sn−1\displaystyle S_{n-1}

3. 当前输入 $x_n$:新送来的一小段文本/音素块,相当于刚递进厨房的一张新点单。

xn\displaystyle x_n

4. 递推函数 $f(\cdot)$:模型内部的前向计算,它只吃“上一步状态 + 当前输入”这两样东西,就产出新一段音频。

f(Sn−1,xn)\displaystyle f(S_{n-1}, x_n)

要做到这一点,模型结构必须保证“只看过去、不看未来”,比如用因果卷积或带掩码的自注意力,这叫流式解码约束。再加上按固定时长音频分帧(如每 20ms 一小帧),就能实现增量生成——模型一边算,播放器一边响。后厨炒菜也是这样靠“锅气”往下传的,前面菜的咸淡会带进下一道,炒勺翻动之间,菜已陆续上桌。

端到端管线

点单、备料、炒菜、传菜,环环相扣。TTS 实时管线也是四段接力:文本前端是前台服务员,声学模型是大厨,声码器是装盘员,网络传输是传菜员。每一段都不能堵,堵了第一道菜就上不来。

文本前端负责把汉字变成音素/拼音序列,相当于服务员把客人需求写成后厨能看懂的单据;声学模型把音素变成声学特征(比如 mel 频谱),相当于大厨把食材炒成“半成品”;声码器(如 HiFi-GAN)再把频谱还原成可播放的波形,相当于装盘成一道完整的菜;最后通过网络传到用户设备播放。

四段必须像传送带一样串联成管线:

Dtotal=Dfront+Dacoustic+Dvocoder+Dnet\displaystyle D_{total} = D_{front} + D_{acoustic} + D_{vocoder} + D_{net}

1. 总延迟 $D_{total}$:从用户说完话到听见第一个字的时间,是体验的“生命线”。

Dtotal\displaystyle D_{total}

2. 前端耗时 $D_{front}$:文本规范化、分词转音素的耗时,类似于服务员记录并传递点单的时间。

Dfront=Tnorm+Tconvert\displaystyle D_{front} = T_{norm} + T_{convert}

3. 声学模型耗时 $D_{acoustic}$:生成第一块声学特征的时间,是大厨开火炒第一道菜的时间。

Dacoustic=Tfirst_chunk\displaystyle D_{acoustic} = T_{first\_chunk}

4. 声码器耗时 $D_{vocoder}$:把第一块特征还原成波形的时间,是装盘摆碟的时间。

Dvocoder=Twaveform\displaystyle D_{vocoder} = T_{waveform}

5. 网络耗时 $D_{net}$:音频块从服务器传到客户端的时间,是传菜员跑一趟的时间。

Dnet=Ttransmit\displaystyle D_{net} = T_{transmit}

工程上,前端按句切分后立刻把第一块发给声学模型,不等整句都转完;声学模型按 chunk 出特征,声码器按帧出波形,中间用队列缓冲衔接。这样四段像传送带一样,上游产出一点、下游就消费一点,总延迟才不会被“累加等待”拖垮——哪一环慢了,第一道菜都会晚到。

首包延迟优化

客人刚落座,第一道菜上得快不快,直接决定他对这家餐厅的好感。语音产品也一样,首包延迟——从文本输入到第一个音频块到达播放器的耗时——是生死线。业内经验是 300ms 以内基本无感,超过 500ms 用户就开始觉得“迟钝”。

怎么让第一道菜更快?第一,热启动:让模型常驻 GPU 显存,省去每次请求都加载权重的开销,相当于后厨炉火提前烧热。第二,模型蒸馏和剪枝:把大模型压缩成小模型,减少单次推理耗时,相当于把复杂的佛跳墙换成快手小炒。第三,预取文本:对“嗯”“好的”“请问还有什么可以帮您”这类高频话术提前合成好,用户话还没说完,回应已经备好。第四,缩小首个合成块的文本粒度:第一块只包含短短几个字,让“第一口”尽快出盘。

判断优化效果,要看 RTF(Real-Time Factor,实时率):

RTF=TprocessTaudio\displaystyle \text{RTF} = \frac{T_{process}}{T_{audio}}

1. 处理时间 $T_{process}$:模型把文本块变成音频块实际花费的墙钟时间。

Tprocess\displaystyle T_{process}

2. 音频时长 $T_{audio}$:这些音频块播放出来的时间长度。

Taudio\displaystyle T_{audio}

3. 实时率 $\text{RTF}$:两者相除。RTF = 1 表示刚好实时;RTF = 0.5 表示处理速度是播放速度的两倍,还有余量。

TprocessTaudio\displaystyle \frac{T_{process}}{T_{audio}}

注意 RTF 只是“底色”,真正决定首包体感的是单块处理耗时——即使 RTF 很低,如果首块要等 500ms 才生成,用户依然觉得卡。所以实践上既要把 RTF 压到远小于 1,也要针对“第一个 chunk”单独优化。后厨的智慧就在这里:第一道菜不用是大菜,凉菜、小炒先上,客人吃着吃着,热菜就自然跟上了。

流式传输策略

菜从后厨到客人桌前的这段路,靠什么运?不能靠服务员一趟一趟狂奔,那样又累又慢;得设一个“保温柜”——客户端播放缓冲,暂时存放已做好、还没来得及端上桌的音频块。

传输层最常用的是 WebSocket 长连接:一条连接双向实时推送,服务端每生成一个音频块就立刻推给客户端,延迟低、开销小。相比之下,HTTP 轮询要一遍遍建立连接、请求响应,延迟高且浪费资源,就像服务员每传一道菜都重新跑一次后厨。

但网络是有抖动的——有时快有时慢,就像传菜通道偶尔拥堵。客户端必须用缓冲来吸收抖动,缓冲太小会卡顿(菜没到,客人空等),太大则延迟高(菜在保温柜里放凉了才上桌)。目标缓冲怎么定?

Btarget=Bmin+RTT+J\displaystyle B_{target} = B_{min} + RTT + J

1. 目标缓冲 $B_{target}$:客户端应保持的音频数据量,相当于保温柜里该存几道菜。

Btarget\displaystyle B_{target}

2. 最小缓冲 $B_{min}$:播放器解码和渲染所必需的最小数据量,是保温柜的“保底存货”。

Bmin\displaystyle B_{min}

3. 往返时间 $\text{RTT}$:数据从服务端到客户端一个来回的耗时,影响“补货”能多快到达。

RTT\displaystyle RTT

4. 抖动容限 $J$:网络延迟波动的最大幅度,相当于传菜路上可能遇到的随机拥堵。

J\displaystyle J

除了缓冲,还要做码率控制:网络差时自动降低音频编码码率,减少数据量,保证不断流;以及断点续传:给每个音频帧编号,客户端发现中间缺帧就主动请求重传,就像传菜路上洒了一道菜,后厨马上补一份。保温柜里的菜刚好够下一道接上,客人既不会等,也不会吃到凉菜。

实时交互体验

好的服务员会察言观色:客人刚张嘴想插话,他立刻放下手中的活过来听。语音对话系统也要这样——不能你讲你的,用户插不上嘴。这个“察言观色”的能力叫 静音检测(VAD,Voice Activity Detection),它持续监听用户麦克风,一旦检测到用户开始说话,就触发打断响应。

打断不是简单地“停一下”,而是一套干净利落的流程:先识别出用户开口的瞬间,再取消当前正在进行的合成任务,清空还没播放的旧音频缓冲,最后立刻开始合成针对用户新问题的回答。整个流程的耗时决定了“反应快不快”:

Lresume=Ldetect+Lcancel+Lnew\displaystyle L_{resume} = L_{detect} + L_{cancel} + L_{new}

1. 恢复延迟 $L_{resume}$:从用户插话到听见新回答第一个字的总时间,是对话“机灵劲”的指标。

Lresume\displaystyle L_{resume}

2. 检测耗时 $L_{detect}$:VAD 从用户开口到确认说话的时间,通常几十毫秒内就要完成。

Ldetect\displaystyle L_{detect}

3. 取消耗时 $L_{cancel}$:终止当前线程、丢弃未播放缓冲的操作时间,动作要快,不能拖泥带水。

Lcancel\displaystyle L_{cancel}

4. 新合成耗时 $L_{new}$:针对新输入的首块合成时间,直接复用前面的首包延迟优化成果。

Lnew\displaystyle L_{new}

要做到“边听边等”,让用户觉得 AI 已经“开口了”,有三个听感指标:首包延迟要低、块与块之间的间隔要稳定、音色不能忽大忽小。只要这三点做得好,即使用户还没听完完整回复,心里也已经觉得 AI“正在说话”。这就像服务员听到招呼,马上放下手里的托盘、眼神看向客人——哪怕新菜还没上,客人也知道自己被照顾到了。

工程落地实践

餐厅高峰期,几十桌客人同时点单,后厨只有一个灶肯定不行。线上 TTS 服务同样要面对高并发。先算一笔账:单机能同时服务多少路流式合成?

Umax=CserverRTF×Raudio\displaystyle U_{max} = \frac{C_{server}}{\text{RTF} \times R_{audio}}

1. 最大并发 $U_{max}$:单台服务器能同时支撑的流式会话数,相当于后厨能同时开几桌菜。

Umax\displaystyle U_{max}

2. 服务器算力 $C_{server}$:单位时间内服务器能完成的浮点运算量,是后厨总火力。

Cserver\displaystyle C_{server}

3. 音频码率 $R_{audio}$:每秒产出的音频数据量,相当于每道菜占用的厨具和灶台。

Raudio\displaystyle R_{audio}

在实际工程中,光有算力还不够,还要做并发管理和资源调度。一个常用技巧是动态批处理:把多个请求的第一块音频拼成一个 batch 一起推理,GPU 利用率大幅提升,相当于一个大锅同时炒几桌的同一道菜。同时要建立监控告警:盯着 p95 首包延迟、卡顿率、RTF 波动,一旦指标恶化立刻报警。最后还要准备降级方案:高负载时切换为预录音应答、提示用户稍后再试,或者把“详细播报”降级为“短提示音”,保证核心体验不崩。后厨有预案,菜单分热菜和简餐,高峰时才会从容不迫。

AI 应用场景

智能语音助手实时对话

阶段:在线推理与流式交互

解决的问题:传统方案要等整段回复合成完才播放,导致“说完话后干等两三秒”,体验像对讲机。流式 TTS 把回复切成小块边合成边播,用户感觉 AI 是“脱口而出”。

具体案例:手机语音助手回应“今天天气怎么样”时,通常 200-300ms 内就说出“今天晴”几个字,后续内容继续流式补齐;智能音箱的对话式搜索也依赖同样的流式管线。

智能客服外呼与 IVR 语音机器人

阶段:规模化推理与资源调度

解决的问题:外呼场景同时有几百路通话在跑,每路都要实时合成语音。通过 RTF 优化和动态批处理,单机能支撑的并发从几十路提升到上百路,大幅降低单路成本。

具体案例:银行信用卡中心的外呼提醒机器人,接通后 300ms 内开口播报,客户中途插话可随时打断转入人工;IVR 自助查询中,用户说“查余额”,系统边合成“您的余额是”边等待后台数据返回。

实时语音翻译与同传

阶段:多模态在线推理链路

解决的问题:会议同传耳机里,说话人话音刚落要立刻出译文语音。翻译结果按句流式产出,TTS 紧接着流式合成,实现“话音落、译音起”。

具体案例:跨国会议中,主讲人说完一句英文,参会者耳机里 1 秒内响起中文语音;翻译机同样依赖流式 TTS 做到边说边译、实时跟读。

Python 演示

python61 行
import mathimport time SAMPLE_RATE = 24000CHUNK_SEC = 0.2CHUNK_SAMPLES = int(SAMPLE_RATE * CHUNK_SEC)  def split_text(text, max_chars=6):    """把文本切成适合流式输出的小块"""    return [text[i:i + max_chars] for i in range(0, len(text), max_chars)]  def make_audio_chunk(seed, n=CHUNK_SAMPLES):    """模拟声码器输出: 生成一小段正弦波 PCM 帧"""    frames = bytearray()    for i in range(n):        value = 128 + int(100 * math.sin(2 * math.pi * 220 * i / SAMPLE_RATE + seed))        frames.append(max(0, min(255, value)))    return bytes(frames)  def stream_tts(text, proc_factor=1.0):    """流式TTS模拟: 逐块产出 (chunk_text, audio_bytes, elapsed_total)"""    chunks = split_text(text)    start = time.time()    first_sent = False    for i, chunk in enumerate(chunks):        time.sleep(proc_factor * 0.03 + 0.01)  # 模拟声学模型+声码器耗时        audio = make_audio_chunk(i)        now = time.time()        if not first_sent:            first_sent = True            yield chunk, audio, now - start, True        else:            yield chunk, audio, now - start, False    total = time.time() - start  def main():    text = "欢迎使用流式语音合成系统,本系统支持边合成边播放。"    chunks = split_text(text)    total_audio_sec = len(chunks) * CHUNK_SEC    start = time.time()    first_latency = None    recv_bytes = 0    for chunk, audio, elapsed, is_first in stream_tts(text):        if is_first:            first_latency = elapsed            print("[首包] '{}' 用时 {:.3f}s".format(chunk, elapsed))        recv_bytes += len(audio)    proc_time = time.time() - start    rtf = proc_time / total_audio_sec    print("[统计] 处理 {:.3f}s | 音频总时长 {:.1f}s | RTF={:.3f}".format(proc_time, total_audio_sec, rtf))    print("[首包延迟] {:.3f}s | 每块时长 {}s | 吞吐 {:.1f} KB/s".format(        first_latency, CHUNK_SEC, recv_bytes / proc_time / 1024))    assert rtf < 1.0, "RTF 超过 1, 无法实时!"  if __name__ == "__main__":    main()
目的:用生成器模拟一个可运行的流式 TTS 管线,观察首包延迟、总处理时间和 RTF 三个指标,体会“边生成边输出”与“攒齐再发”的差异。
  1. def stream_tts(text, proc_factor=1.0)核心流式生成器,每次 yield 只产出一小块音频,这正是“边炒边上菜”的代码形态。
  2. time.sleep(proc_factor * 0.03 + 0.01)模拟每块音频的模型推理耗时,真实系统中这由 GPU 算力决定。
  3. make_audio_chunk(i)用不同相位种子生成可区分的正弦波帧,代表声码器把特征还原成波形。
  4. recv_bytes += len(audio)客户端累计收到的音频字节,用来计算吞吐,对应播放器持续消费缓冲。
  5. rtf = proc_time / total_audio_sec实时率指标:处理总耗时 ÷ 音频总时长,小于 1 才是实时系统。

常见误区

误区我以为流式 TTS 就是把整段音频一次性合成完,然后像切蛋糕一样切成小片发给客户端,这样也算“流式”。毕竟数据确实是一块一块到的。

正解这是最常见的误解。真正的流式 TTS 是从模型层面就“增量生成”:文本还没处理完,第一块音频已经算出来了。先合成完整音频再切片,首包延迟依然等于整段合成时间,用户照样干等。好比把一桌菜先全部炒好再一盘一本地端出来——菜是好菜,但客人早饿坏了。判断标准很简单:首包延迟是“第一个字的合成时间”还是“整段音频的合成时间”。

为何常见:很多人接触的是文件下载里的“流式传输”,误以为 TTS 流式只是传输层面的切片;实际上关键是生成侧的增量推进。

误区网络老抖动,那我就把客户端缓冲设得大大的,多存几秒音频,肯定就不卡了。缓冲越多越安心。

正解缓冲是“以延迟换流畅”的补药,吃多了会中毒。缓冲区过大时,用户说完话要等好几秒才听到声音——因为系统要先填满缓冲才开始播放。这就像保温柜堆满了菜才给客人上桌,菜倒是不缺,但早就凉透了。正确做法是用 B_target = B_min + RTT + J 计算动态目标,让缓冲刚好吸收网络抖动即可。

为何常见:人们天然觉得“存量多 = 安全”,却忽略了实时交互中“时间就是体验”;视频播放可以靠大缓冲预载,语音对话却不行。

误区我调参把 RTF 压到 0.5 了,觉得稳了。但上线后用户还是反馈“说完话要等很久”,很疑惑哪里出了问题。

正解RTF < 1 是“算力上能实时”的必要条件,但不是充分条件。首包延迟还受排队时间、模型加载、文本前端耗时、网络传输影响。如果请求在服务端排队等 GPU,RTF 再低用户体验也是卡顿的。好比后厨炒菜速度再快,高峰期没有灶台可用,菜照样出不来。所以既要看 RTF,也要监控 p95 首包延迟和端到端链路各环节耗时。

为何常见:RTF 是个简洁美好的数字,容易让人误以为它代表全部;实际线上延迟是多环节叠加的结果。

误区用 WebSocket 把音频块推给客户端,连接一建立,自然就流畅了。至于客户端收到后怎么处理,那是播放器的事。

正解传输连接只是“传菜通道”,客户端如果没有合适的播放缓冲和帧序号管理,网络一抖动就卡顿、一丢包就破音。服务端还要控制码率、支持断点续传,客户端要维护缓冲水位、请求重传。完整的流式体验是“生成—传输—缓冲—播放”四者协作的结果,只修好其中一段路,整条链路还是堵。

为何常见:上手时最容易关注“连接”这个可见的环节,忽略了客户端缓冲和帧管理这些“看不见的管道工”。

面试题

Q1. 流式 TTS 相比传统 TTS 的核心区别是什么?

单选题 · easy

  • A.文本切块逐段合成边播边等← 正确答案
  • B.一次性合成完整音频文件
  • C.用规则模板替代神经网络
  • D.只支持离线场景的语音合成

答案:A。流式 TTS 的核心是“增量生成、边生成边播放”,不是攒齐整段音频再发。A 正确;B 是传统批处理方式;C 说的是老式拼接/规则 TTS,与流式无关;D 流式恰恰用于在线实时场景。就像流水席是边炒边上,不是全做好再开饭。

Q2. 首包延迟指的是什么?

单选题 · easy

  • A.从文本输入到首个音频块到达← 正确答案
  • B.从文本输入到全部音频完成
  • C.从数字信号转成模拟信号
  • D.从模型训练到模型上线部署

答案:A。首包延迟是用户感知“AI 开口”的关键指标,指从文本输入到第一个音频块到达播放器的耗时,对应第一道菜上桌的时间。B 是总合成时间,C 是数模转换,D 是部署流程,都与首包延迟无关。

Q3. RTF 的物理含义是什么?

单选题 · mid

  • A.处理时间与音频时长的比值← 正确答案
  • B.音频时长与处理时间的比值
  • C.网络传输与合成时间比值
  • D.首包延迟与总时长比值

答案:A。RTF(实时率)= 处理时间 ÷ 音频时长。RTF < 1 表示模型每秒能产出超过 1 秒的音频,是实时的基本前提。B 是倒数,C 和 D 拼凑了无关比值。就像做菜速度必须快过客人吃饭速度,才有可能边做边供。

Q4. 流式 TTS 中“状态递推”的好处是什么?

单选题 · mid

  • A.生成当前块只依赖上一状态← 正确答案
  • B.每次都要重算全部历史输入
  • C.可以完全离线进行文本处理
  • D.声码器不需要接收任何输入

答案:A。状态递推 $S_n = f(S_{n-1}, x_n)$ 让模型生成当前块时只需上一步状态和当前输入,不用重算全部历史,这是流式实时性的核心。B 是批处理的坏路子,C 与流式无关,D 声码器必须接收声学特征才能出波形。

Q5. 下列哪些手段能降低首包延迟?

多选题 · mid

  • A.模型蒸馏和剪枝压缩模型← 正确答案
  • B.模型常驻显存实现热启动← 正确答案
  • C.增加音频缓冲区的容量
  • D.缩小首个合成块的文本粒度← 正确答案

答案:ABD。A 减少单块推理耗时,B 省去模型加载开销,D 让第一块更快出盘,都能降低首包延迟。C 反而会增加延迟,因为要先填满更大的缓冲才播放。把控缓冲区像把握保温柜存货,多存菜不是快,是慢。

Q6. 流式传输中目标缓冲大小与哪些因素相关?

多选题 · mid

  • A.播放所需最小缓冲← 正确答案
  • B.网络往返时间← 正确答案
  • C.网络抖动容限← 正确答案
  • D.文本总字数长度

答案:ABC。目标缓冲公式 $B_{target} = B_{min} + RTT + J$,分别对应 A、B、C。D 文本总字数只影响总合成时长,不决定瞬时缓冲水位。缓冲是为了吸收“传菜通道”的抖动,而不是为了装下整桌菜。

Q7. WebSocket 相较于 HTTP 轮询的优势是什么?

单选题 · mid

  • A.长连接双向推送开销低← 正确答案
  • B.每次请求都会断开重连
  • C.不需要服务端任何支持
  • D.只能推送给浏览器客户端

答案:A。WebSocket 建立一条长连接后,服务端可主动双向推送音频块,省去反复建连的握手开销。B 是轮询的缺点,C 夸大了普适性(需要服务端支持协议),D 不只限浏览器,移动端同样可用。

Q8. VAD(静音检测)在对话 TTS 中的作用是什么?

单选题 · mid

  • A.发现用户插话从而触发打断← 正确答案
  • B.提高声码器输出音频码率
  • C.把文本直接编码成语音帧
  • D.增强合成语音的韵律表现

答案:A。VAD 持续监听用户麦克风,一旦检测到人声就判断“用户要插话”,触发打断响应。B 是码率控制的事,C 是声码器的事,D 是韵律模型的事。VAD 就像服务员竖着耳朵听客人是否要开口。

Q9. 打断恢复总延迟由哪几段构成?

单选题 · hard

  • A.检测耗时加取消耗时加重新合成← 正确答案
  • B.网络传输耗时加拼接耗时
  • C.文本分词耗时加特征提取耗时
  • D.音频渲染耗时加设备启动耗时

答案:A。打断恢复延迟 $L_{resume} = L_{detect} + L_{cancel} + L_{new}$,即检测到用户插话、取消当前合成、新回答首块合成三段之和。B、C、D 都不完整:网络传输只是其中一段,分词属于文本前端,设备渲染不属于打断链路。

Q10. 下列哪些是流式 TTS 的典型应用?

多选题 · easy

  • A.智能客服实时语音播报← 正确答案
  • B.语音助手边合成边应答← 正确答案
  • C.离线批量生成有声书
  • D.实时翻译语音输出← 正确答案

答案:ABD。A、B、D 都需要“话音落、语音起”的实时体验,是流式 TTS 的典型场景。C 离线批量生成不追求首包延迟,属于批处理模式,不需要流式。流式是给“等着听”的人准备的,不是给“存着听”的人准备的。