Разметка синтеза речи SSML

SSML (Speech Synthesis Markup Language) — язык разметки синтеза речи. SSML базируется на спецификации от W3C. Общий список поддерживаемых тегов:

Тег Пример Описание
Тег break <speak>Привет!<break time="800ms" />Пойдём в кино?</speak> Добавление паузы в текст
Тег sub <speak>Какие <sub alias="щета">счета</sub> открыты?</speak> Замена текста на более привычный по произнесению
Тег audio <speak><audio text="м?"/> Что?</speak> Вставка звуковых эффектов, добавление или замена междометий и восклицаний в синтезируемую речь
Тег say-as <speak><say-as interpret-as="value" format="gender_case">число</say-as> текст</speak> Правильное произнесение аббревиатур и фраз, содержащих числа, например, номера телефонов, даты и денежные суммы

Также для синтезируемого текста внутри SSML-разметки поддерживаются различные символы. Список поддерживаемых символов вы можете найти в разделе Символы и междометия.

Описание поддерживаемых тегов

Тег break

Тег используется для расстановки пауз внутри текста. Тег имеет несколько атрибутов:

<break time="VALUEx" strength="STR" /> , где:

  • VALUE — любое десятичное число, которое означает продолжительность паузы. Вместе со временным значением паузы указываются единицы измерения x без пробелов в миллисекундах (ms) или секундах (s).
  • STR — строковое значение, которое может принимать значения:

    • x-weak;
    • weak;
    • medium;
    • strong;
    • x-strong (совпадает со strong).

Если вы не укажете атрибуты тегу <break />, то тег получает значение по умолчанию strength="medium". Атрибут time имеет приоритет перед атрибутом strength.

Пример:

    <speak>
    Привет!
    <break time="200ms" />
    Как прошёл день?
    <break strength="weak" />
    </speak>

Тег sub

Тег используется для замены звучания слов на более привычные. Например, мы говорим "щета", а не "счета".

<sub alias="TEXT">REPLACED_TEXT</sub> , где:

  • TEXT — текст для генерации
  • REPLACED_TEXT — заменяемый текст

Пример:

    <speak><sub alias="щета">счета</sub></speak>

Тег audio

Есть несколько вариантов использования тега audio.

  1. Добавление звуковых эффектов из Библиотеки звуков:

<audio text="URL">value</audio>, где:

  • URL — наименование звука из Библиотеки звуков;
  • value — текст для синтеза. Его можно не добавлять, в этом случае воспроизведется только звук.
  • Синтез текста с междометием:

<audio text=“value1” /> value2, где:

  • value1 — междометие, которое будет добавлено к основному тексту для оживления фразы;
  • value2 — основной текст, который будет произнесён диктором.
  • Замена междометия каким-либо другим корректным звуком:

<audio text=“value1”>value2</audio>, где:

  • value1 — предзаписанное междометие, которым заменяется текст value2;
  • value2 — текст для синтеза, если у диктора не найдётся предзаписанного междометия.

Пример:

    <speak><audio text="м?"/> Что?</speak>
    <speak><audio text="угу"> да</audio></speak>

У каждого ассистента есть свой набор междометий с несколькими вариантами произнесения. Самые распространенные и популярные междометия имеют более 10 вариантов произношения. Каждый раз при использовании таких междометий и восклицаний вариант произношения выбирается случайным образом. Такой способ делает речь ассистента более живой и эмоциональной.

Пример:

    <speak><audio text="кхм-кхм"/> Какая сегодня погода?</speak>
    <speak><audio text="ааааа!"/> Что узнать?</speak>
    <speak><audio text="кхм-кхм"/> Про погоду хочу послушать</speak>
    <speak><audio text="ааааа!"/> Сегодня солнышко</speak>

В этом примере одинаковые междометия звучат с разной эмоциональной окраской. Полная информация о междометиях для каждого ассистента представлена в разделах:

Тег say-as

Тег <say-as> включает в себя атрибут interpret-as. Значение этого атрибута определяет дальнейшее произнесение синтезируемого текста.

Значение атрибута interpret-as тега say-as Пример Описание
cardinal <speak><say-as interpret-as="cardinal" format="feminine_nominative">1</say-as> пачка</speak> Произнесение количественного числительного
ordinal <speak><say-as interpret-as="ordinal" format="feminine_nominative">1</say-as> пачка</speak> Произнесение порядкового числительного
spell-out <speak><say-as interpret-as="spell-out">МКС</say-as></speak> Произнесение аббревиатур более привычным способом
telephone <speak><say-as interpret-as="telephone" detail="VAL_VAL">+7 (909) 2282424</say-as></speak> Произнесение номера мобильного телефона
money <speak><say-as interpret-as="money" detail="USD">21</say-as></speak> Произнесение денежной суммы
date <speak><say-as interpret-as="date" detail="d.m.y">25.01.2000</say-as></speak> Произнесение даты

Описание значений cardinal и ordinal атрибута interpret-as

Значения cardinal и ordinal атрибута interpret-as отвечают за произнесение порядкового и количественного числительных соответственно.

<say-as interpret-as="VALUE" format="GENDER_CASE"></say-as>

Строковый параметр VALUE принимает следующие значения:

  • cardinal — порядковое числительное;
  • ordinal — количественное числительное.

Значения атрибута format определяют, какой род и падеж использовать для синтезирования текста. Строковый параметр GENDER принимает следующие значения:

  • masculine — мужской род;
  • feminine — женский род;
  • neuter — средний род;
  • plural — множественное число.

Строковый параметр CASE принимает следующие значения:

  • nominative — именительный;
  • genitive — родительный;
  • dative — дательный;
  • accusative — винительный для одушевленных;
  • accusative_dead — винительный для неодушевленных;
  • ablative — творительный;
  • prepositional — предложный.

По умолчанию атрибут format принимает значения GENDER = masculine и CASE = nominative. Также атрибут format можно указывать в формате CASE_GENDER или GENDER_CASE. В качестве значений тега <say-as> можно использовать отрицательные числа и начинать числа с нуля. Для обоих видов числительных поддерживаются числа не выше миллиардов. Если для cardinal указать число больше, в ответе будет количество миллиардов. Например: 1 000 000 000 000 — «тысяча миллиардов». Если для ordinal указать больше, то в ответ придёт ошибка.

Пример:

    <speak><say-as interpret-as="cardinal" format="feminine_genitive">1</say-as></speak>

В этом примере показан женский род, родительный падеж числа 1: «одной».

Описание значения spell-out атрибута interpret-as

Значение spell-out атрибута interpret-as отвечает за правильное произнесение аббревиатур. Вместе с этим значением не используются дополнительные параметры. Аббревиатура пишется в теге say-as и указывается значение атрибута interpret-as="spell-out".

<speak><say-as interpret-as="spell-out">МКС</say-as></speak>

Описание значения telephone атрибута interpret-as

Значение telephone атрибута interpret-as отвечает за произнесение номеров телефонов.

	<speak><say-as interpret-as="telephone" detail="VAL_VAL">+7 (909) 2282424</say-as></speak>

Отсутствие разделителя в номере

Вариант указания номера телефона без разделителя, например: 495 1214545. В качестве промежутков между цифрами можно использовать пробел. Коды страны, города и оператора опциональны в номере. Код страны можно указать в формате +7, 7 или 8. Для указания кода оператора или кода города доступны следующие варианты (допустимо не использовать скобки):

  • (123) — XXX;
  • (1234) — XX-XX;
  • (12345) — XXX-XX;
  • (123456) — XX-XX-XX;
  • (1234567) — XXX-XX-XX.

Если код оператора или города указан без скобок, поддерживаются следующие форматы (можно использовать пробелы):

  • +79651873118 — XX-XXX-XXX-XX-XX;
  • 89651873118 — X-XXX-XXX-XX-XX;
  • 9651873118 — XXX-XXX-XX-XX.

Если код города не указан, будет обработан только номер.

В примерах произнесения номера телефона дефис играет роль паузы, а X - роль цифры.

Наличие разделителя - в номере

Вариант указания номера телефона с разделителем в виде дефиса, например: 495 121-45-45. Если указать дефисы между группами цифр номера, то он будет произнесен по группам цифр между дефисом. Нельзя делать группы более трех цифр, иначе синтез закончится ошибкой. При использовании разделителя можно указывать номер любого формата. Также можно использовать скобки в написании номера и знак + в начале номера.

Настройка паузы между группами цифр

С помощью атрибута detail="phone_pause:VALUEms" можно настроить паузу между группами цифр, где VALUE — число в формате integer, указывающее паузу в миллисекундах.

Пример:

    <speak><say-as interpret-as="telephone" detail="phone_pause:400ms">+7 (999) 123-45-67</say-as></speak>

В этом примере пауза в 400ms расставлена следующим образом:
+7 pause 999 pause 123 pause 45 pause 67.

Произношение слова «ровно» для круглого числа

С помощью атрибута detail="use-round-word" ассистент может произносить слово «ровно», если в номере есть крулое трехзначное число в шаблоне XXX-XX-XX.

Пример:

    <speak><say-as interpret-as="telephone" detail="use-round-word">+7 (800) 500-45-60</say-as></speak>

Результат: плюс семь восемьсот пятьсот ровно сорок пять шестьдесят.

Также в атрибуте detail можно одновременно указывать паузу и использование слова «ровно» через знак _.

Пример:

    <speak><say-as interpret-as="telephone" detail="use-round-word_phone_pause:400ms">+7 (800) 500-45-60</say-as></speak>

Описание значения money атрибута interpret-as

Значение money атрибута interpret-as отвечает за произнесение денежных сумм в заданной валюте.

<say-as interpret-as="money" format="CASE" detail="CURRENCY_short-form_say-null-cents">VALUE</say-as>

Атрибут format имеет строковый параметр CASE с указанием падежа:

  • nominative — именительный;
  • genitive — родительный;
  • dative — дательный;
  • accusative — винительный;
  • ablative — творительный;
  • prepositional — предложный.

Параметры в аттрибуте detail необходимо указывать через знак _.

Строковый параметр CURRENCY указывает валюту (по умолчанию используется рубль). Доступные варианты:

  • RUB — рубль;
  • USD — доллар США;
  • EUR — евро;
  • GBP — фунт стерлинг;
  • CAD — канадский доллар;
  • CHF — швейцарский франк;
  • SEK — шведская крона;
  • DKK — датская крона;
  • NOK — норвежская крона;
  • JPY — японская йена;
  • CNY — китайский юань;
  • PLN — польский злотый.

Можно дополнить произнесение денежных сумм следующими вариантами:

  • short-form — если указать этот параметр, будут использоваться короткие формы названий валют. Например, «доллар» вместо «американский доллар».
  • say-null-cents — если указать этот параметр, «центы» будут произнесены в любом случае, даже если их ноль. Например, «десять долларов, ноль центов».

Примеры:

    <speak><say-as interpret-as="money" format="genitive" detail="say-null-cents">10</say-as></speak>

Результат: десяти рублей, ноля копеек.

    <speak><say-as interpret-as="money" detail="USD">21</say-as></speak>

Результат: Двадцать один доллар США.

    <speak><say-as interpret-as="money" detail="USD_short-form">21,15</say-as></speak>

Результат: Двадцать один доллар, пятнадцать центов.

Описание значения date атрибута interpret-as

Значение date атрибута interpret-as отвечает за произнесение дат.

<say-as interpret-as="date" format="CASE" detail="TEMPLATE">VALUE</say-as>

Атрибут format имеет строковый параметр CASE с указанием падежа:

  • nominative — именительный;
  • genitive — родительный;
  • dative — дательный;
  • accusative — винительный для одушевленных;
  • accusative_dead — винительный для неодушевленных;
  • ablative — творительный;
  • prepositional — предложный.

Параметр TEMPLATE атрибута detail задает порядок, в котором указаны число, месяц и год. Можно указать только два или только одну часть, например, число и месяц без года или только год. Допускаются только символы, указанные ниже, которые должны иметь любой из разделителей: ., - или /.

  • d — шаблон для числа месяца;
  • m — шаблон для месяца;
  • y — шаблон для года;
  • yw (вместо y) — в этом случае будет опущено слово год («двухтысячный» вместо «двух тысячный год»).

Дата VALUE представляет собой числа с одним из разделителей: ., - или /. Порядок и наличие числа, месяца и года должен соответствовать TEMPLATE. Если TEMPLATE не указан, используется по умолчанию формат даты d.m.y. День и месяц даты можно указывать одной или двумя цифрами. Год можно указывать от одной до четырех цифер.

Примеры:

    <speak><say-as interpret-as="date" detail="d.m.y">25.01.2000</say-as></speak>

Результат: Двадцать пятое января двухтысячного года.

    <speak><say-as interpret-as="date" detail="m.yw">01.2000</say-as></speak>

Результат: Январь двухтысячного.

    <speak><say-as interpret-as="date" format="accusative" detail="y">2000</say-as></speak>

Результат: Двухтысячный год.

Выделение слова

Чтобы с помощью интонации выделить конкретное слово в речи ассистента, используйте символ *. Звездочка ставится вплотную к слову.

Пример с выделением слова «большая»:

    <speak>Сахара — самая *большая пустыня</speak>

Пример без выделения всех слов:

    <speak>Сахара — самая большая пустыня</speak>

Обработка букв е и ё

По умолчанию речь ассистента синтезируется с учётом контекста. Слова с буквой «ё» ассистент произносит правильно независимо от того, как они написаны. Например, слово «елка» будет звучать правильно, даже если буква «ё» не указана.

Для принудительного использования «ё» просто пишите ее там, где она нужна. Если в слове буква «е» произносится ошибочно как «ё», тогда поставьте ударение в слове на ударный слог с буквой «е», используя символ '. Обратите внимание, что апостроф ставится после ударной буквы.

Пример с ударением:

<speak>бере'т</speak>

Пример без ударения:

<speak>берет</speak>

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней