Произношение с помощью 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-CN
zh-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-GB
en-US
es-MX
fr-CA
fr-FR
es-ES
en-AU
ja-JP
ko-KR
it-IT
pt-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, поэтому необходимо использовать соответствующие символы юникода для представления сущностей, например, сущность ©
должна быть представлена своими символами юникода ©
, в противном случае возникает ошибка.
Примеры 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>