Interpretador SSML¶
O SSML 1.1 (Speech Synthesis Markup Language) é uma linguagem de marcação definida pelo W3C que permite controlar recursos de síntese de fala. Usando tags SSML, é possível modificar algumas características da fala sintetizada, como pronúncia e entonação, assim como forçar uma dada interpretação a determinados textos de entrada.
O interpretador SSML do Texto Fala não requer que sejam especificados o prólogo XML nem a tag raiz speak
. Dessa forma, os dois exemplos abaixo são equivalentes.
<?xml version="1.0"?>
<speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
http://www.w3.org/TR/speech-synthesis11/synthesis.xsd"
xml:lang="pt-BR">
Notícias da <sub alias="Organização das Nações Unidas">ONU</sub>!
</speak>
Notícias da <sub alias="Organização das Nações Unidas">ONU</sub>!
Tags SSML suportadas¶
O Texto Fala suporta a versão 1.1 do SSML. As próximas seções descrevem as tags suportadas, bem como exemplos de uso. Todas as tags presentes no texto de entrada devem estar no formato especificado, caso contrário, um erro será retornado ao usuário.
prosody¶
A tag prosody permite o controle da prosódia (ritmo e entonação) da fala sintetizada. O Texto Fala suporta os seguintes atributos para esta tag:
- pitch
Indica o pitch (entonação) da fala sintetizada. Os valores suportados são:
+/- número % (variação percentual no pitch)
+/- número st (variação em semitons no pitch)
x-low / low / medium / high / x-high / default
Exemplos de uso:
Agora vou usar uma voz <prosody pitch="x-high"> mais aguda </prosody> Agora vou usar uma voz <prosody pitch="x-low"> mais grave </prosody> Agora vou falar <prosody pitch="+20st"> com um pitch mais alto </prosody>
- rate
Modifica a velocidade da fala sintetizada. Os valores suportados são:
número não negativo % (mudança percentual relativa de ritmo, sendo “100%” o ritmo padrão)
x-slow / slow / medium / fast / x-fast / default
Exemplos de uso:
Agora vou falar <prosody rate="fast"> mais rápido </prosody> Agora vou falar <prosody rate="50%"> na metade da velocidade normal </prosody> Agora vou falar <prosody rate="200%"> no dobro da velocidade normal </prosody>
voice¶
A tag voice possibilita selecionar a voz a usar no processo de conversão do texto em fala. O Texto Fala suporta os seguintes atributos para esta tag:
- name
Nome da voz selecionada.
Exemplos de uso:
Eu consigo usar <voice name="carlos-natural-quality"> a voz da Rosana </voice> Agora vou usar <voice name="adriana-natural-quality"> a voz do Carlos </voice>
A voz será alterada no trecho compreendido entre as tags. Nos demais trechos, a voz usada será a voz padrão definida na requisição.
p e s¶
As tags p e s representam um parágrafo e uma sentença, respectivamente.
Caso um texto inserido entre essas tags não possua pontuação ao fechar a tag, um ponto final é inserido.
Exemplo de uso:
<p>Aqui temos um parágrafo</p> <s>Aqui temos uma sentença</s>
Dentro dessas tags podemos incluir as demais tags SSML.
sub¶
A tag sub permite a substituição do texto contido entre as tags por outro texto. O Texto Fala suporta o seguinte atributo para esta tag:
- alias
Indica o texto que deve substituir o texto original. O valor do atributo é textual.
Exemplo de uso:
<sub alias="Academia Brasileira de Letras"> ABL </sub>
A palavra “ABL” será substituída pelas palavras “Academia Brasileira de Letras”.
Nota
A tag sub não pode conter tags filhas, ou seja, não é permitido incluir outra tag entre <sub> </sub>
.
break¶
A tag break permite inserir uma pausa com tempo definido e um tipo no ponto onde a tag for inserida. O Texto Fala suporta o seguinte atributo para esta tag:
- time
Indica a duração da pausa. O valor do atributo é um número inteiro em segundos (s) ou milissegundos (ms).
- type
Indica o tipo da pausa. Este atributo não está incluído na especificação do SSML pelo W3C . Os valores suportados são:
,
;
:
?
!
.
Exemplo de uso:
Vou inserir uma pausa <break time="3s"/> aqui Vou inserir uma pausa de vírgula <break time="3s" type=","/> aqui
Nesse caso, será inserida uma pausa de 3 segundos entre as palavras pausa e aqui.
Nota
A soma total das pausas no texto de entrada não deve ultrapassar 20 segundos
, caso contrário um erro 400 será retornado.
Exemplo de texto incorreto:
«text»:»Operações associadas <break/> . <break time=»15s» type=»,»/> Nesse vídeo. <break time=»10s»/>»
Nota
A tag phoneme não pode conter tags filhas, ou seja, não é permitido incluir outra tag entre <phoneme> </phoneme>
.
say-as¶
A tag say-as determina a forma como um trecho de texto deve ser vocalizado. O Texto Fala suporta os seguintes atributos para esta tag:
- interpret-as
Indica o modo no qual o conteúdo da tag deve ser interpretado (i.e. seletrado, data, hora, etc.).
- format
Indica o formato do conteúdo da tag. Nem todos modos de interpretação possuem opções de formatos.
- callback
Indica que uma callback do usuário deve ser chamada para o tratamento do texto.
A tag say-as é muito útil na verbalização de construções como datas e horas, principalmente em situações de ambiguidade onde o Texto Fala não é capaz de decidir a melhor interpretação. Os valores válidos para o atributo interpret-as são:
Nota
A tag say-as não pode conter tags filhas, ou seja, não é permitido incluir outra tag entre <say-as> </say-as>
.
Os detalhes sobre cada interpretação disponível são exibidos a seguir.
- spell
Indica que os caracteres dentro da tag devem ser soletrados. A forma como são lidos os caracteres em modo soletrado encontra-se detalhada no Apêndice 1.
Exemplo de uso:
<say-as interpret-as="spell"> teste1 </say-as>
tê-ê-ésse-tê-ê-um
Opcionalmente, pode ser incluído um tipo de pausa entre os caracteres soletrados, através do atributo detail. Os tipos de pausa suportados são:
,
;
:
.
Exemplo de uso:
<say-as interpret-as="spell" detail=","> teste1 </say-as>
tê,ê,ésse,tê,ê,um
Além disso, existem outros três formatos que permite fazer um controle refinado sobre quais elementos do texto serão soletrados, também contendo opcionalmente o atributo detail:
- number
Indica que apenas os dígitos devem ser soletrados.
Exemplo de uso:
<say-as interpret-as="spell" format="number"> teste 123 </say-as>
teste um dois três
- letter
Indica que apenas os caracteres alfabéticos devem ser soletrados.
Exemplo de uso:
<say-as interpret-as="spell" format="letter"> teste 123 </say-as>
tê-ê-esse-tê-ê cento e vinte e três
- phonetic
Indica que todos os caracteres devem ser soletrados segundo o alfabeto fonético aeronáutico, para o Português do Brasil, ou o alfabeto fonético da OTAN, para o Espanhol Latino-americano.
Exemplo de uso em Português:
<say-as interpret-as="spell" format="phonetic"> teste 123 </say-as>
tango eco sierra tango eco uno dois três
- uf-br
Força a substituição de algumas siglas pelos nomes dos Estados brasileiros. Este tratamento não diferencia letras maiúsculas e minúsculas (“sp” e “SP”, por exemplo, são tratados da mesma maneira).
Os estados aceitos estão listados abaixo:
AC
ACRE
AL
ALAGOAS
AP
AMAPÁ
AM
AMAZONAS
BA
BAHIA
CE
CEARÁ
DF
DISTRITO FEDERAL
ES
ESPÍRITO SANTO
GO
GOIÁS
MA
MARANHÃO
MT
MATO GROSSO
MS
MATO GROSSO DO SUL
MG
MINAS GERAIS
PA
PARÁ
PB
PARAÍBA
PR
PARANÁ
PE
PERNAMBUCO
PI
PIAUÍ
RJ
RIO DE JANEIRO
RN
RIO GRANDE DO NORTE
RS
RIO GRANDE DO SUL
RO
RONDÔNIA
RR
RORAIMA
SC
SANTA CATARINA
SP
SÃO PAULO
SE
SERGIPE
TO
TOCANTINS
Exemplo de uso:
<say-as interpret-as="uf-br"> sp e mg </say-as>
São Paulo e Minas Gerais
- no-gender
No seu modo normal de operação, o Texto Fala detecta o gênero das palavras e usa essa informação para fazer a concordância adequada de valores numéricos. No entanto, é possível desabilitar esse recurso com o uso dessa interpretação, fazendo com que todas as palavras sejam consideradas masculinas.
Exemplo de uso:
<say-as interpret-as="no-gender"> Edifício Vitória, primeiro andar, conjunto 1 sala 2 </say-as>
Edifício Vitória, primeiro andar, conjunto um sala dois
Sem o uso da tag SSML o texto seria lido como “Edifício Vitória, primeiro andar, conjunto uma sala dois”, sendo uma a concordância com a palavra sala.
- date
Converte um formato determinado em uma data. Os formatos aceitos estão listados abaixo e incluem “d” (dia), “m” (mês) e “y” (ano). Os formatos suportados são:
Formato
Máscara
dmy
DD/MM/YYYY
mdy
MM/DD/YYYY
ymd
YYYY/MM/DD
ymd
YY/MM/DD
ym
YYYY/MM
my
MM/YYYY
md
MM/DD
dm
DD/MM
d
DD
m
MM
y
YYYY
Nota
O separador entre os números pode ser um traço (-) ou uma barra (/).
Meses podem ser indicados pela sua representação em três caracteres (i.e. Jan, Fev, Mai, etc).
Quando uma data é especificada usando dígitos e no formato dd/mm/aaaa, dia e mês podem especificar-se com 1 ou 2 dígitos e o ano com 2 ou 4 dígitos (e.g. 08/09/2017 ou 8/9/17).
Anos com 2 dígitos serão interpretados da seguinte forma: de 00 a 29 serão convertidos para 2000 a 2029; de 30 a 99 para 1930 a 1999.
Exemplo de uso:
<say-as interpret-as="date" format="mdy"> 05-04-2017 </say-as>quatro de maio de dois mil e dezessete
Formatos interpretados como datas sem necessidade de tags SSML:
1) #/#/# (DMY; dia e mês: 1 ou 2 dígitos; ano: 4 dígitos no intervalo 1800 a 2050; a data deve ser válida). Ex: 02/08/1980, 1/4/1996; 28/12/2006. Casos como os seguintes não serão interpretados como datas por violar algumas das condições acima: 30/02/2015; 18/9/1318; 31/07/46.
2) #/S/# (DMY; dia: 1 ou 2 dígitos; mês: as 3 primeiras letras do mês ou seu nome por inteiro; ano: 2 ou 4 dígitos; anos com 4 dígitos devem estar no intervalo 1800 a 2050). Ex: 02/ago/1980, 01/abril/96, 28/dez/06. Casos como os seguintes não serão interpretados como datas por violar algumas das condições acima: 02/agosto/1350; 15/dez/137. Como o mês está explícitamente indicado, este formato aceita datas irônicas, ex: 30/Fev/2018.
3) S/#/# (MDY; mês: as 3 primeiras letras do mês ou seu nome por inteiro; dia: 1 ou 2 dígitos; ano: 4 dígitos no intervalo 1800 a 2050). Ex: ago/02/1980; abril/01/1996; dez/28/2006. Casos como os seguintes não serão interpretados como datas por violar algumas das condições acima: agosto/02/1350; dez/15/137. Como o mês está explícitamente indicado, este formato aceita datas irônicas, ex: Fev/30/2018.
4) #/S/# (YMD; ano: 4 dígitos no intervalo 1800 a 2050; mês: as 3 primeiras letras do mês ou seu nome por inteiro; dia: 1 ou 2 dígitos). Ex: 1980/ago/11; 1996/março/26; 2006/nov/6. Casos como os seguintes não serão interpretados como datas por violar algumas das condições acima: 1350/agosto/02; 137/dez/15. Como o mês está explícitamente indicado, este formato aceita datas irônicas, ex: 2018/Fev/30.
5) #/S (YM;ano: 4 dígitos no intervalo 1800 a 2050; mês: as 3 primeiras letras do mês ou seu nome por inteiro) Ex: 1980/ago; 1996/março; 2006/nov. Casos como os seguintes não serão interpretados como datas por violar algumas das condições acima: 1350/agosto; 20/dez.
6) S/# (MY; mês: as 3 primeiras letras do mês ou seu nome por inteiro; ano: 4 dígitos no intervalo 1800 a 2050) Ex: ago/1980; março/1996; nov/2006. Casos como os seguintes não serão interpretados como datas por violar algumas das condições acima: ago/1350; janeiro/20.
- fraction
Permite interpretar como frações texto com formato «número/número» desde que estes números sejam inteiros entre 1 e 10 sem zeros à esquerda:
1/2; 2/3; 3/4; 10/5; 4/6; 2/7; 5/8; 2/9;
As frações poderão ser positivas ou negativas, neste último caso não pode haver espaço entre o símbolo de menos e a fração:
-1/2; -2/3; -1/4; -3/5; -4/6; -5/7;
Os textos a seguir não serão considerados frações já que numerador e/ou denominador estão fora do intervalo permitido, possuem zeros à esquerda ou não são números inteiros:
12/18 ; 2/17 ; 05/7; 2,3/7 etc.
Exemplo de uso:
<say-as interpret-as="fraction"> 3/4 </say-as>
três quartos
Sem o uso da tag a saida seria “três barra quatro”.
Outros recursos¶
As demais tags e atributos presentes na especificação do SSML v1.1 não mencionados neste documento, são validados pelo Texto Fala, porém não são suportados nessa versão. Isso significa que, por padrão, essas tags não serão vocalizadas e um erro será retornado. O erro em formato JSON contém o código 400 e uma mensagem descritiva.
Símbolos especiais¶
Quando utilizando SSML, alguns símbolos como <
e >
são processados pelo interpretador e não são vocalizados. Caso deseje vocalizar tais símbolos, utilize a representação em entidades XML/HTML.