Skip to content

Синтез речи

Синтез речи (Text-to-Speech, TTS) — это технология, которая преобразует текст в искусственно сгенерированную человеческую речь.

Windows SAPI

Windows SAPI — это встроенный синтез речи в Windows.
Он использует системные голоса, которые уже установлены в операционной системе, поэтому не требует скачивания нейросетевых моделей.

Такой вариант подходит для простых голосовых уведомлений робота, отладки и быстрых экспериментов.

Особенности

  • работает без интернета;
  • не требует видеокарту;
  • не требует скачивания TTS моделей;
  • использует встроенные голоса Windows;
  • можно запускать из PowerShell, Python или C#;
  • качество зависит от установленных голосов Windows.

Установка и запуск

Устанавливать ничего не нужно.
Открыть PowerShell и посмотреть список доступных голосов:

Add-Type -AssemblyName System.Speech
$synth = New-Object System.Speech.Synthesis.SpeechSynthesizer

$synth.GetInstalledVoices() | ForEach-Object {
    $_.VoiceInfo.Name
}

Произнести текст:

Add-Type -AssemblyName System.Speech
$synth = New-Object System.Speech.Synthesis.SpeechSynthesizer

$synth.SelectVoice("Microsoft Irina Desktop")
$synth.Speak("Привет! Это встроенный голос Windows.")

Сохранить речь в WAV файл:

Add-Type -AssemblyName System.Speech
$synth = New-Object System.Speech.Synthesis.SpeechSynthesizer

$synth.SelectVoice("Microsoft Irina Desktop")
$synth.SetOutputToWaveFile("output.wav")
$synth.Speak("Привет! Это тест синтеза речи.")
$synth.Dispose()

Установить библиотеку:

pip install pyttsx3

Посмотреть список доступных голосов:

import pyttsx3

engine = pyttsx3.init("sapi5")

for voice in engine.getProperty("voices"):
    print(voice.id, voice.name)

Произнести текст:

import pyttsx3

engine = pyttsx3.init("sapi5")
engine.setProperty("voice", "Microsoft Irina Desktop")
engine.say("Привет! Это встроенный голос Windows.")
engine.runAndWait()

Если имя голоса не сработало, надо взять voice.id из списка голосов и передать его в setProperty.

Сохранение в WAV через Python

import pyttsx3

engine = pyttsx3.init("sapi5")
engine.setProperty("voice", "Microsoft Irina Desktop")
engine.save_to_file("Привет! Это тест синтеза речи.", "output.wav")
engine.runAndWait()

После запуска появится файл output.wav.

Параметры

Параметр Описание
voice выбранный системный голос
rate скорость речи
volume громкость от 0.0 до 1.0

Пример настройки скорости и громкости:

import pyttsx3

engine = pyttsx3.init("sapi5")
engine.setProperty("rate", 160)
engine.setProperty("volume", 1.0)
engine.say("Робот готов к работе.")
engine.runAndWait()

Ограничения

Windows SAPI не является нейросетевым TTS.
Качество речи обычно проще, чем у Piper, Silero или VibeVoice.

Набор голосов зависит от установленных языковых пакетов Windows.
Если русского голоса нет в списке, его надо установить в настройках Windows.

Пример озвучки

Текст ниже — краткий пересказ идеи первого закона робототехники Азимова, не дословная цитата.

Windows SAPI, Microsoft Irina Desktop
Первый принцип: безопасность человека важнее любых действий робота.

TinyTTS

TinyTTS — это очень маленькая модель синтеза речи для английского языка.
Она подходит для простых голосовых ответов робота, ассистента или локального веб интерфейса, когда не хочется использовать облачные API и большую модель.

GitHub, PyPI, npm

Особенности

  • работает локально на CPU;
  • не требует видеокарту;
  • модель маленькая;
  • генерирует WAV аудио;
  • поддерживает только английский язык;
  • есть версия для Python и Node.js.

TinyTTS удобно использовать в связке:

LLM → текст ответа → TinyTTS → WAV → динамик робота

Установка и запуск

Установить библиотеку:

pip install tiny-tts

Пример генерации речи:

from tiny_tts import TinyTTS

tts = TinyTTS()
tts.speak("Hello world!", output_path="hello.wav")

После запуска появится файл hello.wav.

Python-версия удобна, если основной код робота уже написан на Python.
Но она может требовать дополнительные зависимости, например PyTorch.

Как установить Node.js

Node.js нужен только для версии TinyTTS на JavaScript.
Скачать установщик можно с официального сайта:

https://nodejs.org/en/download

После установки проверить в терминале:

node --version
npm --version

Если команды выводят версии, Node.js установлен правильно.

Установить библиотеку:

npm init -y
npm install tiny-tts

Создать файл tts.js:

const TinyTTS = require('tiny-tts');

async function main() {
  const tts = new TinyTTS();

  try {
    await tts.speak('Hello world!', {
      output: 'hello.wav',
      speaker: 'MALE',
      speed: 1.0,
    });
  } finally {
    await tts.dispose();
  }
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });

Запустить:

node tts.js

Node.js версия удобна для локального веб интерфейса.
Она работает через ONNX Runtime и не требует Python.

Параметры

Параметр Описание
output / output_path имя WAV файла
speaker голос: MALE или FEMALE
speed скорость речи, 1.0 — обычная

У TinyTTS нет большого набора голосов. Это маленькая модель для простого английского синтеза речи, поэтому выбор голоса ограничен.

Ограничения

TinyTTS не подходит для русского языка.
Если передать русский текст, произношение будет неправильным, потому что модель и фонемизация рассчитаны на английский язык.

Пример озвучки

Текст ниже — краткий пересказ идеи второго закона робототехники Азимова, не дословная цитата.

TinyTTS, FEMALE
Second principle: a robot follows human instructions only when they do not put people at risk.

Piper

Piper — это локальный нейросетевой синтезатор речи.
Он работает через ONNX модели и подходит для роботов, голосовых ассистентов и локальных приложений, где нужна речь без облачных API.

GitHub, Releases, Voices

Особенности

  • работает локально;
  • не требует интернета после скачивания модели;
  • использует ONNX Runtime;
  • поддерживает много языков, включая русский;
  • для каждого голоса нужны два файла: .onnx и .onnx.json;
  • можно запускать из командной строки или из Python.

Для русского языка есть готовые голоса:

Голос Язык Качество
ru_RU-denis-medium русский medium
ru_RU-dmitri-medium русский medium
ru_RU-irina-medium русский medium
ru_RU-ruslan-medium русский medium

Установка и запуск

Скачать архив для Windows:

piper_windows_amd64.zip

Распаковать архив, например в папку piper.

Где брать голоса

Голоса Piper хранятся отдельно от программы.
Для каждого голоса надо скачать два файла:

  • имя_голоса.onnx
  • имя_голоса.onnx.json

Русские голоса можно найти здесь:

https://huggingface.co/rhasspy/piper-voices/tree/main/ru/ru_RU

Пример для голоса ru_RU-irina-medium:

ru_RU-irina-medium.onnx
ru_RU-irina-medium.onnx.json

Запуск из терминала:

echo Привет! Это тест синтеза речи через Piper. | piper.exe --model ru_RU-irina-medium.onnx --config ru_RU-irina-medium.onnx.json --output_file output.wav

После запуска появится файл output.wav.

Установить Piper через pip:

pip install piper-tts

Скачать голос, например ru_RU-irina-medium:

ru_RU-irina-medium.onnx
ru_RU-irina-medium.onnx.json

Запустить синтез речи:

echo "Привет! Это тест синтеза речи через Piper." | piper --model ru_RU-irina-medium.onnx --config ru_RU-irina-medium.onnx.json --output_file output.wav

После запуска появится файл output.wav.

Параметры

Параметр Описание
--model путь к .onnx модели голоса
--config путь к .onnx.json конфигу модели
--output_file имя WAV файла
--speaker номер голоса, если модель мультиспикерная
--length_scale длина фонем, влияет на скорость речи
--noise_scale вариативность генерации
--noise_w вариативность длительности фонем
--sentence_silence пауза между предложениями

Обычно для простого запуска достаточно указать только модель, конфиг и выходной файл.

Пример с настройками

echo "Робот готов к работе." | piper --model ru_RU-irina-medium.onnx --config ru_RU-irina-medium.onnx.json --output_file robot.wav --length_scale 1.0 --noise_scale 0.667 --noise_w 0.8 --sentence_silence 0.2

Если length_scale меньше 1.0, речь будет быстрее.
Если больше 1.0, речь будет медленнее.

Ограничения

Piper не клонирует голос сам по себе.
Он использует заранее обученные модели голосов.

Качество зависит от выбранной модели.
Для простых голосовых ответов робота Piper подходит хорошо, но для очень эмоциональной или актерской речи лучше использовать более тяжелые TTS модели.

Пример озвучки

Текст ниже — краткий пересказ идеи третьего закона робототехники Азимова, не дословная цитата.

Piper, ru_RU-ruslan-medium
Третий принцип: робот бережёт себя, пока это не мешает безопасности и приказам человека.

KazEmoTTS

VibeVoice

Скачать VibeVoicePortable_v3.bat.
Запустить файл и выбрать запуск установки. После установки можно будет запустить веб интерфейс.