← aipaipai.cloud · INDEX
DOCS // INTERACTIVE NEO-BRUTALIST

TTS://
底层原理

把「文字符号」变成「声音波形」这件事,拆到机器真正在干的活。 本文档为教学性模拟——所有频谱/波形/向量均为确定性可视化,用以理解原理,非真实模型输出。

ENGINE_READY BACKEND: MLX / CUDA PORT: 17493 VOICES: 7 STATUS: LOCAL_ONLY

00 本质矛盾

文字是离散符号 · 声音是连续波形。TTS 要学出这条映射。

输入文本

DISCRETE
字符数(符号)
11
离散 · 可数
采样点数(波形)
528,000
连续 · @48kHz × 11s

同样这段文字,机器最终要吐出几十万个浮点数。这就是为什么中间要分阶段处理——直接学映射太难。

01 三阶段演进

TTS 技术走过的三代。点击切换。

CONCATENATIVE

把预先录好的音素片段像拼图一样接起来。自然但死板,韵律僵硬。

致命缺陷:想换一个人的声音,得重新录全部片段——几乎无法克隆。Siri 早期就是这个路子。

[h][ə][l][oʊ] // 从库里挑片段拼接
PARAMETRIC / HMM

用统计模型预测语音参数(基频、频谱包络),再喂给声码器合成波形。

比拼接灵活,但「机械感」重——听起来像机器人在念字。

f0_curve + spectral_envelope → vocoder → 波形(略机械)
NEURAL · 当前主流

端到端用深度网络学习「文字→声音」的映射。Voicebox 的 7 个引擎全部走这条路。

这也是为什么能做出自然克隆——模型学会了从参考音频提取音色条件,而非靠录音库。

text → [neural net] → mel → [neural vocoder] → 自然语音

02 神经 TTS 管道

输入文字,依次跑过四阶段。点 [RUN] 观察每一步产出。

输入文本

FRONTEND ACOUSTIC VOCODER OUTPUT // idle
1文本前端 · FRONTEND
规范化
音素化 (G2P)
2声学模型 · ACOUSTIC MODEL

音素 → 梅尔频谱 (mel-spectrogram)。时间×频率的能量图,描述「该发出什么声音」。

3声码器 · VOCODER

频谱 → 波形。HiFi-GAN 之类全卷积生成器,并行生成。

4输出 · AUDIO OUTPUT
sample_rate: duration: samples:

[PLAY] 用 Web Audio 把文本字符映射成方波音调序列真发声(示意,非真语音)。

03 声音克隆原理

选一个参考音色 → 看它被编码成「条件向量」喂给模型。模型本身不变。

speaker embedding(条件向量可视化)

参考音频经编码器压缩成固定长度的向量,代表这个人的音色/韵律。生成时作为条件输入。

selected: dims: 16 (示意) → 同一音色编码出同一向量,故可缓存(Voicebox 用 audio_hash 做缓存键)

04 Voice Prompt 三种模式

各引擎自行决定怎么把「参考音频」变成喂给模型的条件。点击切换。

PATTERN A Qwen3-TTS · LuxTTS

提前把参考音频编码成张量并缓存,推理时直接喂给模型。

encoded = model.encode_prompt(audio_path)
return encoded, False // (prompt, was_cached)
PATTERN B Chatterbox · Turbo · TADA

先存文件路径,推理时才真正读取编码。

return {"ref_audio": audio_path, "ref_text": reference_text}, False
PATTERN C Kokoro · Qwen CustomVoice

引擎自带一批内置音色,按 ID 查表。无克隆步骤。

return {"voice_type":"preset","preset_engine":"kokoro","preset_voice_id":"am_adam"}, False

05 概念映射

Voicebox 文档里的术语 → 底层含义。

Voicebox 概念底层含义
audio_array + sample_rate模型最终输出波形数组;采样率定频率上限(奈奎斯特=采样率/2),LuxTTS 48kHz → 24kHz 上限,高于人耳 20kHz
seed控制推理随机数。同文本+同 seed 可复现;换 seed 产生变体(即「takes」)
needs_trim某些引擎输出尾部带静音,需 trim_tts_output() 截掉
retries_runaway模型偶尔失控(噪音/无限重复),检测到则拆成更小块重试
instruct自然语言风格控制,仅 Qwen CustomVoice 真正接入 instruct head
MLX / CUDA / MPS张量计算加速后端。MPS「算子缺失」=该引擎用了 PyTorch MPS 后端尚未实现的算子,退回 CPU
串行 task_queue + 模型钉扎显存有限(Qwen 1.7B ~6GB),串行避免争用;切换尺寸先 del 旧模型再装新的

06 Seed 实验台

固定文本,调 seed → 看波形如何变化。同 seed 必出同波形(复现);换 seed 出变体(takes)。

text "The quick brown fox"
fingerprint 0x00000000 // text+seed 的 hash,同输入恒等

输出波形

variation Δ: 0.0% 相比 seed=0 基线的差异度
为什么这样设计?

神经 TTS 推理带随机性(温度采样、dropout)。seed 锁定随机数发生器,于是「相同文本 + 相同 seed → 相同输出」,这就是复现性。换 seed 就是一次新的随机采样,得到不同变体——也就是 Voicebox 里 generate() 的 seed 参数和「takes(重生成)」功能的原理。