Phase 06: Speech & Audio

Text-to-Speech (TTS) Từ Tacotron đến F5 và Kokoro

ASR đảo ngược giọng nói thành văn bản; TTS đảo ngược văn bản thành giọng nói. Dòng 2026 gồm ba phần: văn bản → token, token → mel, mel → dạng sóng. Mỗi phần có mô hình mặc định phù hợp với máy tính xách tay.

Type: Build

Languages: Python

Prerequisites: Phase 6 · 02 (Spectrograms & Mel), Phase 5 · 09 (Seq2Seq), Phase 7 · 05 (Full Transformer)

Time: ~75 minutes

Vấn đề

Bạn có một chuỗi: "Xin hãy nhắc tôi để tưới cây vào 6 giờ chiều". Bạn cần một đoạn âm thanh 3 giây có âm thanh tự nhiên, có âm âm âm chính xác (phát ngơi, căng thẳng), phát âm "cây" với giọng nói đúng, và chạy trong dưới 300 ms trên một CPU cho một trợ lý giọng nói trực tiếp. Bạn cũng cần phải trao đổi giọng nói, xử lý nhập mã chuyển đổi ("hoàn ý tôi vào 6 giờ chiều, daijoubu?"), và không xấu hổ về tên.

Các đường ống TTS hiện đại trông như thế này:

  1. Text frontend.Tiêu chuẩn hóa văn bản (thang ngày, số, email), chuyển đổi thành âm hoặc mã thông báo từ phụ, dự đoán các tính năng prosody.
  2. Acoustic model.Text → mel spectrogram. Tacotron 2 (2017), FastSpeech 2 (2020), VITS (2021), F5-TTS (2024), Kokoro (2024).
  3. Vocoder.Mel → dạng sóng. WaveNet (2016), WaveRNN, HiFi-GAN (2020), BigVGAN (2022), các bộ phận codec thần kinh trong năm 2024+.

Năm 2026, âm thanh + vocoder phân chia mờ với các mô hình phân tán đầu đến cuối và phù hợp với dòng chảy.

Khái niệm

!Tacotron, FastSpeech, VITS, F5/Kokoro side-by-side

Tacotron 2 (2017).Seq2seq: chár-embedding → BiLSTM encoder → vị trí nhạy cảm chú ý → autogressive LSTM decoder phát ra khung mel. chậm (AR), dao động trên văn bản dài.

FastSpeech 2 (2020).Không tự rút. Tự đoán thời gian đưa ra số khung mel mỗi âm thanh nhận được. 1 vượt qua, nhanh hơn Tacotron 10x. mất một số tự nhiên (sự sắp xếp đơn giản) nhưng tàu khắp nơi.

VITS (2021).Cùng đào tạo bộ mã hóa + thời gian dựa trên dòng chảy + bộ giọng HiFi-GAN kết thúc đến kết thúc với suy luận biến đổi. chất lượng cao, mô hình đơn. TTS nguồn mở thống trị 20222024. Các biến thể: YourTTS (những loa không bắn), XTTS v2 (2024, Coqui).

F5-TTS (2024).Bộ biến đổi truyền thông trên dòng chảy phù hợp. Prosody tự nhiên, sao chép âm thanh bằng không chụp với 5 giây âm thanh tham chiếu.

Kokoro (2024).Tiểu (82M), có thể chạy CPU, tốt nhất trong lớp TTS tiếng Anh cho sử dụng thời gian thực.

OpenAI TTS-1-HD, ElevenLabs v2.5, Google Chirp-3.ElevenLabs v2.5 thẻ cảm xúc ("[môn thì thầm]", "[cười]") và giọng nói nhân vật thống trị sản xuất sách âm thanh vào năm 2026.

Sự phát triển của Vocoder

EraVocoderLatencyQuality
2016WaveNetoffline onlySOTA at release
2018WaveRNN~realtimegood
2020HiFi-GAN100× realtimenear-human
2022BigVGAN50× realtimegeneralizes across speakers/langs
2024SNAC, DAC (neural codecs)integrated with AR modelsdiscrete tokens, bit-efficient

Đến năm 2026, hầu hết các mô hình "TTS" đều là kết thúc từ văn bản đến dạng sóng; quang phổ mel là một đại diện nội bộ.

Đánh giá

  • MOS (Mean Opinion Score).1/5 scale, nguồn từ đám đông.
  • CMOS (Comparative MOS).Tương tự A-vs-B, khoảng thời gian tin cậy chặt chẽ hơn cho mỗi chú thích.
  • UTMOS, DNSMOS.Các dự báo MOS thần kinh không tham chiếu được sử dụng cho bảng xếp hạng.
  • CER (Character Error Rate) via ASR.Lấy TTS ra qua Whisper, tính CER so với văn bản nhập.
  • SECS (Speaker Embedding Cosine Similarity).Chất lượng nhân tạo giọng nói.

Số 2026 trên kiểm tra-tẩy sạch LibriTTS:

ModelUTMOSCER (via Whisper)Size
Ground truth4.081.2%—
F5-TTS3.952.1%335M
XTTS v23.813.5%470M
VITS3.623.1%25M
Kokoro v0.193.871.8%82M
Parler-TTS Large3.762.8%2.3B

Hãy xây dựng nó

Bước 1: Phóng âm nhập

pythonfrom phonemizer import phonemize
ph = phonemize("Hello world", language="en-us", backend="espeak")
# 'həloʊ wɜːld'

Phoneme là cầu phổ quát. Tránh cung cấp văn bản thô cho bất cứ thứ gì dưới chất lượng cấp độ VITS.

Bước 2: chạy Kokoro (2026 CPU mặc định)

pythonfrom kokoro import KPipeline
tts = KPipeline(lang_code="a")  # "a" = American English
audio, sr = tts("Please remind me to water the plants at 6 pm.", voice="af_bella")
# audio: float32 tensor, sr=24000
  • Không hoạt động, một tập tin, 82M param.

Bước 3: chạy F5-TTS với sao chép giọng nói

pythonfrom f5_tts.api import F5TTS
tts = F5TTS()
wav = tts.infer(
    ref_file="my_voice_5s.wav",
    ref_text="The quick brown fox jumps over the lazy dog.",
    gen_text="Please remind me to water the plants.",
)

Gửi một đoạn video tham chiếu 5 giây + bản sao của nó; F5 nhân bản prosody và timbre.

Bước 4: HiFi-GAN vocoder từ đầu

Quá lớn để phù hợp với một kịch bản hướng dẫn, nhưng hình dạng là:

pythonclass HiFiGAN(nn.Module):
    def __init__(self, mel_channels=80, upsample_rates=[8, 8, 2, 2]):
        super().__init__()
        # 4 upsample blocks, total 256x to go from mel-rate to audio-rate
        ...
    def forward(self, mel):
        return self.blocks(mel)  # -> waveform

Việc đào tạo: đối kháng (chống phân biệt đối xử trên cửa sổ ngắn) + mất tích tái tạo quang phổ mel + mất tích phù hợp với tính năng.hifi-ganrepo hoặc nvidia-neMo.

Bước 5: toàn bộ đường ống (phép code)

pythontext = "Please remind me at 6 pm."
phones = phonemize(text)
mel = acoustic_model(phones, speaker=alice)      # [T, 80]
wav = vocoder(mel)                                # [T * 256]
soundfile.write("out.wav", wav, 24000)

Sử dụng nó

Số 2026:

SituationPick
Real-time English voice assistantKokoro (CPU) or XTTS v2 (GPU)
Voice cloning from 5 s referenceF5-TTS
Commercial character voicesElevenLabs v2.5
Audiobook narrationElevenLabs v2.5 or XTTS v2 + fine-tune
Low-resource languageTrain VITS on 5–20 h target-lang data
Expressive / emotion tagsElevenLabs v2.5 or StyleTTS 2 fine-tune

Nhà lãnh đạo nguồn mở từ năm 2026: F5-TTS for quality, Kokoro for efficiencyĐừng tìm Tacotron trừ khi bạn là nhà sử học.

Những bẫy

  • No text normalizer."Dr. Smith" đọc như "Doctor" hoặc "Drive"? "2026" như "twenty twenty six" hoặc "two zero two six"?
  • OOV proper nouns."Ghumare" → "ghyu-mair"? gửi một mô hình từ biểu đồ đến biểu ngữ cho các token không rõ.
  • Clipping.Nguồn phát ra của Vocoder hiếm khi clip, nhưng sự không phù hợp quy mô mel khi suy luận có thể vượt quá ± 1.0.np.clip(wav, -1, 1)- Tôi không biết.
  • Sample-rate mismatch.Kokoro phát ra 24 kHz; đường ống dẫn dòng chảy của bạn mong đợi 16 kHz → lấy mẫu lại hoặc nhận được danh hiệu.

Chuyển nó

Cứ như outputs/skill-tts-designer.mdThiết kế một đường ống TTS cho một giọng nói, độ trễ và ngôn ngữ mục tiêu nhất định.

Các bài tập

  1. Easy.Đi chạycode/main.py- Xây dựng một từ điển âm từ từ ngữ đồ chơi, ước tính thời gian mỗi âm và in một lịch trình "mel" giả.
  2. Medium.Lắp đặt Kokoro, tổng hợp cùng một câu với giọng nói af_bellavà am_adamSo sánh thời gian âm thanh và chất lượng chủ quan.
  3. Hard.Hãy ghi lại một đoạn video tham chiếu 5 giây của chính mình, sử dụng F5-TTS để nhân bản nó, báo cáo SECS giữa tham chiếu và đầu ra nhân bản.

Các điều khoản chính

TermWhat people sayWhat it actually means
PhonemeSound unitAbstract sound class; 39 in English (ARPABet).
Duration predictorHow long each phoneme lastsNon-AR model output; integer frames per phoneme.
VocoderMel → waveformNeural net mapping mel-spec to raw samples.
HiFi-GANStandard vocoderGAN-based; dominant 2020–2024.
MOSSubjective quality1–5 mean opinion score from human raters.
SECSVoice-clone metricCosine similarity between target and output speaker embedding.
F5-TTS2024 open-source SOTAFlow-matching diffusion; zero-shot cloning.
KokoroCPU English leader82M-param model, Apache 2.0.

Đọc thêm

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.