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, volume e entonação, assim como forçar uma dada interpretação a determinados textos de entrada.
Nota
Para que as tags SSML sejam interpretadas, o recurso deve estar habilitado no arquivo de configuração. Para maiores detalhes, consulte a seção (Configuração).
O interpretador SSML do CPqD 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 CPqD 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, entonação e intensidade) da fala sintetizada. O CPqD 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>
- volume
Modifica o volume da fala sintetizada. Os valores suportados são:
- +/- número dB (variação do volume em decibéis)
- silent / x-soft / soft / medium / loud / x-loud / default .
Exemplos de uso:
Agora vou falar <prosody volume="loud"> mais alto </prosody> Agora vou <prosody volume="-6dB"> abaixar o volume em 6 decibéis </prosody>
voice¶
A tag voice possibilita selecionar a voz a usar no processo de conversão do texto em fala. O CPqD Texto Fala suporta os seguintes atributos para esta tag:
- name
Nome da voz selecionada. As vozes disponíveis para uso encontram-se listadas na seção General.Voices do arquivo de configuração do CPqD Texto Fala (tts.conf). O uso da extensão .voice é opcional no nome da voz. É possível redefinir em tempo de execução a voz a usar; para isto deve ser chamada à função LoadVoice da API (para mais detalhes consultar a seção Programação em C/C++ do CPqD Texto Fala).
Exemplos de uso:
Eu consigo usar <voice name="rosana-highquality.voice"> a voz da Rosana </voice> Agora vou usar <voice name="carlos-highquality"> 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 no arquivo de configuração do CPqD Texto Fala (tts.conf).
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.
lexicon¶
A tag lexicon permite, em conjunto com a tag lookup, criar e utilizar tabelas de substituição de palavras. Para criar uma tabela de substituição deve-se criar uma nova seção no arquivo user.dat.
Para criar uma nova seção é necessário inserir novas linhas nesse arquivo (uma para cada substituição), seguindo o formato abaixo:
[section:entrada] [saida]
onde section é o nome da seção, entrada é a palavra a ser substituída e saida é o resultado da substituição (pode ser uma ou mais palavras).
Exemplo de uso:
[endereços:av.] [avenida]
[ONU] [Organização das Nações Unidas] \c
O CPqD Texto Fala suporta os seguintes atributo para esta tag:
- uri
- Indica a seção do léxico que implementa a tabela de substituição. Os valores aceitos devem começar com builtin:// seguido do nome da seção definido no arquivo user.dat.
- xml:id
Identificador único da seção da tabela (pode ser um nome arbitrário, que será usado com a tag lookup para identificar a tabela de substituição no momento do uso).
Exemplo de uso:
<lexicon uri="builtin://endereços" xml:id="endereços"/>
Indica que a tabela de substituição está localizada na sec1 do arquivo user.dat e que a identificação para utilizar essa tabela é id1.
lookup¶
A tag lookup possibilita fazer a troca de palavras no texto de entrada, a partir da consulta de uma tabela de substituição definida previamente por meio da tag lexicon.
O CPqD Texto Fala suporta os seguintes atributo para esta tag:
- ref
Atributo com o identificador da tabela de substituição. O valor do atributo é textual e deve ser o mesmo indicado no atributo xml:id da tag lexicon.
Exemplo de uso:
<lookup ref="endereços"> Av. Henrique </lookup>
As palavras Av. Henrique serão buscadas uma a uma na tabela de substituição associada ao identificador endereços. Caso alguma palavra esteja na tabela, será substituída conforme definido no léxico.
É possível usar várias tabelas de substituição ao mesmo tempo por meio do uso de tags lookup aninhadas. Nesse caso, a ordem de precedência de uso das tabelas é definido pela ordem de declaração, sendo a tag mais interna a de maior precedência.
sub¶
A tag sub permite a substituição do texto contido entre as tags por outro texto. O CPqD 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”.
break¶
A tag break permite inserir uma pausa com tempo definido e um tipo no ponto onde a tag for inserida. O CPqD 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.
say-as¶
A tag say-as determina a forma como um trecho de texto deve ser vocalizado. O CPqD 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.
A tag say-as é muito útil na verbalização de construções como datas e horas, principalmente em situações de ambiguidade onde o CPqD Texto Fala não é capaz de decidir a melhor interpretação. Os valores válidos para o atributo interpret-as são:
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 CPqD 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 ym YYYY/MM my MM/YYYY md MM/DD dm DD/MM d DD m MM y YYYY O separador entre os números pode ser um traço (-) ou uma barra (/). Além disso, meses podem ser indicados pela sua representação em três caracteres (i.e. Jan, Fev, Mai, etc).
Exemplo de uso:
<say-as interpret-as="date" format="mdy"> 05-04-2017 </say-as>
quatro de maio de dois mil e dezessete
- fraction
Permite interpretar como frações os seguintes padrões numéricos:
1/2; 1/3; 1/4; 1/5; 1/6; 1/7; 1/8; 1/9; -1/2; -1/3; -1/4; -1/5; -1/6; -1/7; -1/8; -1/9; 2/3; 2/4; 2/5; 2/6; 2/7; 2/8; 2/9; -2/3; -2/4; -2/5; -2/6; -2/7; -2/8; -2/9; 3/4; 3/5 -3/4; -3/5
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’.
audio¶
A tag audio permite a inserção de um arquivo de áudio. O CPqD Texto Fala suporta o seguinte atributo para esta tag:
- src
- Indica o nome do arquivo de áudio. Para definir o caminho onde o arquivo está localizado é necessário passar o caminho completo do áudio ou alterar a opção General.AudioPath no arquivo de configuração tts.conf. Caso essa opção não esteja ativada, os arquivos de áudio devem ser colocados no mesmo diretório de instalação. Para mais detalhes da opção General.AudioPath, consultar a seção Programação em C/C++ do CPqD Texto Fala.
Caso o arquivo de áudio não esteja acessível ou ocorra algum problema na sua reprodução, o texto definido entre as tags será sintetizado. Se não houver nenhum texto entre as tags, a tag será ignorada. Adicionalmente, somente é permitido a reprodução de arquivos com extensão .wav.
Exemplo de uso:
<audio src="teste.wav"> dentro do áudio tem a palavra teste </audio>
<audio src="teste.wav"/>
No primeiro caso, será reproduzido o conteúdo do arquivo teste.wav
. Caso haja uma falha na reprodução deste arquivo, o texto “dentro do áudio tem a palavra teste” será sintetizado. No segundo caso será tocado o conteúdo do arquivo teste.wav
, mas nada será feito caso haja alguma falha.
effect¶
A tag effect é uma tag proprietária exclusiva do CPqD Texto Fala, para o português do Brasil, que permite inserir efeitos sonoros como tosse, risada, espirro, entre outros. A tag suporta o seguinte atributo:
- id
Identifica o nome do efeito sonoro a ser inserido. Os identificadores suportados são os seguintes:
alivio_1 inspiracao_1 alivio_2 inspiracao_2 assobio_1 interrogacao assobio_2 limpar_garganta_1 assobio_3 limpar_garganta_2 beijo limpar_garganta_3 bocejo_1 nao_entendimento bocejo_2 negacao canto_1 pedido_de_silencio_1 canto_2 pedido_de_silencio_2 chamar_atencao problema chamar_atencao_1 problema_1 chamar_atencao_2 problema_2 choro_1 respiracao_1 choro_2 respiracao_2 comemoracao_1 respiracao_pela_boca comemoracao_2 riso_1 cometer_erro_1 riso_2 cometer_erro_2 riso_3 concordancia riso_macabro decepcao ronco_1 dor_1 ronco_2 dor_2 surpresa_ah_1 entendimento_1 surpresa_ah_2 entendimento_2 surpresa_epa_1 espirro surpresa_epa_2 estouro_champanhe surpresa_oh_1 fungar_1 surpresa_oh_2 fungar_2 suspiro gargalhada tosse_1 hesitacao_1 tosse_2 hesitacao_2 tosse_3
Caso o efeito não esteja disponível, a tag será ignorada.
Exemplo de uso:
Estou com sono <effect id="ronco_1"/>
Neste caso será sintetizado o texto “Estou com sono” e depois será inserido o efeito sonoro de ronco.
expressive¶
A tag expressive é uma tag proprietária exclusiva do CPqD Texto Fala, para o português do Brasil, que permite a inserção de fala com expressividade como, por exemplo, “bom dia” falado animadamente. Para produzir textos com expressividade é necessário inserir entre as tags o texto exato a ser vocalizado segundo a tabela a seguir:
Abraços! | Muito bom! |
Adeus! | Muito obrigado! |
Agradecemos sua visita! | Nossa! |
Agradeço sua atenção! | Não acha? |
Ah sim! | Não acredito! |
Ainda está aí? | Não diga! |
Alô! | Não me diga! |
Atenção! | Não é possível! |
Até a próxima! | Não! |
Até amanhã! | O quê? |
Até breve! | Obrigada pela sua atenção! |
Até logo! | Obrigada! |
Beijo! | Obrigado pela sua colaboração! |
Beijos! | Obrigado! |
Bem-vindo! | Ó! |
Boa noite! | Óh! |
Boa tarde! | Oi! |
Boa viagem! | Ok! |
Bom dia! | Olá! |
Bom fim de semana! | Onde é que estávamos? |
Certo! | Onde? |
Certo? | Ótimo! |
Claro! | Parabéns! |
Com certeza! | Perfeito! |
Com licença! | Pode repetir por favor? |
Como assim? | Pode repetir? |
Como disse? | Pode ser! |
Como está? | Pois bem! |
Como? | Por favor responda! |
De nada! | Por quê? |
Desculpa! | Preste atenção! |
Desculpe! | Puxa! |
Desculpe-me! | Quando? |
Desculpem! | Que bom! |
É! | Que pena! |
E agora? | Responde! |
E então? | Sim ou não? |
É mesmo? | Sim! |
Ei! | Sim? |
Escuta! | Sinto muito! |
Estou sim! | Sério? |
Estou à disposição! | Sério?? |
Está por aí? | Talvez! |
Exatamente! | Tchau! |
Felicidades! | Tudo bem? |
Feliz aniversário! | Tudo ok? |
Imagina! | Uau! |
Lamento muito! | Um abraço! |
Lamento! | Um beijo! |
Meus parabéns! | Ufa! |
Lamento muito! | Verdade! |
Muito bem! | Verdade? |
Caso o trecho com expressividade não esteja disponível, a tag será ignorada.
Exemplo de uso:
<expressive> Verdade! </expressive>
Neste caso a palavra Verdade será sintetizada com expressividade.
A tag expressive pode ser utilizada junto com síntese de textos e outros recursos SSML.
<expressive> Olá! </expressive> <expressive> Bem-vindo! </expressive>
<expressive> Como está? </expressive> Parabéns pelo seu aniversário.
<expressive> Felicidades! </expressive>
<voice name="carlos-highquality">
<expressive> Puxa! </expressive> Não foi possível completar a operação.
<expressive> Lamento muito! </expressive>
</voice>
<expressive> Ei! </expressive>
<prosody volume="+6dB">Estou com um problema!</prosody>
Ainda é possível combinar trechos expressivos com efeitos sonoros para criar vocalizações mais humanizadas.
<effect id="limpar_garganta_1"/> <expressive> Olá! </expressive>
<expressive> Bem-vindo! </expressive> <effect id='tosse_3'/>
<expressive> Desculpe! </expressive> Estou um pouco gripado.
<effect id='espirro'/>
custom¶
A tag custom, criada exclusivamente para a biblioteca CPqD Texto Fala, permite a inserção de prompts de voz customizados para uma determinada aplicação. Vale ressaltar que esse recurso só estará disponível para clientes que tenham contratado junto ao CPqD a criação de um dicionário de voz customizado, contendo fraseologia específica da aplicação fim. Nesse caso, a utilização da tag custom permite mesclar a geração de fala sintetizada com a reprodução de frases pré-gravadas. Caso o recurso não esteja disponível na versão em uso, a tag será ignorada.
Exemplos de uso:
<custom type="menu_cobranca"> Para confirmar digite um </custom>
Nesse caso será gerado áudio com a vocalização exata do texto contido entre as tags. O atributo type indica o nome do pacote contratado junto ao CPqD contendo as frases pré-gravadas. A utilização da tag só terá efeito se o nome do pacote for válido e se a frase estiver presente no pacote em questão.
<custom type="menu_cobranca" id="saudacao_01"/>
Diferentemente do exemplo anterior, neste caso a frase a ser vocalizada é identificada por meio do atributo id. A utilização da tag só terá efeito se o id identificar uma frase válida do pacote identificado pelo atributo type.
Outros recursos¶
As demais tags e atributos presentes na especificação do SSML v1.1 não mencionados neste documento, são validados pelo CPqD 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 que o texto contido entre as tags será vocalizado sem nenhum tipo de tratamento.
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.