Реализация SSML-разметки для управления интонацией и паузами
SSML (Speech Synthesis Markup Language) — XML-диалект для точного контроля произношения, пауз, интонации и темпа в TTS. Стандарт W3C, поддерживается Google TTS, Azure, Amazon Polly, Yandex SpeechKit.
Базовые SSML-теги
<speak>
<!-- Пауза -->
Добрый день. <break time="500ms"/> Рад вас слышать.
<!-- Скорость и тональность -->
<prosody rate="slow" pitch="+2st" volume="loud">
Важное объявление!
</prosody>
<!-- Произношение чисел, дат, аббревиатур -->
Ваш заказ <say-as interpret-as="digits">12345</say-as>
от <say-as interpret-as="date" format="dd.MM.yyyy">01.03.2024</say-as>
на сумму <say-as interpret-as="currency" language="ru-RU">1500 RUB</say-as>.
<!-- Фонетическое произношение -->
Компания <phoneme alphabet="ipa" ph="ˈbɛtə">Beta</phoneme>.
<!-- Акцент на слове -->
Позвоните <emphasis level="strong">сейчас</emphasis>!
<!-- Переключение языка -->
<lang xml:lang="en-US">Machine learning</lang> — ключевая технология.
<!-- Эффекты для телефонии (Azure) -->
<mstts:express-as style="customerservice">
Чем могу помочь?
</mstts:express-as>
</speak>
Генератор SSML для IVR
from xml.etree.ElementTree import Element, SubElement, tostring
class SSMLBuilder:
def __init__(self, lang: str = "ru-RU"):
self.speak = Element("speak", {
"version": "1.0",
"xmlns": "http://www.w3.org/2001/10/synthesis",
"xml:lang": lang
})
def add_text(self, text: str) -> "SSMLBuilder":
self.speak.text = (self.speak.text or "") + text
return self
def add_pause(self, ms: int) -> "SSMLBuilder":
br = SubElement(self.speak, "break", {"time": f"{ms}ms"})
return self
def add_prosody(self, text: str, rate: str = "medium",
pitch: str = "medium") -> "SSMLBuilder":
p = SubElement(self.speak, "prosody",
{"rate": rate, "pitch": pitch})
p.text = text
return self
def build(self) -> str:
return tostring(self.speak, encoding="unicode")
# Использование
ssml = (SSMLBuilder()
.add_text("Добрый день! ")
.add_pause(300)
.add_prosody("Ваш баланс составляет пять тысяч рублей.", rate="slow")
.build())
Поддержка SSML по провайдерам
| Тег | Azure | AWS Polly | Yandex | |
|---|---|---|---|---|
<break> |
✓ | ✓ | ✓ | ✓ |
<prosody> |
✓ | ✓ | ✓ | частично |
<say-as> |
✓ | ✓ | ✓ | ограниченно |
<phoneme> |
✓ | ✓ | ✓ | — |
<emphasis> |
✓ | ✓ | ✓ | — |
<lang> |
✓ | ✓ | — | — |
Сроки: разработка SSML-шаблонов для IVR — 2–3 дня. SSML-генератор для динамических ответов — 3–5 дней.







