# Java Speech API

A Java Speech API (JSAPI) é uma interface de programação de aplicativos para suporte multiplataforma de reconhecedores de comando e controle, sistemas de ditado e sintetizadores de fala. Embora o JSAPI defina apenas uma interface, existem várias implementações criadas por terceiros, por exemplo FreeTTS.

## Tecnologias essenciais

Duas tecnologias essenciais de fala são suportadas por meio da Java Speech API: síntese de fala e reconhecimento de fala .

### Síntese de fala

A síntese de fala fornece o processo inverso de produzir fala sintética a partir de texto gerado por um aplicativo, um applet ou um usuário. É muitas vezes referido como tecnologia de texto para voz.
As principais etapas na produção de fala a partir de texto são as seguintes:
* Análise de estrutura: processa o texto de entrada para determinar onde os parágrafos, frases e outras estruturas começam e terminam. Para a maioria dos idiomas, os dados de pontuação e formatação são usados neste estágio.
* Pré-processamento de texto: analisa o texto de entrada para construções especiais da linguagem. Em inglês, é necessário um tratamento especial para abreviações, siglas, datas, horas, números, valores monetários, endereços de e-mail e muitas outras formas. Outras linguagens precisam de processamento especial para esses formulários, e a maioria das linguagens tem outros requisitos especializados.
O resultado dessas duas primeiras etapas é uma forma falada do texto escrito. Aqui estão alguns exemplos das diferenças entre texto escrito e falado em:
As etapas restantes convertem o texto falado em fala:
* Conversão de texto para fonema: converte cada palavra em fonemas. Um fonema é uma unidade básica de som em uma língua.
* Análise de prosódia: processa a estrutura da frase, palavras e fonemas para determinar a prosódia apropriada para a frase.
* Produção de forma de onda: usa os fonemas e informações de prosódia para produzir a forma de onda de áudio para cada frase.
Os sintetizadores de voz podem cometer erros em qualquer uma das etapas de processamento descritas acima. Os ouvidos humanos estão bem ajustados para detectar esses erros, mas o trabalho cuidadoso dos desenvolvedores pode minimizar os erros e melhorar a qualidade da saída de fala. Enquanto a Java Speech API 1 dependia da Java Fala Linguagem de Marcação (Java Speech API Markup Language JSML), a versão mais recente utiliza SSML para fornecer muitas maneiras de melhorar a qualidade de saída de um sintetizador de fala.

### Reconhecimento de fala

O reconhecimento de fala fornece aos computadores a capacidade de ouvir a linguagem falada e determinar o que foi dito. Em outras palavras, ele processa a entrada de áudio contendo fala convertendo-a em texto.
As principais etapas de um reconhecedor de fala típico são as seguintes:
* Design gramatical: define as palavras que podem ser ditas por um usuário e os padrões nos quais elas podem ser ditas.
* Processamento de sinal: analisa as características do espectro (ou seja, a frequência) do áudio de entrada.
* Reconhecimento de fonemas: Compara os padrões do espectro com os padrões dos fonemas da língua que está sendo reconhecida.
* Reconhecimento de palavras: Compara a sequência de fonemas prováveis com as palavras e padrões de palavras especificados pelas gramáticas ativas.
* Geração de resultados: fornece ao aplicativo informações sobre as palavras que o reconhecedor detectou no áudio recebido.
Uma gramática é um objeto na Java Speech API que indica quais palavras um usuário deve dizer e em quais padrões essas palavras podem ocorrer. As gramáticas são importantes para os reconhecedores de fala porque restringem o processo de reconhecimento. Essas restrições tornam o reconhecimento mais rápido e preciso porque o reconhecedor não precisa verificar frases bizarras.
A Java Speech API 1 suporta dois tipos básicos de gramática: gramáticas de regras e gramáticas de ditado. Esses tipos diferem de várias maneiras, incluindo como os aplicativos configuram as gramáticas; os tipos de frases que eles permitem; como os resultados são fornecidos; a quantidade de recursos computacionais necessários; e como eles são usados no design do aplicativo. As gramáticas de regras são definidas em JSAPI 1 por JSGF, o Java Speech Grammar Format. O JSAPI 2 mais recente suporta o formato SRGS mais recente. JSAPI 2 não oferece suporte para ditado.

## As classes e interfaces da Java Speech API

As diferentes classes e interfaces que formam a Java Speech API são agrupadas nos três pacotes a seguir:
* javax.speech: contém classes e interfaces para um mecanismo de fala genérico
* javax.speech.synthesis: Contém classes e interfaces para síntese de fala.
* javax.speech.recognition: Contém classes e interfaces para reconhecimento de fala.
A classe EngineManager é como uma classe de fábrica usada por todos os aplicativos Java Speech API. Ele fornece métodos estáticos para permitir o acesso a mecanismos de síntese e reconhecimento de fala. A interface Engine encapsula as operações genéricas que um mecanismo de fala compatível com Java Speech API deve fornecer para aplicativos de fala.
Os aplicativos de fala podem usar principalmente métodos para executar ações como recuperar as propriedades e o estado do mecanismo de fala e alocar e desalocar recursos para um mecanismo de fala. Além disso, a interface Engine expõe mecanismos para pausar e retomar o fluxo de áudio gerado ou processado pelo mecanismo de fala. O AudioManager pode manipular fluxos. A interface Engine é subclassificada pelas interfaces Sintetizador e Reconhecedor, que definem a funcionalidade adicional de síntese e reconhecimento de fala. A interface do Sintetizador encapsula as operações de um mecanismo de síntese de fala compatível com Java Speech API para aplicativos de fala.
A Java Speech API é baseada na manipulação de eventos. Os eventos gerados pelo mecanismo de fala podem ser identificados e tratados conforme necessário. Os eventos de fala podem ser tratados por meio da interface EngineListener, especificamente por meio do RecognizerListener e do SynthesizerListener.

## Especificações relacionadas

A Java Speech API foi escrita antes do Java Community Process (JCP) e direcionada para a Java Platform, Standard Edition (Java SE). Posteriormente, o Java Speech API 2 (JSAPI2) foi criado como JSR 113 sob o JCP. Esta API tem como alvo a Plataforma Java, Micro Edition (Java ME), mas também está em conformidade com o Java SE.