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 символов с пробелами. Если ваша фраза внутри тега<emphasis>
превышает 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.В примере пауза между первым и вторым предложением первого абзаца составит 200 ms, а между первым и вторым абзацем — 400 ms.<speak>
<p><s>Это первое предложение первого абзаца.</s> <s>Это второе предложение первого абзаца.</s></p>
<p> Это второй абзац. </p>
</speak>
- для
<say-as>
— задает информацию о типе текста внутри тега. Текст, находящийся внутри тега, должен быть короче 150 символов с пробелами. Если ваша фраза внутри тега<say-as>
превышает 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,
),
)