Pronunciación con SSML
Puede usar el Lenguaje de marcado de síntesis de voz (SSML) con conversión texto a voz para especificar cómo se pronuncia la voz. Por ejemplo, puede usar SSML con fonemas y un léxico personalizado para mejorar la pronunciación. También puede usar SSML para definir cómo se pronuncia una palabra o expresión matemática.
Consulte las secciones siguientes para obtener más información sobre cómo usar elementos SSML para mejorar la pronunciación. Para obtener más información sobre la sintaxis de SSML, consulte Estructura y eventos del documento de SSML.
Elemento fonema
El elemento phoneme
se utiliza para la pronunciación fonética en los documentos SSML. Proporcione siempre una voz natural como reserva.
Los alfabetos fonéticos se componen de segmentos acústicos, que se componen de letras, números o caracteres, a veces en combinación. Cada segmento acústico describe un sonido de voz único. El alfabeto fonético contrasta con el alfabeto latino, donde cualquier letra puede representar múltiples sonidos hablados. Tenga en cuenta las pronunciaciones en-US
diferentes de la letra "c" en las palabras "casa" y "cese" o, en inglés, las distintas pronunciaciones de la combinación de letras "th" en las palabras "thing" y "those".
Nota
Para una lista de las configuraciones regionales que admiten fonemas, consulte las notas al pie en la tabla de compatibilidad de idiomas.
El uso de los atributos del elemento phoneme
se describe en la tabla siguiente.
Atributo | Descripción | Obligatorio u opcional |
---|---|---|
alphabet |
El alfabeto fonético que se utilizará al sintetizar la pronunciación de la cadena en el atributo ph . La cadena que especifica el alfabeto se debe especificar en minúsculas. Las siguientes opciones son los posibles alfabetos que puede especificar:
El alfabeto solo se aplica a phoneme en el elemento. |
Opcional |
ph |
Una cadena que contiene los segmentos acústicos que especifican la pronunciación de la palabra en el elemento phoneme . Si la cadena especificada contiene segmentos acústicos no reconocidos, la conversión de texto a voz rechaza todo el documento SSML y no produce ninguna de las salidas de voz especificadas en el documento.En ipa , para acentuar una sílaba colocando el símbolo de acento antes de esta sílaba, debe marcar todas las sílabas de la palabra. O, de lo contrario, se acentúa la sílaba que hay antes del símbolo de acento. En sapi , si quiere acentuar una sílaba, debe colocar el símbolo de acento después de esta sílaba, independientemente de que se marquen o no todas las sílabas de la palabra. |
Obligatorio |
Ejemplos de fonema
Los valores admitidos para los atributos del elemento phoneme
se describieron anteriormente. En los dos primeros ejemplos, los valores de ph="tə.ˈmeɪ.toʊ"
o ph="təmeɪˈtoʊ"
se especifican para acentuar la sílaba 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>
Léxico personalizado
Puede definir cómo se leen las entidades únicas (como la empresa, un término médico o un emoji) en SSML mediante el fonema y subelementos. Para definir cómo se leen varias entidades, cree un archivo de léxico personalizado estructurado XML. Después, cargue el archivo XML de léxico personalizado y haga referencia a él con el elemento SSML lexicon
.
Nota
Para una lista de las configuraciones regionales que admiten lexicones, consulte las notas al pie en la tabla de compatibilidad de idiomas.
Long Audio API no admite el elemento lexicon
. Para texto a voz de formato largo, use la API de síntesis por lotes (versión preliminar) en su lugar.
El uso de los atributos del elemento lexicon
se describe en la tabla siguiente.
Atributo | Descripción | Obligatorio u opcional |
---|---|---|
uri |
El URI del archivo XML de léxico personalizado accesible públicamente con la extensión de archivo .xml o .pls . Se recomienda usar Azure Blob Storage, pero no es necesario. Para más información sobre el archivo de lexicón personalizado, consulte Especificación del lexicón de pronunciación (PLS), versión 1.0. |
Obligatorio |
Ejemplos de léxico personalizados
Los valores admitidos para los atributos del elemento lexicon
se describieron anteriormente.
Una vez publicado el lexicón personalizado, puede hacer referencia a él desde su SSML. En el siguiente ejemplo de SSML se hace referencia a un léxico personalizado que se cargó en https://www.example.com/customlexicon.xml
. Se admiten direcciones URL de léxico desde Azure Blob Storage, Advanced Media Services (AMS) Storage y GitHub. Sin embargo, tenga en cuenta que es posible que otras direcciones URL públicas no sean compatibles.
<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>
Archivo de léxico personalizado
Para definir cómo se leen varias entidades, puede definirlas en un archivo XML de léxico personalizado con la extensión de archivo .xml
o .pls
.
Nota
El archivo de léxico personalizado es un documento XML válido, pero no se puede usar como documento SSML.
Estas son algunas limitaciones del archivo léxico personalizado:
- Tamaño del archivo: el tamaño del archivo léxico personalizado está limitado a un máximo de 100 KB. Si el tamaño del archivo supera el límite de 100 KB, se produce un error en la solicitud de síntesis. Puede dividir el léxico en varios léxicos e incluirlos en SSML si el tamaño del archivo supera los 100 KB.
- Actualización de la caché de lexicón: el lexicón personalizado se almacena en caché con el identificador URI como clave en la conversión de texto a voz cuando se carga por primera vez. El lexicón con el mismo identificador URI no se vuelve a cargar en 15 minutos, por lo que el cambio de lexicón personalizado debe esperar 15 minutos como máximo para tener efecto.
Los elementos y atributos admitidos de un archivo XML de léxico personalizado se describen en la versión 1.0 de especificación de léxico de pronunciación (PLS). Estos son algunos ejemplos de los elementos y atributos admitidos:
- El elemento
lexicon
contiene al menos un elementolexeme
. El lexicón contiene el atributoxml:lang
necesario para indicar a qué configuración regional se debe aplicar. Un lexicón personalizado está limitado a una configuración regional por diseño, por lo que no funcionará al aplicarlo para otra configuración regional. El elementolexicon
también tiene un atributoalphabet
para indicar el alfabeto usado en el léxico. Los valores posibles sonipa
yx-microsoft-sapi
. - Cada elemento
lexeme
contiene al menos un elementographeme
y uno o varios elementosgrapheme
,alias
yphoneme
. El elementolexeme
distingue mayúsculas de minúsculas en el lexicón personalizado. Por ejemplo, si solo proporciona un fonema para el elementolexeme
"Hello", no funciona para el elementolexeme
"hello". - El elemento
grapheme
contiene texto que describe la ortografía. - Los elementos
alias
se usan para indicar la pronunciación de un acrónimo o un término abreviado. - El elemento
phoneme
proporciona texto que describe cómo se pronuncia un elementolexeme
. El límite entre sílabas es "." en el alfabeto IPA. El elementophoneme
no puede contener espacios en blanco cuando se usa el alfabeto IPA. - Cuando se proporcionan los elementos
alias
yphoneme
con el mismo elementographeme
, el elementoalias
tiene prioridad.
Microsoft proporciona una herramienta de validación para el léxico personalizado que le ayuda a encontrar errores (con mensajes de error detallados) en el archivo de léxico personalizado. Se recomienda usar la herramienta antes de usar el archivo XML de léxico personalizado en producción con el servicio de voz.
Ejemplos de archivos de léxico personalizados
El siguiente ejemplo XML (no SSML) se incluirá en un archivo de léxico personalizado .xml
. Cuando se usa este lexicón personalizado, "BTW" se lee como "By the way" y "Benigni" se lee con el IPA proporcionado "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>
No se puede establecer directamente la pronunciación de una frase mediante el lexicón personalizado. Si tiene que establecer la pronunciación de un acrónimo o un término abreviado, proporcione primero un elemento alias
y, a continuación, asocie el elemento phoneme
con dicho elemento alias
. Por ejemplo:
<?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>
También puede proporcionar directamente el alias
esperado para el acrónimo o el término abreviado. Por ejemplo:
<lexeme>
<grapheme>Scotland MV</grapheme>
<alias>Scotland Media Wave</alias>
</lexeme>
Los ejemplos de archivos XML de léxico personalizado anteriores usan el alfabeto IPA, que también se conoce como el conjunto de teléfonos IPA. Se recomienda usar el IPA porque es el estándar internacional. En algunos caracteres del IPA, tienen la versión "precompuesta" y "descompuesta" cuando se representan con Unicode. El lexicón personalizado solo admite caracteres Unicode descompuestos.
El servicio de voz define un conjunto fonético para estas configuraciones regionales: en-US
, fr-FR
, de-DE
, es-ES
, ja-JP
, zh-CN
, zh-HK
y zh-TW
. Para más información sobre el alfabeto fonético del servicio de voz detallado, consulte los conjuntos fonéticos del servicio de voz.
Puede usar x-microsoft-sapi
como valor del atributo alphabet
con lexicones personalizados, como se muestra aquí:
<?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>
Elemento Say-as
El elemento say-as
indica el tipo de contenido (por ejemplo, un número o una fecha) del texto del elemento. Este elemento proporciona instrucciones al motor de síntesis de voz sobre cómo pronunciar el texto.
El uso de los atributos del elemento say-as
se describe en la tabla siguiente.
Atributo | Descripción | Obligatorio u opcional |
---|---|---|
interpret-as |
Indica el tipo de contenido del texto de un elemento. Para obtener una lista de tipos, consulte la tabla siguiente. | Obligatorio |
format |
Proporciona información adicional sobre el formato preciso del texto del elemento para los tipos de contenido que pueden tener formatos ambiguos. SSML define formatos para los tipos de contenido que los usan. Consulte la tabla siguiente. | Opcional |
detail |
Indica el nivel de detalle con que se va a hablar. Por ejemplo, este atributo puede solicitar que el motor de síntesis de voz pronuncie signos de puntuación. No hay valores estándar definidos para detail . |
Opcional |
Se admiten los siguientes tipos de contenido para los atributos interpret-as
y format
. Incluya el atributo format
solo si la columna format
no está vacía en esta tabla.
Nota:
Los valores characters
y spell-out
para el atributo interpret-as
se admiten para todos los texto en configuraciones regionales de voz.
Se admiten otros interpret-as
valores de atributo para todas las configuraciones regionales de los siguientes idiomas: árabe, catalán, chino, danés, neerlandés, inglés, francés, finés, alemán, hindi, italiano, japonés, coreano, noruego, polaco, portugués, ruso, español y sueco.
interpret-as | format | Interpretación |
---|---|---|
characters , spell-out |
El texto se pronuncia como letras individuales (deletreadas). El motor de síntesis de voz pronuncia:<say-as interpret-as="characters">test</say-as> Como "T E S T". |
|
cardinal , number |
Ninguno | El texto se pronuncia como un número cardinal. El motor de síntesis de voz pronuncia:There are <say-as interpret-as="cardinal">10</say-as> options Como "Hay diez opciones." |
ordinal |
None | El texto se pronuncia como un número ordinal. El motor de síntesis de voz pronuncia:Select the <say-as interpret-as="ordinal">3rd</say-as> option Como "Seleccione la tercera opción". |
number_digit |
Ninguno | El texto se pronuncia como una secuencia de dígitos individuales. El motor de síntesis de voz pronuncia:<say-as interpret-as="number_digit">123456789</say-as> Como "1 2 3 4 5 6 7 8 9". |
fraction |
None | El texto se pronuncia como un número fraccionario. El motor de síntesis de voz pronuncia:<say-as interpret-as="fraction">3/8</say-as> of an inch Como "tres octavos de pulgada". |
date |
dmy, mdy, ymd, ydm, ym, my, md, dm, d, m, y | El texto se pronuncia como una fecha. El atributo format especifica el formato de la fecha (d=día, m=mes, y=año) . El motor de síntesis de voz pronuncia:Today is <say-as interpret-as="date">10-12-2016</say-as> Como "Hoy es el duodécimo de octubre dos mil dieciséis." Pronuncia: Today is <say-as interpret-as="date" format="dmy">10-12-2016</say-as> Como "Hoy es diez de diciembre de dos mil dieciséis". |
time |
hms12, hms24 | El texto se pronuncia como una hora. El atributo format especifica si la hora se especifica mediante un reloj de 12 horas (hms12) o de 24 horas (hms24). Use un signo de dos puntos para separar los números que representan las horas, los minutos y los segundos. Estos son algunos ejemplos de horas válidas: 12:35, 1:14:32, 08:15 y 02:50:45. El motor de síntesis de voz pronuncia:The train departs at <say-as interpret-as="time" format="hms12">4:00am</say-as> Como "El tren sale a las cuatro A. M.". |
duration |
hms, hm, ms | El texto se pronuncia como una duración. El atributo format especifica el formato de la duración (h=hour, m=minute y s=second). El motor de síntesis de voz pronuncia:<say-as interpret-as="duration">01:18:30</say-as> Como "una hora, dieciocho minutos y treinta segundos". Pronuncia: <say-as interpret-as="duration" format="ms">01:18</say-as> Como "un minuto y dieciocho segundos". Esta etiqueta solo se admite en inglés y español. |
telephone |
None | El texto se pronuncia como un número de teléfono. El motor de síntesis de voz pronuncia:The number is <say-as interpret-as="telephone">(888) 555-1212</say-as> Como "Mi número es el código de área ocho ocho ocho cinco cinco cinco uno dos uno dos". |
currency |
None | El texto se pronuncia como una moneda. El motor de síntesis de voz pronuncia:<say-as interpret-as="currency">99.9 USD</say-as> Como "noventa y nueve dólares y noventa centavos estadounidenses". |
address |
None | El texto se pronuncia como una dirección. El motor de síntesis de voz pronuncia:I'm at <say-as interpret-as="address">150th CT NE, Redmond, WA</say-as> Como "Estoy en el número 150 de Court North East Redmond, en Washington". |
name |
None | El texto se pronuncia como el nombre de una persona. El motor de síntesis de voz pronuncia:<say-as interpret-as="name">ED</say-as> Como [æd]. En los nombres chinos, algunos caracteres se pronuncian de forma diferente cuando aparecen en un nombre de familia. Por ejemplo, el motor de síntesis de voz dice 仇 en <say-as interpret-as="name">仇先生</say-as> Como [qiú] en lugar de [chóu]. |
Ejemplos de say-as
Los valores admitidos para los atributos del elemento say-as
se describieron anteriormente.
El motor de síntesis de voz pronuncia el ejemplo siguiente como "Su primera solicitud fue de una habitación el diecinueve de octubre de dos mil diez con llegada a las diecisiete treinta y cinco".
<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>
Subelemento
Use el elemento sub
para indicar que el valor de texto del atributo del alias debe pronunciarse en lugar del texto incluido del elemento. De este modo, el SSML contiene un formulario hablado y escrito.
El uso de los atributos del elemento sub
se describe en la tabla siguiente.
Atributo | Descripción | Obligatorio u opcional |
---|---|---|
alias |
Valor de texto que se debe pronunciar en lugar del texto incluido en el elemento. | Obligatorio |
Subejemplos
Los valores admitidos para los atributos del elemento sub
se describieron anteriormente.
El motor de síntesis de voz pronuncia el ejemplo siguiente como "World Wide Web Consortium".
<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>
Pronunciación con MathML
El Lenguaje de marcado matemático (MathML) es un lenguaje de marcado compatible con XML que describe contenido matemático y estructura. El servicio de Voz puede usar MathML como texto de entrada para pronunciar correctamente notaciones matemáticas en el audio de salida.
Nota:
Los elementos MathML (etiquetas) se admiten actualmente en las siguientes configuraciones regionales: de-DE
, en-AU
, en-GB
, en-US
, es-ES
, es-MX
, fr-CA
, fr-FR
, it-IT
, ja-JP
, ko-KR
, pt-BR
y zh-CN
.
Se admiten todos los elementos de las especificaciones MathML 2.0 y MathML 3.0, excepto los elementos Elementary Math de MathML 3.0.
Tome nota de estos atributos y elementos MathML:
- El atributo
xmlns
en<math xmlns="http://www.w3.org/1998/Math/MathML">
es opcional. - Los elementos
semantics
,annotation
yannotation-xml
no generan voz, por lo que se omiten. - Si no se reconoce un elemento, se omite y los elementos secundarios dentro de él se siguen procesando.
La sintaxis XML no admite las entidades MathML, por lo que debe usar los caracteres unicode correspondientes para representar las entidades, por ejemplo, la entidad ©
debe representarse mediante sus caracteres unicode ©
, de lo contrario, se produce un error.
Ejemplos de MathML
La salida de texto a voz para este ejemplo es "a cuadrado más b cuadrado equivale a c cuadrado".
<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>