Поделиться через


Структура и события документа SSML

Язык разметки синтеза речи (SSML) с входным текстом определяет структуру, содержимое и другие характеристики текста для вывода речи. Например, можно использовать SSML для определения абзаца, предложения, перерыва или паузы или молчания. Текст можно упаковать с помощью тегов событий, таких как закладка или viseme, которые можно обработать позже приложением.

Дополнительные сведения о структуре элементов в документе SSML см. в разделах ниже.

Примечание.

В дополнение к нейронным голосам службы "Речь ИИ Azure" (не HD), вы также можете использовать голоса высокой четкости распознавания речи ИИ Azure и нейронные голоса Azure OpenAI (HD и не HD). Голоса HD обеспечивают более высокое качество для более универсальных сценариев.

Некоторые голоса не поддерживают все теги языка разметки синтеза речи (SSML ). Это включает в себя нейронный текст для голосов hd, личных голосов и внедренных голосов.

  • Сведения о поддержке SSML см. в разделе "Высокоопределяемая функция распознавания речи Azure" (HD).
  • Для личного голоса вы можете найти поддержку SSML здесь.
  • Для внедренных голосов проверьте поддержку SSML здесь.

Структура документа

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

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

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

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="string">
    <mstts:backgroundaudio src="string" volume="string" fadein="string" fadeout="string"/>
    <voice name="string" effect="string">
        <audio src="string"></audio>
        <bookmark mark="string"/>
        <break strength="string" time="string" />
        <emphasis level="value"></emphasis>
        <lang xml:lang="string"></lang>
        <lexicon uri="string"/>
        <math xmlns="http://www.w3.org/1998/Math/MathML"></math>
        <mstts:audioduration value="string"/>
        <mstts:ttsembedding speakerProfileId="string"></mstts:ttsembedding>
        <mstts:express-as style="string" styledegree="value" role="string"></mstts:express-as>
        <mstts:silence type="string" value="string"/>
        <mstts:viseme type="string"/>
        <p></p>
        <phoneme alphabet="string" ph="string"></phoneme>
        <prosody pitch="value" contour="value" range="value" rate="value" volume="value"></prosody>
        <s></s>
        <say-as interpret-as="string" format="string" detail="string"></say-as>
        <sub alias="string"></sub>
    </voice>
</speak>

Некоторые примеры содержимого, разрешенного в каждом элементе, описаны в следующем списке:

  • audio: текст audio элемента может содержать обычный текст или разметку SSML, которая говорится, если звуковой файл недоступен или недоступен для воспроизведения. Элемент audio может содержать текст и следующие элементы: audio, break, p, s, phoneme, prosody, say-as и sub.
  • bookmark: этот элемент не может содержать текст или другие элементы.
  • break: этот элемент не может содержать текст или другие элементы.
  • emphasis: этот элемент может содержать текст и следующие элементы: audio, emphasisbreak, lang, , phoneme, prosodysay-asи sub.
  • lang: этот элемент может содержать все остальные элементы, кроме mstts:backgroundaudio, voiceи speak.
  • lexicon: этот элемент не может содержать текст или другие элементы.
  • math: этот элемент может содержать только текст и элементы MathML.
  • mstts:audioduration: этот элемент не может содержать текст или другие элементы.
  • mstts:backgroundaudio: этот элемент не может содержать текст или другие элементы.
  • mstts:embedding: этот элемент может содержать текст и следующие элементы: audio, emphasisbreak, lang, , phoneme, prosodysay-asи sub.
  • mstts:express-as: этот элемент может содержать текст и следующие элементы: audio, emphasisbreak, lang, , phoneme, prosodysay-asи sub.
  • mstts:silence: этот элемент не может содержать текст или другие элементы.
  • mstts:viseme: этот элемент не может содержать текст или другие элементы.
  • p: этот элемент может содержать текст и следующие элементы: audio, phonemebreak, prosody, , say-as, submstts:express-asи s.
  • phoneme: этот элемент может содержать только текст и никакие другие элементы.
  • prosody: этот элемент может содержать текст и следующие элементы: audio, pbreak, phoneme, , prosody, say-assubи s.
  • s: этот элемент может содержать текст и следующие элементы: audio, break, phoneme, prosody, say-as, mstts:express-asи sub.
  • say-as: этот элемент может содержать только текст и никакие другие элементы.
  • sub: этот элемент может содержать только текст и никакие другие элементы.
  • speak: корневой элемент документа SSML. Этот элемент может содержать следующие элементы: mstts:backgroundaudio и voice.
  • voice: этот элемент может содержать все остальные элементы, кроме mstts:backgroundaudio и speak.

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

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

Чтобы использовать символы &, <и > в значении или тексте элемента SSML необходимо использовать формат сущности. В частности, следует использовать &amp; &вместо , использовать &lt; вместо <него и использовать &gt; вместо >него . В противном случае SSML не анализируется правильно.

Например, укажите green &amp; yellow вместо green & yellow. Следующий SSML анализируется должным образом:

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        My favorite colors are green &amp; yellow.
    </voice>
</speak>

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

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

Говорить корневой элемент

Элемент speak содержит такие сведения, как версия, язык и определение словаря разметки. Элемент speak — это корневой элемент, необходимый для всех документов SSML. Необходимо указать язык по умолчанию в элементе speak , независимо от того, корректируется ли язык в другом месте, например в элементе lang .

Ниже приведен синтаксис элемента speak :

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

Элемент speak должен содержать по крайней мере один элемент голоса.

говорить примеры

Ранее описаны поддерживаемые значения атрибутов speak элемента.

Пример единого голоса

В этом примере используется голос en-US-AvaNeural. Дополнительные примеры см . в примерах голосовой связи.

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

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

break Используйте элемент, чтобы переопределить поведение разрывов или пауз по умолчанию между словами. В противном случае служба "Речь" автоматически вставляет паузы.

break Использование атрибутов элемента описано в следующей таблице.

Атрибут Description Обязательно или необязательно
strength Относительная длительность паузы с помощью одного из следующих значений:
  • x-weak
  • weak
  • medium (по умолчанию)
  • strong
  • x-strong
Необязательно
time Абсолютная длительность паузы в секундах (например 2s) или миллисекундах (например 500ms). Допустимые значения варьируются от 0 до 20000 миллисекундах. Если задать значение, превышающее поддерживаемое максимальное значение, служба использует 20000ms. time Если задан атрибут, strength атрибут игнорируется. Необязательно

Ниже приведены дополнительные сведения об атрибуте strength .

Сила Относительная длительность
Очень слабая 250 мс
Слабая 500 мс
Средняя 750 мс
Строгие 1000 мс
Очень сильная 1250 мс

Примеры останова

Ранее описаны поддерживаемые значения атрибутов break элемента. Следующие три способа добавляют разрывы 750 мс.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        Welcome <break /> to text to speech.
        Welcome <break strength="medium" /> to text to speech.
        Welcome <break time="750ms" /> to text to speech.
    </voice>
</speak>

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

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

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

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

mstts:silence Использование атрибутов элемента описано в следующей таблице.

Атрибут Description Обязательно или необязательно
type Указывает, где и как добавить молчание. Поддерживаются следующие типы молчания:
  • Leading – Дополнительное молчание в начале текста. Заданное значение добавляется в естественное молчание перед началом текста.
  • Leading-exact — Молчание в начале текста. Значение является абсолютной длиной молчания.
  • Tailing – Дополнительное молчание в конце текста. Заданное значение добавляется в естественное молчание после последнего слова.
  • Tailing-exact — Молчание в конце текста. Значение является абсолютной длиной молчания.
  • Sentenceboundary – Дополнительное молчание между смежными предложениями. Фактическая длина молчания для этого типа включает естественное молчание после последнего слова в предыдущем предложении, значение, заданное для этого типа, и естественное молчание перед начальным словом в следующем предложении.
  • Sentenceboundary-exact — молчание между смежными предложениями. Значение является абсолютной длиной молчания.
  • Comma-exact — молчание в запятой в полуширином или полноширином формате. Значение является абсолютной длиной молчания.
  • Semicolon-exact — молчание в полуширином или полноширином формате. Значение является абсолютной длиной молчания.
  • Enumerationcomma-exact — молчание при перечислении запятой в полноширином формате. Значение является абсолютной длиной молчания.

Абсолютный тип молчания (с суффиксом -exact ) заменяет любой другой естественный ведущий или конечный молчание. Абсолютные типы молчания имеют приоритет над соответствующим не абсолютным типом. Например, если заданы оба Leading типа, Leading-exact тип Leading-exact вступает в силу. Событие WordBoundary имеет приоритет над параметрами молчания, связанными с препинанием, включая Comma-exact, Semicolon-exactили Enumerationcomma-exact. При использовании WordBoundary параметров тишины, связанных с событием и препинанием, параметры молчания, связанные с препинанием, не вступают в силу.
Обязательное поле
Value Длительность паузы в секундах (например 2s) или миллисекундах (например 500ms). Допустимые значения варьируются от 0 до 20000 миллисекундах. Если задать значение, превышающее поддерживаемое максимальное значение, служба использует 20000ms. Обязательное поле

Примеры молчания mstts

Ранее описаны поддерживаемые значения атрибутов mstts:silence элемента.

В этом примере используется mstts: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-AvaNeural">
<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>

В этом примере mstts:silence используется для добавления 50 мс тишины в запятую, 100 мс молчания в точке с запятой и 150 мс молчания в запятой перечисления.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="zh-CN">
<voice name="zh-CN-YunxiNeural">
<mstts:silence type="comma-exact" value="50ms"/><mstts:silence type="semicolon-exact" value="100ms"/><mstts:silence type="enumerationcomma-exact" value="150ms"/>你好呀,云希、晓晓;你好呀。
</voice>
</speak>

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

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

Примеры абзаца и предложения

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

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        <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>

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

Элемент в SSML можно использовать bookmark для ссылки на определенное расположение в последовательности текста или тега. Затем вы используете пакет SDK службы "Речь" и подписываетесь на BookmarkReached событие, чтобы получить смещение каждого маркера в звуковом потоке. Элемент bookmark не говорится. Дополнительные сведения см. в разделе "Подписка на события синтезатора".

bookmark Использование атрибутов элемента описано в следующей таблице.

Атрибут Description Обязательно или необязательно
mark Ссылочный текст bookmark элемента. Обязательное поле

Примеры закладок

Ранее описаны поддерживаемые значения атрибутов bookmark элемента.

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

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

Элемент виземы

Визема — это визуальное описание фонемы в устной речи. Она определяет положение лица и рта в тот или иной момент речи. Элемент mstts:viseme в SSML можно использовать для запроса выходных данных виземы. Дополнительные сведения см. в разделе Получение сведений о положении лица с помощью виземы.

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

viseme Использование атрибутов элемента описано в следующей таблице.

Атрибут Description Обязательно или необязательно
type Тип выходных данных viseme.
  • redlips_front — синхронизация губ с идентификатором viseme и выходными данными смещения звука
  • FacialExpression — выходные данные фигур смешения
Обязательное поле

Примечание.

В настоящее время redlips_front поддерживает только нейронные голоса в языковом стандарте en-US, а FacialExpression поддерживает нейронные голоса в языковых стандартах en-US и zh-CN.

Примеры Viseme

Ранее описаны поддерживаемые значения атрибутов viseme элемента.

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

<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-AvaNeural">
    <mstts:viseme type="FacialExpression"/>
    Rainbow has seven colors: Red, orange, yellow, green, blue, indigo, and violet.
  </voice>
</speak>

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