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


Произношение с помощью SSML

Вы можете использовать язык разметки синтеза речи (SSML) с текстом для указания того, как речь произносится. Например, можно использовать SSML с фонемами и пользовательским лексиконом для улучшения произношения. Вы также можете использовать SSML для определения того, как произносится слово или математическое выражение.

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

Элемент phoneme

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

Фонетические алфавиты состоят из фонем, которые состоят из букв, цифр или символов, а иногда из их сочетаний. Каждая фонема описывает уникальный звук речи. Фонетический алфавит отличается от латинского алфавита, где любое письмо может представлять несколько произнесенных звуков. Рассмотрим различные en-US произношения буквы "c" в словах "конфеты" и "прекратить" или различные произношения сочетания букв "th" в словах "вещь" и "те".

Примечание.

Список языковых стандартов, поддерживающих фонемы, см. в сносках в таблице поддержки языков.

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

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

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

Примеры phoneme

Ранее описаны поддерживаемые значения атрибутов phoneme элемента. В первых двух примерах значения ph="tə.ˈmeɪ.toʊ" или ph="təmeɪˈtoʊ" указываются для подчеркивания слога meɪ.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        <phoneme alphabet="ipa" ph="tə.ˈmeɪ.toʊ"> tomato </phoneme>
    </voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        <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-AvaNeural">
        <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-AvaNeural">
        <s>His name is Mike <phoneme alphabet="ups" ph="JH AU"> Zhou </phoneme></s>
    </voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
     <voice name="en-US-AvaNeural">
        <phoneme alphabet='x-sampa' ph='he."lou'>hello</phoneme>
    </voice>
</speak>

Пользовательский лексикон

Вы можете определить, как отдельные сущности (например, компания, медицинский термин или эмодзи) считываются в SSML с помощью фонемы и вложенных элементов. Чтобы определить, как считываются несколько сущностей, создайте структурированный пользовательский лексикон-файл XML. Затем вы отправляете пользовательский XML-файл лексикона и ссылаетесь на него с помощью элемента SSML lexicon .

Примечание.

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

Элемент lexicon не поддерживается API длинных аудиоматериалов. Вместо этого используйте API пакетного синтеза (предварительная версия).

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

Атрибут Description Обязательно или необязательно
uri Универсальный код ресурса (URI) общедоступного пользовательского XML-файла lexicon с расширением или .pls расширением.xml. Использование Хранилище BLOB-объектов Azure рекомендуется, но не требуется. Дополнительные сведения о файле пользовательского словаря см. в разделе Спецификация словаря произношения (PLS) версии 1.0. Обязательное поле

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

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

После публикации пользовательского лексикона вы можете ссылаться на него из SSML. В следующем примере SSML ссылается на пользовательский лексикон, который был отправлен https://www.example.com/customlexicon.xmlв . Мы поддерживаем URL-адреса лексикона из Хранилище BLOB-объектов Azure, расширенного хранилища Cлужбы мультимедиа (AMS) и GitHub. Однако обратите внимание, что другие общедоступные URL-адреса могут быть несовместимы.

<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">
        <lexicon uri="https://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>

Пользовательский файл лексикона

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

Примечание.

Пользовательский файл лексикона является допустимым XML-документом, но его нельзя использовать в качестве документа SSML.

Ниже приведены некоторые ограничения пользовательского лексического файла:

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

Поддерживаемые элементы и атрибуты пользовательского XML-файла лексикона описаны в спецификации Lexicon для произношения (PLS) версии 1.0. Ниже приведены некоторые примеры поддерживаемых элементов и атрибутов:

  • Элемент lexicon содержит по крайней мере один элемент lexeme. Словарь содержит обязательный атрибут xml:lang, указывающий, для какого языкового стандарта его следует применять. Один пользовательский лексикон ограничен одним языковым стандартом по дизайну, поэтому если применить его для другого языкового стандарта, он не работает. Элемент lexicon также имеет атрибут, указывающий alphabet алфавит, используемый в лексиконе. Возможные значения: ipa и x-microsoft-sapi.
  • Каждый элемент lexeme содержит по крайней мере один элемент grapheme, а также один или несколько элементов grapheme, alias и phoneme. Элемент lexeme учитывает регистр в пользовательском словаре. Например, если вы предоставляете телефонную строку только для lexeme "Hello", она не работает для lexeme "hello".
  • Элемент grapheme содержит текст, описывающий орфографию.
  • Элементы alias используются для указания произношения акронима или аббревиатуры.
  • Элемент phoneme предоставляет текст, описывающий произношение lexeme. Граница слога является "." в алфавите IPA. Элемент phoneme не может содержать пробелы при использовании алфавита IPA.
  • Если элементы alias и phoneme указаны с одним и тем же элементом grapheme, alias имеет более высокий приоритет.

Корпорация Майкрософт предоставляет средство проверки для пользовательского лексикона , которое помогает находить ошибки (с подробными сообщениями об ошибках) в пользовательском файле лексикона. Прежде чем использовать пользовательский XML-файл лексикона в рабочей среде со службой "Речь", рекомендуется использовать этот инструмент.

Примеры пользовательских лексикон-файлов

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

<?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>

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

<?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>Scotland MV</grapheme>
        <alias>ScotlandMV</alias>
    </lexeme>
    <lexeme>
        <grapheme>ScotlandMV</grapheme>
        <phoneme>ˈskɒtlənd.ˈmiːdiəm.weɪv</phoneme>
    </lexeme>
</lexicon>

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

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

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

Служба "Речь" определяет фонетический набор для следующих языковых стандартов: en-US, fr-FR, de-DE, es-ES, ja-JP, zh-CNzh-HKи 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>

элемент say-as

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

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

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

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

Примечание.

Для characters всех языковых стандартов речи поддерживаются и spell-out значения атрибутаinterpret-as. Другие interpret-as значения атрибутов поддерживаются для всех языков: арабский, каталонский, китайский, датский, голландский, английский, французский, финский, немецкий, хинди, итальянский, японский, корейский, норвежский, польский, португальский, русский, испанский и шведский.

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

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

как "T E S T".
cardinal, number нет Текст произносится как количественное числительное. Подсистема синтеза речи произносит следующее:

There are <say-as interpret-as="cardinal">10</say-as> options

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

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

как "Выберите третий вариант".
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

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

Today is <say-as interpret-as="date">10-12-2016</say-as>

Как "Сегодня двенадцатый октябрь 2 тысячи шестнадцать".
Произносится:

Today is <say-as interpret-as="date" format="dmy">10-12-2016</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>

как "Поезд отправляется в четыре утра".
duration hms, hm, ms Текст произносится как длительность. Атрибут format задает формат длительности (h = час, m = минута и s = секунда). Подсистема синтеза речи произносит следующее:

<say-as interpret-as="duration">01:18:30</say-as>

Как "один час восемнадцать минут и тридцать секунд".
Произносится:

<say-as interpret-as="duration" format="ms">01:18</say-as>

Как "одна минута и восемнадцать секунд".
Этот тег поддерживается только на английском и испанском языках.
telephone нет Текст произносится как номер телефона. Подсистема синтеза речи произносит следующее:

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

как "Мой номер — код города восемь восемь восемь пять пять пять один два один два".
currency нет Текст произносится как валюта. Подсистема синтеза речи произносит следующее:

<say-as interpret-as="currency">99.9 USD</say-as>

Как "девяносто девять долларов США и девяносто центов".
address нет Текст произносится как адрес. Подсистема синтеза речи произносит следующее:

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

как "Я возле дома 150 по Корт-Норд-Ист, Редмонд, Вашингтон".
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-AvaMultilingualNeural">
        <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>

вложенный элемент

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

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

Атрибут Description Обязательно или необязательно
alias Текстовое значение, которое должно быть произнесено вместо заключенного текста элемента. Обязательное поле

примеры вложенных

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

Подсистема синтеза речи говорит в следующем примере как "Консорциум World Wide Web".

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaMultilingualNeural">
        <sub alias="World Wide Web Consortium">W3C</sub>
    </voice>
</speak>

Произношение с помощью MathML

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

Примечание.

Элементы MathML (теги) в настоящее время поддерживаются в следующих языковых стандартах: de-DE, en-GBen-USes-MXfr-CAfr-FRes-ESen-AUja-JPko-KRit-ITpt-BRи .zh-CN

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

Запишите эти элементы и атрибуты MathML:

  • Атрибут xmlns в <math xmlns="http://www.w3.org/1998/Math/MathML"> является необязательным.
  • Элементы semantics, annotationи annotation-xml элементы не выводят речь, поэтому они игнорируются.
  • Если элемент не распознается, он игнорируется, а дочерние элементы в нем по-прежнему обрабатываются.

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

Примеры MathML

В этом примере выходные данные текста для речи — "квадрат плюс 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>

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