Улучшение синтеза с помощью языка разметки синтеза речи (SSML)

Язык разметки синтеза речи (SSML) — это язык разметки на основе XML, позволяющий разработчикам указывать способ преобразования входного текста в синтезированную речь с помощью преобразования текста в речь. По сравнению с обычным текстом SSML позволяет разработчикам точно настраивать тон, произношение, скорость речи, громкость и другие выходные данные преобразования текста в речь. Обычные знаки препинания, такие как пауза после точки, или использование правильной интонации, если предложение заканчивается вопросительным знаком, обрабатываются автоматически.

Реализация службы "Речь" для SSML основана на языке разметки синтеза речи версии 1.0 консорциума W3C.

Важно!

При выставлении счетов один китайский иероглиф берется за два символа, включая иероглифы кандзи (японский язык), ханча (корейский язык) и ханьцзы (другие языки). Дополнительные сведения см. на странице цен.

Предварительно созданные и пользовательские нейронные голоса

Используйте естественный нейронный голос или создайте уникальный настраиваемый нейронный голос для своего продукта или торговой марки. Полный список поддерживаемых языков, языковых стандартов и голосовых моделей см. в статье Поддержка языков. Дополнительные сведения об использовании предварительно созданного и пользовательского нейронного голоса см. в разделе Общие сведения о преобразовании текста в речь.

Примечание

На веб-сайте преобразования текста в речь можно послушать голоса, читающие образец текста в различных стилях и с разной высотой тона.

Специальные символы

В SSML необходимо избегать использования специальных символов, таких как кавычки, апострофы и квадратные скобки. Дополнительные сведения см. в разделе Язык XML 1.0: приложение D.

Поддерживаемые элементы SSML

Каждый документ SSML создается с помощью элементов SSML (или тегов). Эти элементы используются для настройки высоты тона, интонации, громкости и т. д. В следующих разделах представлены подробные сведения о том, как используется каждый элемент, а также о том, когда элемент является обязательным, а когда нет.

Важно!

Не забывайте заключать значения атрибутов в двойные кавычки. Стандарты допустимых выражений XML в правильном формате требуют заключения значений атрибутов в двойные кавычки. Например, <prosody volume="90"> — допустимый элемент с правильным форматом, а <prosody volume=90> — нет. SSML может не распознать значения атрибутов, если они не заключены в двойные кавычки.

Создание документа SSML

Элемент speak является корневым. Он необходим для всех документов SSML. Элемент speak содержит важную информацию, например версию, язык и определение словаря разметки.

Синтаксис

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="string"></speak>

Атрибуты

attribute Описание Обязательный или необязательный
version Задает версию спецификации SSML, используемую для интерпретации разметки документа. Текущая версия — 1.0. Обязательно
xml:lang Задает язык корневого документа. Значение может содержать строчный, двухбуквенный код языка, например en. Либо значение может содержать код языка, а также код страны или региона в верхнем регистре, например en-US. Обязательно
xmlns Задает универсальный код ресурса (URI) документа, который определяет словарь разметки (типы элементов и имена атрибутов) документа SSML. Текущий универсальный код ресурса (URI) — http://www.w3.org/2001/10/synthesis. Обязательно

Выбор голоса для преобразования текста в речь

Элемент voice является обязательным. Он задает голос, используемый для преобразования текста в речь.

Синтаксис

<voice name="string">
    This text will get converted into synthesized speech.
</voice>

Attribute

attribute Описание Обязательный или необязательный
name Определяет голос, используемый для выходных данных преобразования текста в речь. Полный список поддерживаемых голосовых моделей см. в разделе о поддерживаемых языках. Обязательный

Пример

Примечание

В этом примере используется голос en-US-JennyNeural. Полный список поддерживаемых голосовых моделей см. в разделе о поддерживаемых языках.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        This is the text that is spoken.
    </voice>
</speak>

Использование нескольких голосов

В элементе speak можно задать несколько голосов для выходных данных преобразования текста в речь. Эти голоса могут быть на разных языках. Для каждого голоса текст необходимо заключить в элемент voice.

Attribute

attribute Описание Обязательный или необязательный
name Определяет голос, используемый для выходных данных преобразования текста в речь. Полный список поддерживаемых голосовых моделей см. в разделе о поддерживаемых языках. Обязательный

Пример

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        Good morning!
    </voice>
    <voice name="en-US-ChristopherNeural">
        Good morning to you too Jenny!
    </voice>
</speak>

Корректировка стилей речи

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

Стили, степень стиля и роли поддерживаются для подмножества нейронных голосов. Если стиль или роль не поддерживается, служба использует нейтральную речь по умолчанию. Чтобы определить, какие стили и роли поддерживаются для каждого голоса, воспользуйтесь:

attribute Описание Обязательный или необязательный
style Задает стиль речи. Стили речи зависят от голоса. Обязателен при корректировке стиля для нейронного голоса. Если используется mstts:express-as, необходимо указать стиль. Если указано недопустимое значение, этот элемент будет проигнорирован.
styledegree Задает интенсивность стиля речи. Допустимые значения: от 0,01 до 2 включительно. Значение по умолчанию — 1, то есть предварительно заданная интенсивность стиля. Минимальная единица — 0,01, определяющая едва заметную тенденцию целевого стиля. Значение 2 приводит к удвоению интенсивности стиля по умолчанию. Необязательный элемент. Если не задан атрибут style, атрибут styledegree игнорируется. Корректировка степени стиля речи поддерживается для нейронных голосов, говорящих на китайском языке (мандаринский диалект, упрощенный китайский язык).
role Задает для речи разыгрываемую роль. Голос будет имитировать другой возраст и пол, однако название голоса не изменится. Необязательный элемент. Корректировку ролей поддерживают следующие нейронные голоса на китайском языке (мандаринский диалект, упрощенный китайский язык): zh-CN-XiaomoNeural, zh-CN-XiaoxuanNeural, zh-CN-YunxiNeural и zh-CN-YunyeNeural.

Стиль

Элемент mstts:express-as используется для выражения эмоций, таких как жизнерадостность, сочувствие, невозмутимость. Можно также оптимизировать использование голоса для различных сценариев, таких как обслуживание клиентов, чтение новостей и реализация голосового помощника.

Синтаксис

<mstts:express-as style="string"></mstts:express-as>

Пример

Этот фрагмент SSML демонстрирует, как элемент <mstts:express-as> используется для изменения стиля речи на cheerful.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <mstts:express-as style="cheerful">
            That'd be just amazing!
        </mstts:express-as>
    </voice>
</speak>

В следующей таблице приводятся описания всех поддерживаемых стилей.

Стиль Описание
style="advertisement-upbeat" Выражает увлеченный и энергичный тон для продвижения продукта или услуги.
style="affectionate" Выражает теплый и нежный тон, более высокий и энергичный. Говорящий стремится привлечь внимание слушателя. Личность говорящего часто располагает к себе.
style="angry" В тоне голоса слышится злость и раздражение.
style="assistant" Теплый и непринужденный тон для цифровых помощников.
style="calm" Выражает прохладное, собранное и невозмутимое отношение говорящего. Тон, высота тона и интонация более однообразны по сравнению с другими типами речи.
style="chat" Тон воспринимается как неофициальный и непринужденный.
style="cheerful" Тон выражает позитивное и радостное настроение.
style="customerservice" Дружелюбный тон, в котором звучит готовность помочь, для поддержки клиентов.
style="depressed" Меланхоличный и унылый тон, менее высокий и энергичный.
style="disgruntled" Выражает пренебрежительный и недовольный тон. Речь с этой эмоцией выражает неудовольствие и презрение.
style="embarrassed" Тон выражает неуверенность и колебания, как будто говорящий испытывает дискомфорт.
style="empathetic" Тон выражает чувство заботы и понимания.
style="envious" Тон отражает восхищение, как если бы вам хотелось то, что есть у другого.
style="excited" Выражает оптимистичный тон и надежду. Звучит, как будто происходит что-то выдающееся, и докладчик очень этому рад.
style="fearful" Выражает испуганный и нервный тон, более высокий, энергичный и быстрый. Говорящий напряжен и испытывает беспокойство.
style="friendly" Выражает приятный, привлекательный и теплый тон. Это звучит искренне и заботливо.
style="gentle" Мягкий, вежливый и приятный тон, менее высокий и энергичный.
style="hopeful" Выражает теплый и сочувствующий тон. Звучит так, как будто с докладчиком произойдет что-то хорошее.
style="lyrical" Чувственный и мелодичный тон для выражения эмоций.
style="narration-professional" Строгий, объективный тон для чтения содержимого.
style="narration-relaxed" Плавный и мелодичный тон для чтения содержимого.
style="newscast" Официальный, строгий тон для чтения новостей.
style="newscast-casual" Гибкий и неформальный тон для чтения новостей общего характера.
style="newscast-formal" Официальный, уверенный и авторитетный тон для чтения новостей.
style="poetry-reading" Выражает эмоциональный и ритмический тон при чтении стихотворения.
style="sad" В голосе звучит печаль.
style="serious" Выражает строгий и командный тон. Говорящий часто звучит более жестко и гораздо менее расслабленно, подчиняется твердому ритму.
style="shouting" Создается ощущение, что звук доносится откуда-то издалека или снаружи, говорящим прилагаются усилия, чтобы его четко услышали
style="sports-commentary" Выражает расслабленный и интригующий тон для комментирования спортивного мероприятия.
style="sports-commentary-excited" Выражает интенсивный и энергичный тон для трансляции захватывающих моментов в спортивном мероприятии.
style="whispering" Говорит очень мягко, звук тихий и нежный
style="terrified" Выражает очень испуганный тон, слова произносятся в быстром темпе, голос дрожит. Кажется, что говорящий находится в неустойчивом положении и в отчаянии.
style="unfriendly" Выражает холодный и равнодушный тон.

Степень стиля

Насыщенность стиля речи можно отрегулировать таким образом, чтобы он точнее соответствовал варианту использования. Атрибут styledegree позволяет задать более твердый или мягкий стиль, чтобы сделать речь более выразительной или приглушенной. Корректировка степени стиля речи поддерживается для нейронных голосов, говорящих на китайском языке (мандаринский диалект, упрощенный китайский язык).

Синтаксис

<mstts:express-as style="string" styledegree="value"></mstts:express-as>

Пример

Этот фрагмент SSML демонстрирует, как атрибут styledegree используется для изменения интенсивности стиля речи zh-CN-XiaomoNeural.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="zh-CN">
    <voice name="zh-CN-XiaoxiaoNeural">
        <mstts:express-as style="sad" styledegree="2">
            快走吧,路上一定要注意安全,早去早回。
        </mstts:express-as>
    </voice>
</speak>

Роль

Помимо корректировки стиля речи и степени стиля, можно также скорректировать параметр role таким образом, чтобы голос имитировал другой возраст и пол. Например, мужской голос может повысить тон и изменить интонацию, чтобы имитировать женский голос, однако название голоса не изменится. Корректировку ролей поддерживают следующие нейронные голоса на китайском языке (мандаринский диалект, упрощенный китайский язык):

  • zh-CN-XiaomoNeural
  • zh-CN-XiaoxuanNeural
  • zh-CN-YunxiNeural
  • zh-CN-YunyeNeural

Синтаксис

<mstts:express-as role="string" style="string"></mstts:express-as>

Пример

Этот фрагмент SSML демонстрирует, как атрибут role используется для изменения разыгрываемой роли zh-CN-XiaomoNeural.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="zh-CN">
    <voice name="zh-CN-XiaomoNeural">
        女儿看见父亲走了进来,问道:
        <mstts:express-as role="YoungAdultFemale" style="calm">
            “您来的挺快的,怎么过来的?”
        </mstts:express-as>
        父亲放下手提包,说:
        <mstts:express-as role="OlderAdultMale" style="calm">
            “刚打车过来的,路上还挺顺畅。”
        </mstts:express-as>
    </voice>
</speak>

В следующей таблице приводятся описания всех поддерживаемых ролей.

Роль Описание
role="Girl" Голос имитирует девочку.
role="Boy" Голос имитирует мальчика.
role="YoungAdultFemale" Голос имитирует девушку.
role="YoungAdultMale" Голос имитирует юношу.
role="OlderAdultFemale" Голос имитирует взрослую женщину.
role="OlderAdultMale" Голос имитирует взрослого мужчину.
role="SeniorFemale" Голос имитирует пожилую женщину.
role="SeniorMale" Голос имитирует пожилого мужчину.

Настройка языков речи

По умолчанию нейронные голосовые модели свободно говорят на родном и английском языках без использования элемента <lang xml:lang>. Например, если входной текст на английском языке — "Мне не терпится выполнить преобразование текста в речь" и используется голос es-ES-ElviraNeural, текст произносится на английском языке с испанским акцентом. Для большинства нейронных голосов настройка языка речи с помощью элемента <lang xml:lang> на уровне предложения или слова в настоящее время не поддерживается.

Вы можете настроить язык речи для нейронного голоса en-US-JennyMultilingualNeural на уровне предложения и на уровне слов с помощью элемента <lang xml:lang>. Нейронный голос en-US-JennyMultilingualNeural может говорить на нескольких языках из поддерживаемого списка в 14 языков (например, на английском, испанском и китайском). Поддерживаемые языки приведены в таблице после определений синтаксиса и атрибута <lang>.

Синтаксис

<lang xml:lang="string"></lang>

Attribute

attribute Описание Обязательный или необязательный
lang Указывает язык, на котором должен говорить нейронный голос. Требуется для настройки языка речи нейронного голоса. Если используется lang xml:lang, необходимо указать языковой стандарт.

Примечание

Элемент <lang xml:lang> несовместим с элементами prosody и break. В этом элементе нельзя настраивать паузы и интонацию, например шаг, профиль, скорость или громкость.

Приведенная ниже таблица поможет определить, какие языки речи поддерживаются для каждого нейронного голоса. Если голосовая модель не поддерживает язык входного текста, служба "Речь" не будет выводить синтезированный звук.

Голосовая связь Основной языковой стандарт по умолчанию Дополнительные языковые стандарты
en-US-JennyMultilingualNeural en-US de-DE, en-AU, en-CA, en-GB, es-ES, es-MX, fr-CA, fr-FR, it-IT, ja-JP, ko-KR, pt-BR, zh-CN

Пример

Основным языком для en-US-JennyMultilingualNeural является en-US. en-US необходимо указать как язык по умолчанию в элементе speak независимо от того, настроен ли язык где-либо еще. В этом фрагменте SSML показано, как говорить на языке de-DE, используя нейронный голос en-US-JennyMultilingualNeural.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="en-US">
    <voice name="en-US-JennyMultilingualNeural">
        <lang xml:lang="de-DE">
            Wir freuen uns auf die Zusammenarbeit mit Ihnen!
        </lang>
    </voice>
</speak>

В элементе speak можно задать несколько языков для выходных данных преобразования текста в речь (в том числе en-US). Для каждого настроенного языка текст должен соответствовать языку и быть заключен в элемент voice. В этом фрагменте SSML показано, как использовать <lang xml:lang> для изменения языков речи на es-MX, en-US и fr-FR.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="en-US">
    <voice name="en-US-JennyMultilingualNeural">
        <lang xml:lang="es-MX">
            ¡Esperamos trabajar con usted! 
        </lang>
        <lang xml:lang="en-US">
           We look forward to working with you!
        </lang>
        <lang xml:lang="fr-FR">
            Nous avons hâte de travailler avec vous!
        </lang>
    </voice>
</speak>

Добавление или удаление перерыва или паузы

Используйте элемент break, чтобы вставить паузы или перерывы между словами. С его помощью можно также устранить паузы, которые автоматически добавляются функцией преобразования текста в речь.

Примечание

Используйте этот элемент, чтобы переопределять заданное по умолчанию поведение преобразования текста в речь для слова или фразы, если синтезированная речь для этого слова или фразы звучит неестественно. Присвойте strength значение none, чтобы предотвратить устранить паузу, которая автоматически вставляется службой преобразования текста в речь.

Синтаксис

<break strength="string" />
<break time="string" />

Атрибуты

attribute Описание Обязательный или необязательный
strength Задает относительную продолжительность паузы, используя одно из следующих значений.
  • нет
  • x-weak
  • weak
  • medium (по умолчанию)
  • надежный
  • x-strong
Необязательно
time Задает абсолютную продолжительность паузы в секундах или миллисекундах. Это значение должно быть меньше 5000 мс. Примеры допустимых значений: 2s и 500ms. Необязательно
Сила Описание
Нет, если значение не указано 0 мс
Очень слабая 250 мс
Слабая 500 мс
Средний 750 мс
Уровень согласованности "Строгая" 1000 мс
Очень сильная 1250 мс

Пример

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        Welcome to Microsoft Cognitive Services <break time="100ms" /> Text-to-Speech API.
    </voice>
</speak>

Добавление паузы

Используйте элемент mstts:silence для вставки пауз до или после текста или между двумя соседними предложениями.

Примечание

Разница между mstts:silence и break заключается в том, что break можно добавить любое место в тексте. Тишина будет соблюдаться только в начале или в конце входного текста или на границе двух соседних предложений.

Синтаксис

<mstts:silence  type="string"  value="string"/>

Атрибуты

attribute Описание Обязательный или необязательный
type Задает место добавления периода тишины.
  • Leading — в начале текста
  • Tailing — в конце текста
  • Sentenceboundary — между соседними предложениями
Обязательно
Value Задает абсолютную продолжительность паузы в секундах или миллисекундах. Это значение должно быть меньше 5000 мс. Примеры допустимых значений: 2s и 500ms. Обязательный

Пример

В этом примере используется mtts:silence, чтобы вставить между двумя предложениями период тишины продолжительностью 200 мс.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="en-US">
<voice name="en-US-JennyNeural">
<mstts:silence  type="Sentenceboundary" value="200ms"/>
If we’re home schooling, the best we can do is roll with what each day brings and try to have fun along the way.
A good place to start is by trying out the slew of educational apps that are helping children stay happy and smash their schooling at the same time.
</voice>
</speak>

Задание абзацев и предложений

Элементы p и s используются для обозначения абзацев и предложений соответственно. При отсутствии этих элементов служба преобразования текста в речь автоматически определяет структуру документа SSML.

Элемент p может содержать текст и следующие элементы: audio, break, phoneme, prosody, say-as, sub, mstts:express-as и s.

Элемент s может содержать текст и следующие элементы: audio, break, phoneme, prosody, say-as, mstts:express-as и sub.

Синтаксис

<p></p>
<s></s>

Пример

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <p>
            <s>Introducing the sentence element.</s>
            <s>Used to mark individual sentences.</s>
        </p>
        <p>
            Another simple paragraph.
            Sentence structure in this paragraph is not explicitly marked.
        </p>
    </voice>
</speak>

Использование фонем для улучшения произношения

Элемент ph используется для фонетического произношения в документах SSML. Элемент ph может содержать только текст, но не другие элементы. Всегда указывайте удобную для восприятия человеком речь в качестве запасного варианта.

Фонетические алфавиты состоят из фонем, которые состоят из букв, цифр или символов, а иногда из их сочетаний. Каждая фонема описывает уникальный звук речи. В этом состоит отличие от латинского алфавита, где любая буква может представлять несколько речевых звуков. Вспомните, например, разное произношение буквы c в словах candy и cease или сочетания букв th в словах thing и those.

Примечание

Тег Phonemes может работать не со всеми языковыми стандартами.

Синтаксис

<phoneme alphabet="string" ph="string"></phoneme>

Атрибуты

attribute Описание Обязательный или необязательный
alphabet Задает фонетический алфавит, используемый при синтезе произношения строки в атрибуте ph. Строку, задающую алфавит, необходимо указывать строчными буквами. Ниже приведены примеры алфавитов, которые можно задать.
Алфавит применяется только к phoneme в элементе.
Необязательно
ph Строка, содержащая фонемы, которые задают произношение слова в элементе phoneme. Если указанная строка содержит нераспознаваемые фонемы, служба преобразования текста в речь отклоняет весь документ SSML и не производит выходные данные речи, заданные в документе. Обязательные условия при использовании фонем

Примеры

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <phoneme alphabet="ipa" ph="təˈmeɪtoʊ"> tomato </phoneme>
    </voice>
</speak>
<speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <phoneme alphabet="sapi" ph="iy eh n y uw eh s"> en-US </phoneme>
    </voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <s>His name is Mike <phoneme alphabet="ups" ph="JH AU"> Zhou </phoneme></s>
    </voice>
</speak>

Использование пользовательского словаря для улучшения произношения

Иногда служба преобразования текста в речь не может правильно произнести слово. Например, название компании, медицинский термин или эмодзи. Вы можете определить чтение отдельных сущностей в SSML с помощью тегов phoneme и sub. Если необходимо определить чтение нескольких сущностей, можно создать пользовательский словарь с помощью тега lexicon.

Пользовательский словарь в настоящее время поддерживает кодировку UTF-8.

Примечание

В настоящее время пользовательский словарь не поддерживается для этих 5 голосов: et-EE-AnuNeural, ga-IE-OrlaNeural, lt-LT-OnaNeural, lv-LV-EveritaNeural и mt-MT-GarceNeural.

Синтаксис

<lexicon uri="string"/>

Attribute

attribute Описание Обязательный или необязательный
uri Адрес внешнего документа PLS Обязательно

Использование

Чтобы определить чтение нескольких сущностей, можно создать пользовательский словарь, который хранится в файле XML или PLS. Ниже приведен пример файла XML.

<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
      xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
        http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
      alphabet="ipa" xml:lang="en-US">
  <lexeme>
    <grapheme>BTW</grapheme>
    <alias>By the way</alias>
  </lexeme>
  <lexeme>
    <grapheme> Benigni </grapheme>
    <phoneme> bɛˈniːnji</phoneme>
  </lexeme>
  <lexeme>
    <grapheme>😀</grapheme>
    <alias>test emoji</alias>
  </lexeme>
</lexicon>

Элемент lexicon содержит по крайней мере один элемент lexeme. Каждый элемент lexeme содержит по крайней мере один элемент grapheme, а также один или несколько элементов grapheme, alias и phoneme. Элемент grapheme содержит текст, описывающий орфографию. Элементы alias используются для указания произношения акронима или аббревиатуры. Элемент phoneme предоставляет текст, описывающий произношение lexeme. Если элементы alias и phoneme указаны с одним и тем же элементом grapheme, alias имеет более высокий приоритет.

Важно!

Элемент lexeme учитывает регистр в пользовательском словаре. Например, если указать фонему только для lexeme Hello, она не будет работать для lexeme hello.

Словарь содержит обязательный атрибут xml:lang, указывающий, для какого языкового стандарта его следует применять. Согласно замыслу один пользовательский словарь ограничен одним языковым стандартом. Поэтому словарь не будет работать, если применить его для другого языкового стандарта.

Произношение фразы нельзя задать напрямую с помощью пользовательского словаря. Если требуется определить произношение акронима или аббревиатуры, сначала укажите alias, а затем свяжите phoneme с этим alias. Пример:

  <lexeme>
    <grapheme>Scotland MV</grapheme>
    <alias>ScotlandMV</alias>
  </lexeme>
  <lexeme>
    <grapheme>ScotlandMV</grapheme>
    <phoneme>ˈskɒtlənd.ˈmiːdiəm.weɪv</phoneme>
  </lexeme>

Примечание

В IPA для обозначения границы слога применяется ".".

Вы также можете напрямую предоставить ожидаемый элемент alias для акронима или аббревиатуры. Пример:

  <lexeme>
    <grapheme>Scotland MV</grapheme>
    <alias>Scotland Media Wave</alias>
  </lexeme>

Важно!

Элемент phonemeне может содержать пробелы при использовании IPA.

Дополнительные сведения о файле пользовательского словаря см. в разделе Спецификация словаря произношения (PLS) версии 1.0.

Затем опубликуйте настраиваемый файл словаря. Хотя ограничения на место хранения этого файла отсутствуют, рекомендуется использовать Хранилище BLOB-объектов Azure.

После публикации настраиваемого словаря можно обращаться к нему из SSML.

Примечание

Элемент lexicon должен находиться внутри элемента voice.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
          xmlns:mstts="http://www.w3.org/2001/mstts"
          xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <lexicon uri="http://www.example.com/customlexicon.xml"/>
        BTW, we will be there probably at 8:00 tomorrow morning.
        Could you help leave a message to Robert Benigni for me?
    </voice>
</speak>

При использовании этого пользовательского словаря "BTW" читается как "Кстати", а "Benigni" считывается с помощью предоставленной IPA транскрипции “bɛˈniːnji."

В пользовательском словаре легко наделать ошибок, поэтому корпорация Майкрософт предоставляет средство проверки для пользовательского словаря. Оно выдает подробные сообщения об ошибках, чтобы вам легче было понять, в чем проблема. Перед отправкой SSML с пользовательским словарем в службу распознавания речи, используйте это средство для проверки пользовательского словаря.

Ограничения

  • Размер файла. Максимальный размер файла пользовательского словаря — 100 КБ. Если файл больше, запрос синтеза завершается ошибкой.
  • Обновление кэша словаря. Для кэширования пользовательского словаря используется универсальный код ресурса (URI) в качестве ключа для преобразования текста в речь при первой загрузке. Словарь с таким же URI не будет перезагружаться в течение 15 минут, поэтому для вступления в силу изменений пользовательского словаря необходимо подождать не более 15 минут.

Фонетические наборы службы "Речь"

В предыдущем примере мы использовали IPA, так же известный как набор фонем IPA. Мы рекомендуем использовать IPA, так как это международный стандарт. Некоторые символы IPA, представленные в Юникоде, имеют "уже сформированную" и "разложенную" версии. Пользовательский словарь поддерживает только разложенные символы Юникода.

Учитывая, что запомнить IPA нелегко, служба "Речь" определяет фонетический набор для семи языков: en-US, fr-FR, de-DE, es-ES, ja-JP, zh-CN и zh-TW.

Вы можете использовать x-microsoft-sapi как значение для атрибута alphabet с пользовательскими словарями, как показано ниже:

<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
      xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
        http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
      alphabet="x-microsoft-sapi" xml:lang="en-US">
  <lexeme>
    <grapheme>BTW</grapheme>
    <alias> By the way </alias>
  </lexeme>
  <lexeme>
    <grapheme> Benigni </grapheme>
    <phoneme> b eh 1 - n iy - n y iy </phoneme>
  </lexeme>
</lexicon>

Дополнительные сведения о фонетическом алфавите в службы "Речь" см. в разделе Фонетические наборы службы "Речь".

Настройка интонации

Элемент prosody позволяет задать изменения высоты тона, контура, диапазона, скорости и громкости для выходных данных преобразования текста в речь. Элемент prosody может содержать текст и следующие элементы: audio, break, p, phoneme, prosody, say-as, sub и s.

Поскольку значения атрибутов интонации могут варьироваться в широком диапазоне, распознаватель речи интерпретирует присвоенные значения как рекомендацию в отношении фактических значений интонации выбранного голоса. Преобразование текста в речь заменяет неподдерживаемые значения или ограничивает их использование. Примеры неподдерживаемых значений: высота тона 1 МГц или громкость 120.

Синтаксис

<prosody pitch="value" contour="value" range="value" rate="value" volume="value"></prosody>

Атрибуты

attribute Описание Обязательный или необязательный
pitch Задает базовую высоту тона для текста. Вы можете выразить высоту тона следующим образом:
  • Абсолютное значение, выраженное в виде числа, за которым следует "Гц" (герц). Например, <prosody pitch="600Hz">some text</prosody>.
  • Относительное значение, выраженное в виде числа, которое начинается знаком "+" или "–" и заканчивается на "Hz" или "st", что указывает величину изменения высоты тона. Пример: <prosody pitch="+80Hz">some text</prosody> или <prosody pitch="-2st">some text</prosody>. St означает, что базовая единица — полутон, то есть половина тона (половина шага) в стандартном диатоническом звукоряде.
  • Постоянное значение
    • x-low
    • low
    • средняя
    • high
    • x-high
    • default
Необязательно
contour Профиль теперь поддерживает нейронные голоса. Контур представляет изменения высоты тона. Эти изменения представлены в виде массива целевых объектов в определенных моментах времени в выходных данных речи. Каждый целевой объект определяется набором пар параметров. Пример:

<prosody contour="(0%,+20Hz) (10%,-2st) (40%,+10Hz)">

Первое значение в каждом наборе параметров указывает расположение изменения высоты тона как процентную долю продолжительности текста. Второе значение задает величину повышения или понижения тона с помощью относительного значения или значения перечисления для высоты тона (см pitch).
Необязательно
range Значение, представляющее диапазон высоты тона для текста. range можно выражать с помощью тех же абсолютных значений, относительных значений или значений перечисления, которые использовались для описания pitch. Необязательно
rate Указывает скорость произнесения текста. Вы можете выразить rate следующим образом:
  • Относительное значение, выраженное в виде числа, которое выступает в качестве множителя по умолчанию. Например, значение 1 приводит к отсутствию изменений в скорости. Значение 0,5 приводит к уменьшению скорости в два раза. Значение 3 приводит к увеличению скорости в три раза.
  • Постоянное значение
    • x-slow
    • медленный
    • средняя
    • быстрая
    • x-fast
    • default
Необязательно
volume Указывает уровень громкости речи. Громкость можно выразить следующим образом:
  • Абсолютное значение, выраженное в виде числа в диапазоне от 0,0 до 100,0, от самого тихого до самого громкого. Например, 75. Значение по умолчанию — 100,0.
  • Относительное значение, выраженное в виде числа, начинающегося с "+" или "–", что указывает величину изменения громкости. Например: +10 или –5,5.
  • Постоянное значение
    • silent
    • x-soft
    • soft
    • средняя
    • loud
    • x-loud
    • default
Необязательно

Изменение скорости речи

Скорость речи может быть применена на уровне слов или предложений.

Пример

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <prosody rate="+30.00%">
            Welcome to Microsoft Cognitive Services Text-to-Speech API.
        </prosody>
    </voice>
</speak>

Изменение громкости

Изменения громкости могут применяться на уровне предложений.

Пример

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <prosody volume="+20.00%">
            Welcome to Microsoft Cognitive Services Text-to-Speech API.
        </prosody>
    </voice>
</speak>

Изменение тона

Изменения высоты тона могут применяться на уровне предложений.

Пример

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        Welcome to <prosody pitch="high">Microsoft Cognitive Services Text-to-Speech API.</prosody>
    </voice>
</speak>

Изменение контура тона

Важно!

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

Пример

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <prosody contour="(60%,-60%) (100%,+80%)" >
            Were you the only person in the room?
        </prosody>
    </voice>
</speak>

элемент say-as

Элемент say-as является необязательным. Он задает тип контента (например, число или дату) текста элемента. Этот элемент дает подсистеме синтеза речи рекомендацию по произнесению текста.

Синтаксис

<say-as interpret-as="string" format="digit string" detail="string"> </say-as>

Атрибуты

attribute Описание Обязательный или необязательный
interpret-as Задает тип контента текста элемента. Список типов см. в таблице ниже. Обязательно
format Предоставляет дополнительные сведения о точном форматировании текста элемента для типов контента, которые могут иметь неоднозначные форматы. SSML определяет форматы для типов контента, которые их используют. См. следующую таблицу. Необязательно
detail Указывает уровень детализации речи. Например, этот атрибут может потребовать от подсистемы синтеза речи произнесения знаков пунктуации. Стандартные значения для detail не определены. Необязательно

Ниже приведены поддерживаемые типы контента для атрибутов interpret-as и format. Включайте атрибут format только в том случае, если для interpret-as задано значение даты и времени.

interpret-as format Интерпретация
address Текст произносится как адрес. Подсистема синтеза речи произносит следующее:

I'm at <say-as interpret-as="address">150th CT NE, Redmond, WA</say-as>

как "Я возле дома 150 по Корт-Норд-Ист, Редмонд, Вашингтон".
cardinal, number Текст произносится как количественное числительное. Подсистема синтеза речи произносит следующее:

There are <say-as interpret-as="cardinal">3</say-as> alternatives

как "Имеется три варианта".
characters, spell-out Текст произносится как отдельные буквы (по слогам). Подсистема синтеза речи произносит следующее:

<say-as interpret-as="characters">test</say-as>

как "T E S T".
date dmy, mdy, ymd, ydm, ym, my, md, dm, d, m, y Текст произносится как дата. Атрибут format задает формат даты (d = день, m = месяц и y = year). Подсистема синтеза речи произносит следующее:

Today is <say-as interpret-as="date" format="mdy">10-19-2016</say-as>

как "Сегодня девятнадцатое октября две тысячи шестнадцатого".
digits, number_digit Текст произносится как последовательность отдельных цифр. Подсистема синтеза речи произносит следующее:

<say-as interpret-as="number_digit">123456789</say-as>

как "1 2 3 4 5 6 7 8 9".
fraction Текст произносится как дробное число. Подсистема синтеза речи произносит следующее:

<say-as interpret-as="fraction">3/8</say-as> of an inch

как "три восьмых дюйма".
ordinal Текст произносится как порядковое числительное. Подсистема синтеза речи произносит следующее:

Select the <say-as interpret-as="ordinal">3rd</say-as> option

как "Выберите третий вариант".
telephone Текст произносится как номер телефона. Атрибут format может содержать цифры, представляющие код страны. Например, 1 для США или 39 для Италии. Подсистема синтеза речи может использовать эти сведения для произнесения номера телефона. Номер телефона тоже может включать код страны. В этом случае он имеет приоритет над кодом страны в атрибуте format. Подсистема синтеза речи произносит следующее:

The number is <say-as interpret-as="telephone" format="1">(888) 555-1212</say-as>

как "Мой номер — код города восемь восемь восемь пять пять пять один два один два".
time hms12, hms24 Текст произносится как время. Атрибут format указывает, задается ли время в 12-часовом (hms12) или 24-часовом (hms24). Используйте двоеточие для разделения чисел, представляющих часы, минуты и секунды. Допустимые примеры времени: 12:35, 1:14:32, 08:15 и 02:50:45. Подсистема синтеза речи произносит следующее:

The train departs at <say-as interpret-as="time" format="hms12">4:00am</say-as>

как "Поезд отправляется в четыре утра".
name Текст произносится как имя человека. Подсистема синтеза речи произносит следующее:

<say-as interpret-as="name">ED</say-as>

как [æd].
В китайских именах некоторые иероглифы произносятся по-разному, если использовать их в фамилии. Например, обработчик синтеза речи произносит 仇

<say-as interpret-as="name">仇先生</say-as>

как [qiú] вместо [chóu].

Использование

Элемент say-as может содержать только текст.

Пример

Подсистема синтеза речи произносит текст в следующем примере как "Ваш первый запрос включал один номер на девятнадцатое октября две тысячи десятого с ранним прибытием в двенадцать тридцать пять".

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <p>
        Your <say-as interpret-as="ordinal"> 1st </say-as> request was for <say-as interpret-as="cardinal"> 1 </say-as> room
        on <say-as interpret-as="date" format="mdy"> 10/19/2010 </say-as>, with early arrival at <say-as interpret-as="time" format="hms12"> 12:35pm </say-as>.
        </p>
    </voice>
</speak>

Добавление записанного аудио

Элемент audio является необязательным. Его можно использовать для вставки предварительно созданной аудиозаписи в документ SSML. Тело аудиоэлемента может содержать обычный текст или SSML-разметку, которые произносятся, если аудиофайл недоступен или не воспроизводится. Элемент audio может содержать текст и следующие элементы: audio, break, p, s, phoneme, prosody, say-as и sub.

Все аудио, входящие в документ SSML, должны соответствовать следующим требованиям.

  • Звуковой файл должен быть размещен на доступной в Интернете конечной точке HTTPS. Требуется протокол HTTPS, а домен, на котором размещается файл, должен представлять действительный доверенный сертификат TLS/SSL. Рекомендуется разместить звуковой файл в Хранилище BLOB-объектов в том же регионе Azure, что и конечная точка преобразования текста в речь, чтобы свести к минимуму задержку.
  • Звуковой файл должен иметь действительный формат MP3, WAV, OPUS, OGG, FLAC или WMA.
  • Суммарное общее время для всех текстовых и звуковых файлов в одном ответе не может превышать 600 секунд.
  • Звуковой файл не должен содержать сведения, имеющие отношение к пользователю, или иные конфиденциальные сведения.

Примечание

Элемент audio не поддерживается API Long Audio.

Синтаксис

<audio src="string"/></audio>

Attribute

attribute Описание Обязательный или необязательный
src Задает расположение или URL-адрес аудиофайла. Обязательно при использовании элемента audio в документе SSML.

Пример

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <p>
            <audio src="https://contoso.com/opinionprompt.wav"/>
            Thanks for offering your opinion. Please begin speaking after the beep.
            <audio src="https://contoso.com/beep.wav">
                Could not play the beep, please voice your opinion now.
            </audio>
        </p>
    </voice>
</speak>

Добавление фонового звука

Элемент mstts:backgroundaudio позволяет добавлять фоновый звук в документы SSML или смешивать звуковой файл с преобразованием текста в речь. mstts:backgroundaudio позволяет зацикливать звуковой файл в фоновом режиме, постепенно усиливать его в начале и постепенно приглушать в конце преобразования текста в речь.

Если предоставленный фоновый звук короче, чем преобразование текста в речь или затухание, он зацикливается. Если он длиннее, чем преобразование текста в речь, то останавливается по завершении затухания.

Для каждого документа SSML можно использовать только один фоновый звуковой файл. Можно вставить теги audio в элемент voice, чтобы добавить дополнительный звук в документ SSML.

Примечание

Элемент mstts:backgroundaudio не поддерживается API Long Audio.

Синтаксис

<mstts:backgroundaudio src="string" volume="string" fadein="string" fadeout="string"/>

Атрибуты

attribute Описание Обязательный или необязательный
src Задает расположение или URL-адрес фонового аудиофайла. Обязательно при использовании фонового звука в документе SSML
volume Задает громкость фонового звукового файла. Допустимые значения: от 0 до 100 включительно. Значение по умолчанию — 1. Необязательно
fadein Задает время постепенного усиления фонового звука в миллисекундах. Значение по умолчанию — 0, что эквивалентно отсутствию постепенного усиления. Допустимые значения: от 0 до 10000 включительно. Необязательно
fadeout Задает время затухания фонового звука в миллисекундах. Значение по умолчанию — 0, что эквивалентно отсутствию затухания. Допустимые значения: от 0 до 10000 включительно. Необязательно

Пример

<speak version="1.0" xml:lang="en-US" xmlns:mstts="http://www.w3.org/2001/mstts">
    <mstts:backgroundaudio src="https://contoso.com/sample.wav" volume="0.7" fadein="3000" fadeout="4000"/>
    <voice name="Microsoft Server Speech Text to Speech Voice (en-US, JennyNeural)">
        The text provided in this document will be spoken over the background audio.
    </voice>
</speak>

Элемент закладки

Элемент bookmark дает возможность вставлять пользовательские маркеры в SSML, чтобы сформировать смещение каждого маркера в звуковом потоке. Элементы bookmark не будут озвучиваться. Элемент bookmark можно использовать для ссылки на определенное место в тексте или последовательности тегов. Закладка доступна для всех языков и голосов.

Синтаксис

<bookmark mark="string"/>

Attribute

attribute Описание Обязательный или необязательный
mark Задает справочный текст элемента bookmark. Обязательный

Пример

Например, может потребоваться узнать смещение времени для каждого слова "цветок" в следующем фрагменте кода:

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AriaNeural">
        We are selling <bookmark mark='flower_1'/>roses and <bookmark mark='flower_2'/>daisies.
    </voice>
</speak>

Получение закладки с помощью пакета SDK службы "Речь"

Можно подписаться на событие BookmarkReached в пакете SDK службы "Речь", чтобы получать сведения о смещениях закладок.

Примечание

Событие BookmarkReached доступно только в пакетах SDK службы "Речь" версии 1.16 или выше.

События BookmarkReached создаются, когда становятся доступными исходящие аудиоданные, что происходит раньше начала реального воспроизведения на устройстве вывода.

  • AudioOffset передает значение времени, прошедшего в выходном аудиопотоке с момента начала синтеза до элемента bookmark. Время измеряется в сотнях наносекунд (HNS), то есть значение 10 000 HNS соответствует 1 миллисекунде.
  • Text — эталонный текст элемента bookmark, который является строкой, заданной в атрибуте mark.

Для получения дополнительной информации см. BookmarkReached.

synthesizer.BookmarkReached += (s, e) =>
{
    // The unit of e.AudioOffset is tick (1 tick = 100 nanoseconds), divide by 10,000 to convert to milliseconds.
    Console.WriteLine($"Bookmark reached. Audio offset: " +
        $"{e.AudioOffset / 10000}ms, bookmark text: {e.Text}.");
};

В приведенном выше примере SSML событие BookmarkReached будет активировано дважды, а выходные данные консоли будут выглядеть следующим образом.

Bookmark reached. Audio offset: 825ms, bookmark text: flower_1.
Bookmark reached. Audio offset: 1462.5ms, bookmark text: flower_2.

Поддерживаемые элементы MathML

Математический язык разметки (MathML) — это совместимый с XML язык разметки, позволяющий разработчикам указывать способ преобразования входного текста в синтезированную речь с помощью преобразования текста в речь.

Примечание

Элементы MathML (теги) в настоящее время поддерживаются всеми нейронными голосами в языковых стандартах en-US и en-AU.

Пример

В этом фрагменте SSML показано, как элементы MathML используются для вывода синтезированной речи. Выходные данные преобразования текста в речь в этом примере имеют следующий вид: "a в квадрате плюс b в квадрате равно c в квадрате".

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="en-US"><voice name="en-US-JennyNeural"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mi>a</mi><mn>2</mn></msup><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup><mo>=</mo><msup><mi>c</mi><mn>2</mn></msup></math></voice></speak>

Атрибут xmlns в <math xmlns="http://www.w3.org/1998/Math/MathML"> является необязательным.

Поддерживаются все элементы из спецификаций MathML 2.0 и MathML 3.0, за исключением элементов Elementary Math из MathML 3.0. Элементы semantics, annotation и annotation-xml не выводят речь, поэтому они игнорируются.

Примечание

Если элемент не распознается, он будет проигнорирован, а дочерние элементы в нем по-прежнему будут обработаны.

Сущности MathML не поддерживаются синтаксисом XML, поэтому для представления сущностей необходимо использовать соответствующие символы Юникода, например, сущность &copy; должна быть представлена ее символами Юникода &#x00A9;, в противном случае возникнет ошибка.

Следующие шаги

Поддержка голосов, языковых стандартов и языков