JSON-запрос с полем text. Ответ — файл audio/wav.
curl -X POST https://tts.user2168.space/tts \
-H "Content-Type: application/json" \
-d '{"text": "Привет, как дела?"}' \
--output speech.wav
То же самое, но текст передаётся в query-параметре — удобно для браузера и тега <audio>. Кириллица в URL кодируется в 9 байт на символ, поэтому при длинных текстах (примерно от 800–900 символов) nginx отвечает 414 — для длинных текстов используй POST.
curl -G --data-urlencode "text=Привет, как дела?" \
https://tts.user2168.space/tts --output speech.wav
Пример вставки на страницу:
<audio src="https://tts.user2168.space/tts?text=Привет!" controls></audio>
Чтобы выделить отдельные слова, оберни их звёздочками прямо в тексте. Выделенное слово озвучивается чуть медленнее и громче, с короткими паузами вокруг — это приближённое логическое ударение, а не управление тоном.
| Разметка | Эффект |
|---|---|
*слово* | лёгкое выделение — чуть медленнее и громче |
**слово** | сильное выделение — заметно медленнее и громче |
curl -X POST https://tts.user2168.space/tts \
-H "Content-Type: application/json" \
-d '{"text": "Я **очень** рад тебя видеть!"}' \
--output speech.wav
Незакрытые звёздочки остаются обычным текстом. Если нужен символ умножения — пиши с пробелами: 2 * 3.
| Параметр | Где | Описание |
|---|---|---|
text | body / query | Текст для озвучки, UTF-8. От 1 до 2000 символов. |
| Поле | Значение |
|---|---|
| Content-Type | audio/wav |
| Формат | PCM 16 бит, 22 050 Гц, моно |
Заголовок X-Sample-Rate | частота дискретизации (22050) |
| Код | Когда |
|---|---|
| 400 | Текст состоит только из пробелов |
| 422 | Отсутствует поле text, пустой текст, невалидный JSON или текст длиннее 2000 символов |
| 429 | Слишком частые запросы — общий лимит для всех клиентов ~4 запроса/с |
| 502 / 504 | Сервис перезапускается или очень длинный текст |
curl https://tts.user2168.space/health
{"status":"ok","model":"alena_piper_ep119","language":"ru",
"voice_author":"raiday","service_author":"user2168",
"sample_rate":22050,"channels":1,"format":"wav","max_text_length":2000}
*слово* и **слово**.