SSML-разметка
Теги
SSML-теги используются для тонкой настройки синтеза речи — можно изменить паузы, ударения, выделять акцентные слова и так далее.
<speak>
Обязательный тег, нужен для работы с SSML.
<speak> Пример использования обязательного тега speak </speak>
<break>
Используется, чтобы задать паузу в тексте. Обязательный атрибут тега time —
позволяет параметризовать продолжительность паузы, принимает значения в мс и с.
Например, time="80ms", time="2s". Максимальное значение — 10 секунд.
<speak>
Так можно вставить паузу <break time="500ms"/>
Пауза закончилась
</speak>
<voice>
Используется, чтобы задать спикера и параметры голоса (для выбора стиля прочтения),
которым будет озвучиваться текст. Тег имеет обязательный атрибут name со
значениями наименования голосов. Актуальный список значений можно получить через
метод Список голосов или
посмотреть в таблице общедоступных голосов.
<speak>
<voice name='anna'>
Этот пример начал озвучиваться одним голосом,
</voice>
<voice name='dima'>
а вот дальше озвучивается уже другим.
</voice>
</speak>
<emphasis>
Используется для обозначения акцентного слова в вопросительном предложении. Текст, находящийся внутри тега, должен быть короче 150 символов с пробелами. Если ваша фраза внутри тега превышает 150 символов, он не применится.
Имеет обязательный атрибут level, который задает силу акцента на слове.
level может принимать следующие значения:
none— акцент на обернутом тегом слове в вопросе не изменяется;moderate— умеренное ударение на слове;strong— выраженное смысловое ударение.
<speak>
Вы хотите заказать <emphasis level="moderate">капучино</emphasis>
или <emphasis level="strong">американо</emphasis>?
Вы <emphasis level="strong">хотите</emphasis> что-нибудь заказать?
</speak>
<s> и <p>
Задают предложение и абзац в тексте:
- Для
<s>пауза составляет 200 ms. - Для
<p>— 400 ms.
<speak>
<p><s>Это первое предложение первого абзаца.</s> <s>Это второе предложение первого абзаца.</s></p>
<p> Это второй абзац. </p>
</speak>
В примере пауза между первым и вторым предложением первого абзаца составит 200 ms, а между первым и вторым абзацем — 400 ms.
<say-as>
Задает информацию о типе текста внутри тега. Текст, находящийся внутри тега, должен быть короче 150 символов с пробелами. Если ваша фраза внутри тега превышает 150 символов, тег не применится.
Имеет обязательный атрибут interpret-as, который определяет, как произносить текст.
interpret-as может принимать значения characters или spell-out — произнесение
текста по символам, вне зависимости от того, текст это
или число: «1234» можно произнести как «один два три четыре», в то время как без
тега это «тысяча двести тридцать четыре».
Также работает и для различных аббревиатур:
<speak>
Я недавно видел <say-as interpret-as="characters">НЛО</say-as>
</speak>
При помощи атрибута можно произнести и более сложные конструкции:
<speak>
Номер договора: <say-as interpret-as="characters">1234/5-6</say-as>
</speak>
<prosody>
Задает скорость произношения и высоту тона голоса. С помощью тега можно:
Изменить скорость произношения — при помощи атрибута
rate:<speak>
Ускорить произношение можно следующим образом: <prosody rate ="150%">увеличение скорости произношения при автоматизации обслуживания клиентов может повысить эффективность обзвона, т.к. сэкономит время клиента</prosody>
</speak>Изменить тональность голоса — при помощи атрибута
pitch:<speak>
Меняя тональность, <prosody pitch ="80%">мы можем получить более глубокий голос</prosody>
</speak>
Оба атрибута можно изменять единовременно внутри одного тега, а также сочетать с другими тегами:
<speak>
<prosody rate="140%" pitch="110%">Работает на всех голосах, в сочетании с <break time="5ms"/> паузами и другими тегами.</prosody>
</speak>
Максимально можно втрое ускорить (300%) и замедлить (33%) речь, сделать голос втрое выше (300%) и ниже (33%).
Расстановка ударений
Для управления ударениями достаточно добавить 0 после ударной гласной: «соро0ка» и «сорока0».
Разметка ударений работает как в сочетании с SSML-тегами, так и в тексте без SSML.
def build_request():
return tts_pb2.SynthesizeSpeechRequest(
input=tts_pb2.SynthesisInput(
ssml="""
<speak> Разметка ударений работает и в SSML: жа0ркое, жарко0е.</speak>
"""
),
audio_config=tts_pb2.AudioConfig(
audio_encoding=tts_pb2.LINEAR16,
sample_rate_hertz=sample_rate,
),
)