Phase 06: Speech & Audio

متن به زبان (TTS) از تاکوترون تا F5 و کوکورو

ASR گفتار را به متن تبدیل می کند؛ TTS متن را به گفتار تبدیل می کند. استیک 2026 سه بخش است: متن → توکن ها، توکن ها → mel، mel → شکل موج. هر بخش دارای یک مدل پیش فرض است که در یک لپ تاپ قرار می گیرد.

Type: Build

Languages: Python

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

Time: ~75 minutes

مشکل

شما یک رشته دارید: "لطفا به من یادآوری کنید که ساعت 6 بعد از ظهر گیاهان را آب دهم". شما به یک کلیپ صوتی 3 ثانیه نیاز دارید که طبیعی به نظر برسد، پروسودی درست (پاز، استرس) داشته باشد، "بات ها" را با صوتی درست تلفظ کند و در زیر 300 ms در یک CPU برای یک دستیار صدا زنده اجرا شود. شما همچنین باید صدای خود را عوض کنید، ورودی های تغییر کد را اداره کنید ("به من در ساعت 6 بعد از ظهر یادآوری کنید، daijoubu؟") و خود را در مورد نام خجالت نکشید.

خطوط لوله مدرن TTS به این شکل هستند:

  1. Text frontend.متن (تاریخ ها، اعداد، ایمیل ها) را عادی سازی کنید، به فونم ها یا توکن های زیر کلمه تبدیل کنید، ویژگی های پروسودی را پیش بینی کنید.
  2. Acoustic model.متن → طیف سنجی میل. تاکوترون 2 (2017), FastSpeech 2 (2020), VITS (2021), F5-TTS (2024), کوکورو (2024).
  3. Vocoder.Mel → شکل موج. WaveNet (2016), WaveRNN, HiFi-GAN (2020), BigVGAN (2022), صداهای کدک عصبی در سال 2024+.

در سال 2026، آکوستیک + vokoder با انتشار پایان به پایان و مدل های تطابق جریان تقسیم می شود. اما مدل ذهنی سه بخش هنوز برای اشکال زدایی برقرار است.

مفهوم

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

Tacotron 2 (2017).Seq2seq: Char-embedding → BiLSTM encoder → توجه حساس به محل → autoregressive LSTM decoder می فرستد mel frames. آهسته (AR) ، تکان دهنده در متن طولانی. هنوز هم به عنوان یک خط پایه ذکر شده است.

FastSpeech 2 (2020).بدون خودکشی. پیش بینی کننده طول مدت تولید می کند که هر فونم چه تعداد فریم mel را دریافت می کند. 1 عبور، 10x سریع تر از تاکوترون. برخی از طبیعی بودن (مسلسل یکسره) را از دست می دهد اما در همه جا می رود.

VITS (2021).با هم ترن های کدر + مدّت مبتنی بر جریان + vocoder HiFi-GAN پایان به پایان با نتیجه گیری متغیر. کیفیت بالا، مدل واحد. TTS منبع باز تسلط 20222024.

F5-TTS (2024).ترانسفورماتور پخش بر روی تطابق جریان پروسودی طبیعی، کلون صدا صفر شوت با 5 ثانیه صدا مرجع بالا از جدول رتبه بندی TTS منبع باز 2026 335M پارام

Kokoro (2024).کوچک (82M) ، قابل اجرا CPU، بهترین TTS انگلیسی در کلاس برای استفاده در زمان واقعی.

OpenAI TTS-1-HD, ElevenLabs v2.5, Google Chirp-3.وضعیت تجاری هنر. برچسب های عاطفی ElevenLabs v2.5 ("[همسنگیده] ، "[خنده]") و صداهای شخصیت در تولید کتاب های صوتی در سال 2026 تسلط دارند.

تکامل 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

تا سال 2026 بیشتر مدل های "TTS" از متن به شکل موج پایان می یابند؛ طیف سنجی mel یک نمایش داخلی است.

ارزیابی

  • MOS (Mean Opinion Score).1-5 مقیاس، از طریق منابع جمعی هنوز استاندارد طلا، دردناک آهسته
  • CMOS (Comparative MOS).ترجیح A versus B، فاصله اعتماد بیشتر در هر نوتیشن
  • UTMOS, DNSMOS.پيش بيني هاي عصبي بدون مرجعي از MOS استفاده ميکنن
  • CER (Character Error Rate) via ASR.از طریق Whisper TTS رو اجرا کن، CER رو با متن ورودی محاسبه کن.
  • SECS (Speaker Embedding Cosine Similarity).کیفیت کلون صدا

شماره 2026 در آزمایش پاکسازی 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

آن را بسازید

مرحله ی اول: واردات را فونمیز کنید

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

فونم ها پل جهانی هستند. از تغذیه متن خام به چیزی که کیفیت سطح VITS پایین تر باشد اجتناب کنید.

مرحله 2: Kokoro (2026 CPU پیش فرض) اجرا کنید

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

غیر فعال اجرا ميشه، واحد فایل، 82 ميليون پارام

مرحله 3: F5-TTS را با کلون صدا اجرا کنید

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.",
)

یک کلیپ مرجع 5 ثانیه + نقل آن را ارسال کنید. F5 پروسودی و تيمبر را کلون می کند.

مرحله 4: Vocoder HiFi-GAN از ابتدا

خیلی بزرگ برای اینکه در یک اسکریپت آموزش قرار بگیرد، اما شکل اینه:

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

آموزش: خصومت (تفرقهگر در پنجره های کوتاه) + از دست دادن بازسازی طیف های Mel + از دست دادن مطابقت ویژگی ها.hifi-ganrepo یا nvidia-NeMo

مرحله 5: خط خط خط کامل (پسیدوکوید)

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)

ازش استفاده کن

دسته 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

رهبر منبع باز از سال 2026: F5-TTS for quality, Kokoro for efficiencyتا وقتي که تاريخ شناسي نباشي به تاکوترون دست نزن

دام ها

  • No text normalizer."دکتر اسمیت" به عنوان "دکتر" یا "Drive" میخواد؟ "2026" به عنوان "بیست و بیست و شش" یا "دو صفر دو شش"؟ قبل از فونمیزر عادی سازی.
  • OOV proper nouns."گومار" → "گيو-ماير"؟ براي توکن هاي ناشناخته مدل گرافيم به فونيم بازپسين ارسال کن
  • Clipping.تولید Vocoder به ندرت کلیپ می شود، اما عدم مطابقت مقیاس میلم در نتیجه می تواند بیش از ±1.0 باشد. همیشه np.clip(wav, -1, 1). .
  • Sample-rate mismatch.کوکورو 24 کیلو هرتز تولید می کند؛ لوله پایین جریان شما انتظار دارد 16 کیلو هرتز → نمونه مجدد یا نامگذاری شود.

-باده

پس ازoutputs/skill-tts-designer.md. طراحی یک خط لوله TTS برای یک هدف خاص صدا، تاخیر و زبان.

تمرینات

  1. Easy.فرار کنcode/main.py. از لغات اسباب بازی لغت تلفنی ایجاد می کند، مدت زمان هر تلفنی را تخمین می زند و یک برنامه "میل" جعلی چاپ می کند.
  2. Medium.کوکورو رو نصب کن، و همون جمله رو با صداي هم جمع کنaf_bellaوam_adam.مدت صدا و کیفیت ذهنی را مقایسه کنید
  3. Hard.يه کليپ مرجعي 5 ثانيه از خودت ضبط کن با استفاده از F5-TTS کلونش کن SECS را بين مرجع و خروجي کلونش گزارش کن

اصطلاحات کلیدی

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.

خواندن بیشتر

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.