143
BitSophia - www.bitsophia.com BitVoicer Server 1.0 Manual do Usuário - Português Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 1 BitVoicer Server 1.0 Manual do Usuário Português

BitVoicer Server 1 - bitsophia.com · Quais são os módulos do servidor e como eles interagem; ... Delphi, etc.). No caso de ... excluir uma localização atribuída a um dispositivo

Embed Size (px)

Citation preview

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 1

BitVoicer Server 1.0

Manual do Usuário

Português

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 2

Sumário 1 Introdução............................................................................................................................................. 5

1.1 Requisitos mínimos ...................................................................................................................... 5

1.2 Instalação ..................................................................................................................................... 5

1.3 Aviso de segurança ...................................................................................................................... 5

2 Visão geral ............................................................................................................................................ 6

2.1 Comunicação ............................................................................................................................... 6

2.2 Solução do BitVoicer Server ......................................................................................................... 8

2.3 Pacote de aplicações .................................................................................................................... 8

2.4 Licenciamento .............................................................................................................................. 8

2.5 Idiomas ........................................................................................................................................ 9

3 Detalhes do BitVoicer Server ...............................................................................................................10

3.1 Módulos do servidor ....................................................................................................................10

3.1.1 Solution ...................................................................................................................................11

3.1.2 Communication Manager .........................................................................................................11

3.1.3 Speech Manager .....................................................................................................................11

3.1.4 Command Shooter ...................................................................................................................14

3.1.5 Data Forwarding ......................................................................................................................14

4 BitVoicer Server Manager ....................................................................................................................16

4.1 Objetos de solução ......................................................................................................................18

4.1.1 Localizações ............................................................................................................................18

4.1.2 Dispositivos .............................................................................................................................19

4.1.3 Dados Binários ........................................................................................................................25

4.1.4 Esquemas de voz ....................................................................................................................26

4.1.5 Comandos ...............................................................................................................................31

4.2 Propriedades do servidor .............................................................................................................33

4.2.1 Fala .........................................................................................................................................34

4.2.2 Comunicação...........................................................................................................................36

4.2.3 Log ..........................................................................................................................................37

4.3 Opções do gerenciador................................................................................................................37

4.4 Log do servidor ............................................................................................................................39

4.5 Monitor do servidor ......................................................................................................................40

4.5.1 Geral .......................................................................................................................................40

4.5.2 Comunicação...........................................................................................................................41

4.5.3 Encaminhamento de dados......................................................................................................41

4.5.4 Fala .........................................................................................................................................42

4.6 Exportação de objetos de solução ...............................................................................................43

4.7 Importação de objetos de solução................................................................................................46

4.7.1 Importação de esquemas de voz e comandos..........................................................................47

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 3

4.7.2 Importação de esquemas de voz apenas .................................................................................49

4.7.3 Importação de dispositivos .......................................................................................................51

4.7.4 Importação de dados binários ..................................................................................................55

4.8 Teste de reconhecimento de fala e síntese de voz .......................................................................56

4.9 Ativação ......................................................................................................................................58

5 BitVoicer Server UI Link .......................................................................................................................59

6 BitVoicer Server Protocol .....................................................................................................................61

6.1 Definições ...................................................................................................................................61

6.2 Escopo ........................................................................................................................................62

6.3 Conceitos básicos .......................................................................................................................62

6.3.1 Modo enquadrado ....................................................................................................................62

6.3.2 Modo fluxo ...............................................................................................................................62

6.3.3 Motor de reconhecimento de fala (Speech Recognition Engine – SRE) ....................................62

6.4 Interfaces de comunicação ..........................................................................................................62

6.4.1 TCP/IP .....................................................................................................................................63

6.4.2 Porta serial ..............................................................................................................................63

6.5 Descrição operacional .................................................................................................................64

6.5.1 Modo inicial de operação .........................................................................................................64

6.5.2 Alteração de modo de operação ..............................................................................................64

6.5.3 Solicitando status ao servidor ..................................................................................................64

6.5.4 Reconhecimento de fala ..........................................................................................................65

6.5.5 Encaminhando dados a aplicações no servidor ........................................................................65

6.5.6 Recebendo dados tipificados do servidor .................................................................................65

6.6 Estrutura do frame do BitVoicer Server Protocol ..........................................................................65

6.6.1 Elementos do frame .................................................................................................................66

6.7 Notas...........................................................................................................................................67

6.8 Especificação aberta ...................................................................................................................68

7 Referências de bibliotecas ...................................................................................................................69

7.1 Biblioteca C# ...............................................................................................................................69

7.1.1 BitSophia.BitVoicerServer.Integration ......................................................................................69

7.1.2 BitSophia.BitVoicerServer.Integration.SpeechInterfaceService .................................................84

7.1.3 BitSophia.BitVoicerServer.Integration.DataFwdService ............................................................96

7.2 Bibliotecas para Arduino ............................................................................................................106

7.2.1 BVSP.....................................................................................................................................106

7.2.2 BVSMic .................................................................................................................................117

7.2.3 BVSSpeaker ..........................................................................................................................120

8 Exemplos ...........................................................................................................................................123

8.1 Obtenção de estado do servidor ................................................................................................123

8.1.1 Materiais necessários ............................................................................................................123

8.1.2 Passo-a-passo .......................................................................................................................123

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 4

8.2 Reconhecimento de fala ............................................................................................................125

8.2.1 Materiais necessários ............................................................................................................125

8.2.2 Passo-a-passo .......................................................................................................................126

8.3 Reconhecimento de fala e síntese de voz ..................................................................................131

8.3.1 Materiais necessários ............................................................................................................131

8.3.2 Passo-a-passo .......................................................................................................................131

8.4 Encaminhamento de dados .......................................................................................................139

8.4.1 Materiais necessários ............................................................................................................139

8.4.2 Passo-a-passo .......................................................................................................................139

8.5 Usando o adaptador de áudio do servidor ..................................................................................141

8.5.1 Materiais necessários ............................................................................................................141

8.5.2 Passo-a-passo .......................................................................................................................141

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 5

1 Introdução

Este documento descreve todos os componentes da plataforma BitVoicer Server de automação por

voz. Dentre os temas abordados estão:

Quais são os objetos que compõem uma solução do BitVoicer Server;

Quais são os módulos do servidor e como eles interagem;

Como funciona a ferramenta de gerenciamento BitVoicer Server Manager;

Quais são as especificações do BitVoicer Server Protocol;

Como integrar dispositivos clientes ao servidor;

Documentação da API de integração;

Exemplos de implementação.

1.1 Requisitos mínimos

Sistema operacional Windows Vista, 7, 8 ou 10 (exceto Windows 10 IoT Core e Windows 10 Mobile)

Microsoft .NET Framework 4.0 ou posterior

Conexão com a internet (somente para ativação ou instalação de idiomas adicionais)

Adaptador de áudio

Porta serial regular ou virtual (no caso de comunicação através de portas seriais)

Adaptador de rede (no caso de comunicação utilizando protocolo TCP/IP)

1.2 Instalação

Para realizar os procedimentos de instalação a seguir, será necessário utilizar uma conta de usuário

com privilégios administrativos:

1) Antes de iniciar a instalação do BitVoicer Server, certifique-se que o computador possui o Microsoft

.Net Framework 4 instalado. Para verificar se este componente está instalado clique em Iniciar

Painel de Controle Programas Programas e Recursos. Se o Microsoft .Net Framework 4 não

estiver listado, baixe (http://www.microsoft.com/en-us/download/details.aspx?id=17851) e instale o

pacote de instalação deste componente antes de prosseguir.

2) Certifique-se que o adaptador de áudio do computador está ativado e seus drivers estão

atualizados.

3) Baixe (http://www.bitsophia.com/pt-BR/BitVoicerServer/Downloads.aspx) o pacote de instalação

correto para o seu sistema operacional (32 ou 64 bits). Para saber qual versão do Windows está

instalada no computador, clique em Iniciar Painel de Controle Sistema e Segurança

Sistema e verifique a descrição do item Tipo de sistema.

4) Execute o pacote de instalação do BitVoicer Server e conceda permissão para que a instalação

prossiga.

5) Siga os passos do assistente de instalação.

1.3 Aviso de segurança

O BitVoicer Server não deve ser utilizado em qualquer aplicação de missão crítica, suporte a vida,

condução e operação de maquinário ou veículos automotores, ou ainda, qualquer aplicação cujo mau

funcionamento possa causar dano à propriedade e ao meio-ambiente ou atentar contra a saúde de pessoas

ou animais. A BitSophia não autoriza o uso de seus softwares em qualquer uma destas aplicações,

assumindo, o usuário, toda e quaisquer responsabilidades pela violação desta proibição.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 6

2 Visão geral

O BitVoicer Server é um servidor de reconhecimento de fala e síntese de voz para automação por

voz. Ele foi desenvolvido para permitir que dispositivos simples com pequeno poder de processamento

possam ser operados através de comandos de voz.

De modo geral, a arquitetura de uma solução de automação do BitVoicer Server é composta pelo

servidor, dispositivos de entrada e dispositivos de saída.

Dispositivos de entrada são aqueles responsáveis pela captura, digitalização e envio de fluxos de

áudio ao servidor. O servidor, por sua vez, processa esses fluxos de áudio, identifica as sentenças

presentes no fluxo e as mapeia para comandos que são enviados aos dispositivos de saída.

Além de dispositivos de entrada e saída, o BitVoicer Server também pode servir a dispositivos

mistos (capazes de atuar como dispositivos de entrada e saída) e ao adaptador de áudio presente no

servidor.

2.1 Comunicação

Para que o BitVoicer Server se comunique com dispositivos clientes, duas interfaces de

comunicação estão disponíveis: serial e TCP/IP. Também são suportadas portas seriais virtuais como

aquelas criadas por adaptadores Bluetooth ou USB/Serial. Isso permite que o BitVoicer Server possa enviar

comandos para dispositivos que utilizam outros protocolos de comunicação (ex. Z-Wave ou X10).

O protocolo padrão de comunicação entre o BitVoicer Server e dispositivos clientes é o BitVoicer

Server Protocol. Este é um protocolo proprietário da BitSophia Tecnologia Ltda. ME, porém todas as

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 7

especificações técnicas para implementação deste protocolo e os aspectos legais estão descritos na seção

6 BitVoicer Server Protocol.

O BitVoicer Server também pode se comunicar com outras aplicações no servidor através de

serviços Windows Communication Foundation (WCF). Os serviços WCF expostos pelo servidor utilizam

especificações Web Service (WS) que permitem a integração com diversas plataformas de desenvolvimento

(ex. Java, Delphi, etc.). No caso de desenvolvimento .NET, há ainda a opção de utilizar a biblioteca de

integração descrita na seção 7.1 Biblioteca C#.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 8

2.2 Solução do BitVoicer Server

Para definir quais são os dispositivos clientes do BitVoicer Server, onde eles estão localizados,

quais comandos de voz devem ser reconhecidos e o que deve ser feito quando um reconhecimento é

validado, são criados itens que descrevem todas as entidades envolvidas nesta estrutura. Estes itens são

chamados de objetos e armazenados em um arquivo denominado BitVoicer Server Solution (Solução do

BitVoicer Server)

Os objetos de uma Solução do BitVoicer Server são estruturados utilizando os mesmos conceitos

empregados em bancos de dados relacionais. Fazendo uma analogia com este conceito, podemos dizer

que os tipos de objetos (localizações, dispositivos, dados binários, comandos e esquemas de voz) de uma

solução são semelhantes às tabelas em um banco de dados e os objetos em si são semelhantes aos

registros nestas tabelas.

Da mesma forma que bancos de dados geralmente impõem integridade referencial entre seus

registros, o BitVoicer Server também o faz entre os objetos existentes na solução. Não é possível, por

exemplo, excluir uma localização atribuída a um dispositivo ou associar um comando a um esquema de voz

inválido.

Todos os objetos de uma Solução do BitVoicer Server são criados, editados e excluídos utilizando o

BitVoicer Server Manager. Esta aplicação permite que os objetos da solução sejam gerenciados através de

uma interface gráfica que também garante a integridade referencial entre seus objetos.

A Solução do BitVoicer Server é descrita em detalhes na seção 4.1 Objetos de solução.

2.3 Pacote de aplicações

O BitVoicer Server é executado como um serviço do Windows e é inicializado junto com o sistema

operacional. Serviços do Windows são processos que permanecem em execução enquanto o computador

está ligado e que, por questões de segurança, não devem possuir acesso à interface do usuário. Para que o

servidor tenha acesso a recursos da interface do usuário (microfone e alto-falantes) e também possa ser

gerenciado, duas aplicações são utilizadas:

BitVoicer Server Manager: com esta aplicação é possível gerenciar as propriedades do servidor,

adicionar, editar e excluir objetos de solução, monitorar o status do servidor, visualizar informações

de log, verificar o status de dispositivos clientes, acompanhar o andamento do reconhecimento de

fala e trocar informações com dispositivos clientes.

BitVoicer Server UI Link: esta aplicação é responsável pela inicialização de outras aplicações a

pedido do servidor, reprodução de arquivos de áudio, captura e sintetização de voz através do

microfone e alto-falante do computador.

2.4 Licenciamento

O licenciamento do BitVoicer Server é feito por computador por dispositivo de entrada. Isso significa

que cada dispositivo de entrada precisa de uma chave de produto ativada para que um motor de

reconhecimento de fala possa ser atribuído ao dispositivo. Uma vez ativada uma chave de produto em um

computador especifico, não é possível transferir-la ou utiliza-la em outro computador.

Para efeitos de licenciamento, Dispositivo de Entrada é aquele capaz de capturar áudio e envia-lo

ao servidor para que seja feito o reconhecimento de fala, isso inclui: microfones conectados ao adaptador

de áudio presente no servidor e dispositivos mistos (capazes de atuar como dispositivo de entrada e de

saída).

Dispositivos de saída e os alto-falantes conectados ao adaptador de áudio do servidor não

requerem licenciamento na versão 1.0 do BitVoicer Server. Também não há limitação com relação ao

número máximo de dispositivos de saída que podem ser conectados ao servidor.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 9

2.5 Idiomas

O BitVoicer Server é capaz de realizar reconhecimento de fala e síntese de voz em 17 idiomas:

Alemão (Alemanha)

Catalão

Chinês (China, Honk Kong e Taiwan)

Coreano (Coréia)

Dinamarquês (Dinamarca)

Espanhol (México e Espanha)

Finlandês (Finlândia)

Francês (Canada e França)

Holandês (Holanda)

Inglês (Austrália, Canada, Índia, Reino Unido e Estados Unidos)

Italiano (Itália)

Japonês (Japão)

Norueguês (Noruega)

Polonês (Polônia)

Português (Brasil e Portugal)

Russo (Rússia)

Sueco (Suécia)

Por padrão, o BitVoicer Server é instalado com inglês (US) apenas. Se você precisar instalar

qualquer idioma adicional, consulte a seção Propriedades do servidor.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 10

3 Detalhes do BitVoicer Server

O BitVoicer Server é um servidor de reconhecimento de fala e síntese de voz para automação por

voz. Ele foi desenvolvido para permitir que dispositivos simples, com pequeno poder de processamento,

possam ser operados através de comandos de voz.

Embora se trate de um servidor, o BitVoicer Server consome poucos recursos de hardware e por

isso não é necessário, na maioria dos cenários, haver um computador exclusivo para instalação do servidor.

A tabela abaixo mostra o consumo de recursos do servidor atendendo a três dispositivos de entrada, ou

seja, três motores de reconhecimento de fala estão em execução para atender a estes dispositivos:

Computador Uso Médio CPU (%) Uso Médio RAM (MB)

Intel Core i5 2.4GHz / 4GB RAM / Windows 7 64-bits 2,55 116

Intel Core i3 2.1GHz / 4GB RAM / Windows 7 64-bits 3,60 104

Intel Atom 1.66GHz / 1GB RAM / Windows 7 32-bits 7,07 74

É importante salientar que o consumo de CPU e de memória RAM varia em função da quantidade

de dispositivos conectados e do tamanho dos esquemas de voz presentes na solução.

Além de consumir poucos recursos de hardware, o BitVoicer Server é executado como um serviço

do Windows e, por esta razão, não fica visível na área de trabalho. Isso permite que o computador onde o

servidor está sendo executado seja usado normalmente sem interferir na interface do usuário.

3.1 Módulos do servidor

O BitVoicer Server é composto de cinco módulos interdependentes: Solution (Solução),

Communication Manager (Gerenciador de Comunicação), Speech Manager (Gerenciador de Fala),

Command Shooter (Disparador de Comandos) e Data Forwarding (Encaminhamento de Dados).

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 11

3.1.1 Solution

O módulo Solution é responsável pelo armazenamento, gerenciamento e validação dos objetos que

compõem uma solução do BitVoicer Server. Este módulo só pode ser acessado pelo desenvolvedor através

do editor de objetos de solução do BitVoicer Server Manager. Em todas as operações (adição, alteração,

exclusão, importação e exportação) realizadas em objetos de solução, o módulo Solution valida a operação

e o objeto, altera a solução residente na memória e em disco e informa aos módulos em execução sobre a

alteração. Estes, por sua vez, tomaram as medidas pertinentes para contemplar a alteração e continuar sua

execução.

3.1.2 Communication Manager

O módulo Communication Manager é um dos principais e mais ativos módulos do BitVoicer Server.

As principais funções deste módulo são:

Implementar o BitVoicer Server Protocol (BVSP);

Monitorar a existência de portas seriais dos dispositivos cadastrados;

Autorizar e estabelecer conexões TCP/IP solicitadas por dispositivos clientes;

Checar se as interfaces de comunicação de todos os dispositivos conectados permanecem

disponíveis e/ou ativas;

Encaminhar fluxos de áudio das interfaces de comunicação para o módulo Speech Manager, e vice-

versa;

Encaminhar dados das interfaces de comunicação para o módulo Data Forwarding, e vice-versa;

Encaminhar dados do módulo Command Shooter para os dispositivos;

Controlar a taxa de transferência dos dados enviados;

Prover informações de status do servidor aos dispositivos clientes.

Para maiores informações sobre as interfaces de comunicação suportadas pelo Communication

Manager, consulte a seção 6.4 Interfaces de comunicação.

3.1.3 Speech Manager

O módulo Speech Manager é o responsável pelo processamento dos fluxos de áudio para

reconhecimento de fala. Quando o Communication Manager identifica a presença de um dispositivo de

entrada, ele informa ao Speech Manager e este constrói e atribui um motor de reconhecimento de fala

(Speech Recognition Engine - SRE) exclusivo para o dispositivo. Assim que um SRE é atribuído, ele passa

a processar os fluxos de áudio vindos do dispositivo.

Durante o processamento de fluxos de áudio, um SRE pode identificar multiplas hipóteses de

reconhecimento. Estas hipóteses são validadas por filtros estabelecidos na solução (seção 3.1.3.2 Filtros de

validação) e, caso sejam aceitas, são criados os comandos (seção 4.1.4 Esquemas de voz) que são então

executados pelo módulo Command Shooter.

Caso haja mais de um dispositivo de entrada presente na mesma localização (seção 4.1.1

Localizações) e ambos levem a um reconhecimento de fala válido, o Speech Manager utiliza um mecanismo

de resolução de conflito para determinar qual deve ser o reconhecimento válido. Este mecanismo consiste

em comparar os resultados obtidos naquela localização dentro do intervalo de tempo definido nas

propriedades do servidor. Aquele resultado que obtiver o maior nível de confiança neste intervalo de tempo

será considerado válido e os outros reconhecimentos serão descartados.

Além de ser responsável pelo reconhecimento de fala, o módulo Speech Manager também é

responsável por sintetizar voz. Ele é capaz de sintetizar voz a pedido de aplicações externas ou em

resposta a um reconhecimento de fala válido. A voz sintetizada pode ser reproduzida nos alto-falantes do

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 12

servidor com o auxílio da aplicação BitVoicer Server UI Link ou enviada como fluxo de áudio a dispositivos

clientes.

3.1.3.1 Atribuição de motores de reconhecimento de fala

Para que o Speech Manager possa atribuir SREs a dispositivos de entrada, é necessário haver

licenças disponíveis para estes dispositivos (seção 2.4 Licenciamento). Caso a solução contenha um

dispositivo do tipo SystemMic (consulte a seção 4.1.2 Dispositivos), ele será o primeiro a receber um SRE.

A ordem de atribuição para os demais dispositivos não pode ser determinada e está diretamente ligada a

ordem que o Communication Manager identifica a presença de dispositivos de entrada. No caso de portas

seriais, cabe ao Windows informar a presença destas portas ao servidor. No caso de conexões TCP/IP, os

primeiros a solicitar uma conexão são os primeiros a receber um SRE.

3.1.3.2 Filtros de validação

Para melhorar a precisão dos SREs, o BitVoicer Server emprega uma série de filtros de validação

definidos pelo desenvolvedor. Somente os reconhecimentos que satisfaçam aos critérios destes filtros são

considerados válidos.

Os filtros de validação são aplicados na ordem abaixo. Caso um reconhecimento não passe por um

dos filtros, os demais não são avaliados e o reconhecimento é rejeitado:

1) Nível mínimo de confiança (minimum confidence level): representa a probabilidade relativa

mínima que é necessária para que um SRE aceite determinada fala. O nível de confiança não indica

a probabilidade absoluta da alternativa reconhecida corresponder a uma determinada fala, mas sim

a probabilidade de ela estar correta dentre as múltiplas alternativas disponíveis no esquema de voz.

2) Nível mínimo de áudio (minimum audio level): durante o processamento de fluxos de áudio, os

SREs medem periodicamente o nível (volume) do áudio captado e calculam a média dos níveis das

últimas medições. O nível mínimo de áudio é constituído desta média acrescida do valor definido

neste filtro. Para ser considerado válido, o nível de áudio durante a fala deve atingir ou superar o

nível mínimo de áudio (ver figura abaixo). Ao atingir este nível, é iniciado o período ativado por nível

de áudio descrito a seguir.

3) Período ativado por nível de áudio (audio level activated period): este período (milissegundos)

se inicia ao atingir o nível mínimo de áudio. Durante este período, não é necessário que a fala atinja

novamente o nível mínimo de áudio para que seja considerada válida. Reconhecimentos feitos fora

deste período são rejeitados.

4) Período de latência (latency period): este período (milissegundos) se inicia imediatamente após

um reconhecimento válido. Reconhecimentos feitos dentro deste período são rejeitados.

5) Palavra de ativação (activation word): é uma palavra, ou um conjunto de palavras, que deve ser

pronunciada antes da sentença propriamente dita. Você pode pronunciar a palavra de ativação e a

sentença de forma contínua ou apenas a palavra de ativação e, dentro do período ativado, a

sentença propriamente dita.

6) Período ativado por palavra de ativação (activation word activated period): este período

(segundos) se inicia logo após o reconhecimento da palavra de ativação. Caso uma palavra de

ativação não tenha sido definida em um esquema de voz ou nas propriedades do servidor, a

contagem deste período não é feita. Caso uma palavra de ativação tenha sido definida, apenas

reconhecimentos que ocorram dentro deste período serão considerados válidos.

7) Resolução de conflito (conflict resolution): é empregado apenas caso haja mais de um

dispositivo de entrada ativo na mesma localização (seção 4.1.1 Localizações). Este filtro consiste

em esperar um determinado período de tempo (milissegundos) após um reconhecimento de fala e,

caso outro reconhecimento ocorra na mesma localização, considerar válido apenas aquele com

maior nível de confiança.

8) Localização específica (location specific): este filtro é definido nos comandos presentes no

esquema de voz (seção 4.1.4 Esquemas de voz). Caso um comando seja definido como de

localização especifica, ele só será executado se o dispositivo que captou o áudio estiver na mesma

localização (seção 4.1.1 Localizações) que o dispositivo alvo do comando.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 13

Os filtros de validação podem ser definidos em diferentes objetos de solução ou nas propriedades

do servidor. Aqueles definidos nas propriedades do servidor sobrepõem os filtros definidos em todos os

objetos de solução (mais informações na seção 4.2 Propriedades do servidor).

3.1.3.3 Períodos de ausência de fluxos de áudio

Os dispositivos de captura de áudio (dispositivos de entrada) podem, eventualmente, precisar

executar outras tarefas que requerem o uso intensivo dos recursos do microcontrolador. Nestas ocasiões

pode ser necessário interromper a captura e o envio de fluxos de áudio ao servidor. O módulo Speech

Manager é capaz de administrar estes períodos e retomar o reconhecimento de fala assim que novos fluxos

de áudio sejam enviados. No entanto, é recomendado que o dispositivo de entrada que incorra neste

cenário altere o modo de operação do canal para enquadrado (6.5.2 Alteração de modo de operação) ao

interromper o fluxo de áudio e retome, posteriormente, o modo fluxo. Isso faz com que o BitVoicer Server

libere mais rapidamente os recursos alocados por SREs inativos.

3.1.3.4 Voz sintetizada

O BitVoicer Server também é capaz de sintetizar áudio em resposta a reconhecimentos válidos ou a

pedido de aplicações externas. A voz sintetizada pode ser reproduzida através do adaptador de áudio do

servidor ou enviada a dispositivos clientes. O formato do áudio sintetizado é Pulse-code Modulation (PCM)

de 8 bits a uma taxa de amostragem de 8000 Hz, como definido no BitVoicer Server Protocol (seção 6.3.2

Modo fluxo).

O módulo Speech Manager é o responsável pela criação e manutenção dos sintetizadores que

servirão aos dispositivos clientes e aplicações externas.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 14

3.1.3.5 Serviço WCF do módulo Speech Manager

O modulo Speech Manager expõe um serviço Windows Communication Foundation (WCF) que

permite que aplicações externas interajam com as funcionalidades presentes neste módulo. Este serviço

utiliza WSHttpBinding (WCF bindings) e está exposto nos seguintes endereços:

http://localhost:[port]/BitSophia/BitVoicerServer/SpeechInterface/SpeechInterface: endereço do

serviço propriamente dito.

http://localhost:[port]/BitSophia/BitVoicerServer/SpeechInterface/SpeechInterface/mex: endereço de

infraestrutura que prove metadados sobre o serviço.

O campo [port] nos endereços acima é definido nas propriedades do servidor e seu valor padrão é

4195.

Para obter informações sobre a biblioteca C# que encapsula este serviço, além de seus objetos e as

operações disponíveis, consulte a seção 7.1 Biblioteca C#.

3.1.4 Command Shooter

O módulo Command Shooter é o responsável pela execução dos comandos definidos nos

esquemas de voz (seção 4.1.4 Esquemas de voz).

Quando o módulo Speech Manager identifica um reconhecimento de fala valido, ele cria o conjunto

de comandos relativo aquele reconhecimento e os encaminha ao Command Shooter. O Command Shooter,

por sua vez, executa estes comandos respeitando a ordem definida no esquema de voz e os atrasos

definidos nos comandos.

Os esquemas de voz do BitVoicer Server suportam três tipos de comandos e cada um deles é

manipulado de forma diferente pelo Command Shooter:

RunExecutable (rodar executável): para executar estes comandos, o Command Shooter

necessita do suporte dado pela aplicação BitVoicer Server UI Link, pois a sua execução pode

requerer interação com a interface do usuário. Além de rodar arquivos executáveis, com parâmetros

ou não, estes comandos também podem abrir documentos desde que um editor padrão para o

arquivo esteja definido no Windows.

PlayAudio (tocar áudio): o áudio reproduzido por estes comandos pode ser um arquivo .wav ou

voz sintetizada. Em ambos os casos, a ação tomada pelo Command Shooter depende do tipo de

dispositivo que será alvo do comando:

o Dispositivo do tipo SystemSpeaker (alto-falantes): é solicitado à aplicação BitVoicer Server

UI Link que seja reproduzido o arquivo .wav ou sintetizada a voz definida no comando.

o Dispositivos Output ou Mixed (saída ou mistos): o Command Shooter envia o áudio contido

no arquivo .wav ao dispositivo alvo através do módulo Communication Manager ou solicita

ao Speech Manager que sintetize a voz definida no comando e, então, a envia ao

dispositivo alvo através do Communication Manager.

SendData (enviar dados): o Command Shooter empacota o dado definido no comando em um

frame do BitVoicer Server Protocol (seção 6.6 Estrutura do frame do BitVoicer Server Protocol) e o

envia ao dispositivo alvo através do módulo Communication Manager.

3.1.5 Data Forwarding

O módulo Data Forwading (encaminhamento de dados) permite que aplicações externas enviem e

recebam dados de dispositivos conectados ao BitVoicer Server. Esta funcionalidade é especialmente útil no

caso de dispositivos de entrada ou mistos que utilizam portas seriais como interface de comunicação, pois

estes dispositivos permanecem com a porta serial bloqueada pelo servidor para que áudio possa ser

recebido do dispositivo.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 15

Embora a utilidade deste módulo seja mais evidente para conexão com dispositivos seriais,

aplicações externas podem simplificar a comunicação com dispositivos TCP/IP através do módulo Data

Forwarding. Ao utilizar este módulo para se conectar com dispositivos clientes, o desenvolvedor delega ao

servidor a manutenção da conexão, evita a manipulação direta de sockets e não precisa definir padrões

para o empacotamento de dados.

O modulo Data Forwarding expõe um serviço Windows Communication Foundation (WCF) que

permite que aplicações externas interajam com as funcionalidades presentes neste módulo. Este serviço

utiliza WSHttpBinding (WCF bindings) e está exposto nos seguintes endereços:

http://localhost:[port]/BitSophia/BitVoicerServer/DataForwarding/DataForwarding: endereço do

serviço propriamente dito.

http://localhost:[port]/BitSophia/BitVoicerServer/DataForwarding/DataForwarding/mex: endereço de

infraestrutura que prove metadados sobre o serviço.

O campo [port] nos endereços acima é definido nas propriedades do servidor e seu valor padrão é

4195.

Para obter informações sobre a biblioteca C# que encapsula este serviço, além de seus objetos e as

operações disponíveis, consulte a seção 7.1 Biblioteca C#.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 16

4 BitVoicer Server Manager

O BitVoicer Server Manager (BVSM) é a aplicação que permite ao desenvolvedor gerenciar todos

os recursos disponíveis no BitVoicer Server. Através dela é possível adicionar, editar e remover objetos de

solução, fazer testes de comunicação e reconhecimento de fala, importar e exportar objetos de solução,

iniciar ou interromper o funcionamento do servidor, visualizar logs de eventos, monitorar o status dos

dispositivos clientes e configurar as propriedades do servidor.

A interface gráfica do BVSM é composta basicamente por quatro áreas: menu principal, barra de

ferramentas, Object Explorer (explorador de objetos) e área de edição. A figura abaixo mostra a disposição

destas áreas na tela:

Menu principal: fornece acesso a funções de manipulação de objetos de solução, além de

ferramentas de ativação, ajuda, avaliação, monitoramento, importação e exportação.

Barra de ferramentas: fornece acesso rápido às funções e ferramentas mais utilizadas. Para saber

a função de cada um dos botões da barra de ferramentas, pare o mouse sobre o botão por alguns

segundos.

Object Explorer: permite controlar a execução (iniciar ou parar) do serviço BitVoicer Server,

acessar as propriedades do servidor e navegar pelos objetos de solução.

Divisor ajustável: permite alterar a largura do Object Explorer e da área de edição.

Área de edição: nesta área são exibidos os objetos de solução em edição.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 17

O Object Explorer conta com alguns menus de contexto para manipulação de objetos de solução e

acesso a funções e propriedades do servidor. Para acessar estes menus de contexto, basta clicar sobre o

item desejado com o botão direito do mouse. A figura abaixo mostra o menu de contexto que é exibido ao

clicar com o botão direito do mouse sobre o item BitVoicer Server:

Neste menu de contexto é possível iniciar ou parar o serviço do Windows que executa o BitVoicer

Server, acessar as propriedades do servidor e atualizar os objetos de solução exibidos no Object Explorer

(item Refresh). A função Refresh está disponível em diversas ferramentas espalhadas pelo BitVoicer Server

Manager. Esta função é muito utilizada, pois quando objetos de solução são salvos, eles são atualizados no

servidor, mas as ferramentas do manager não fazem consultas constantes ao servidor para atualizar o que

é exibido em tela. Criar uma localização, por exemplo, não faz com que ela apareça imediatamente no

Object Explorer. É preciso atualizar o item Locations para que a localização seja listada na árvore de

objetos.

Os menus de contexto abaixo são exibidos ao clicar com o botão direito sobre as categorias de

objetos ou sobre os objetos em si:

Através destes menus é possível adicionar, editar ou remover objetos de solução e atualizar os

objetos exibidos em qualquer uma das categorias individualmente.

A área de edição, localizada a direita do Object Explorer, organiza os objetos abertos através de

guias que podem ser selecionadas para exibir o objeto desejado. Caso haja muitos objetos abertos, é

possível exibir uma lista com todos estes objetos através do ícone em forma de seta localizado no canto

superior direito da área de edição:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 18

4.1 Objetos de solução

Uma solução do BitVoicer Server é estruturada através da criação e associação de diversos objetos.

Os principais objetos são aqueles exibidos no Object Explorer: localizações, dispositivos, dados binários e

esquemas de voz. Os objetos secundários (nós de dispositivo, blocos de sentença, itens de sentença,

anagramas e comandos) são acessados através da edição dos objetos principais. O diagrama abaixo

(Class diagram) exibe todos estes objetos e as relações entre eles:

4.1.1 Localizações

Localizações (locations) representam o local físico onde um dispositivo está instalado. Este objeto

de solução é especialmente relevante em grandes instalações como residências ou escritórios com diversos

ambientes e dispositivos. Em equipamentos, máquinas ou dispositivos móveis, mesmo que estes possuam

mais de um ponto de captura, o conceito de localização não é, em geral, relevante. No entanto, todo

dispositivo presente em uma solução do BitVoicer Server precisa estar associado a uma localização. No

caso de equipamentos, máquinas ou dispositivos móveis, uma localização que represente o próprio

dispositivo pode ser criada para que seja possível associar o dispositivo a uma localização.

Há três opções para criar uma localização: através do menu principal (File New Location);

através do botão New Location ( ) da barra de ferramentas; e através do menu de contexto da categoria

Locations do Object Explorer.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 19

O formulário de cadastro de localizações é o mais simples de uma solução. A figura abaixo exibe os

campos deste formulário e, em seguida, a descrição de cada campo:

ID: número de identificação do objeto na solução. Este número é gerado automaticamente pelo

servidor quando o objeto é adicionado à solução. Não é possível editar este campo.

Name: descrição dada pelo desenvolvedor ao objeto. Recomenda-se o uso de notação CamelCase

para atribuição de nomes (ex.: SalaDeEstar, Quarto1, Quarto2).

Disable (desabilitar): indica se a localização esta ativada ou não. Quando uma localização é

desativada, ela ainda é visível em todo o gerenciador. No entanto, todos os dispositivos associados

a esta localização são ignorados pelo servidor como se estivessem desabilitados, ou seja, não são

identificados pelo Communication Manager e não são alvos de comandos executados pelo

Command Shooter.

4.1.2 Dispositivos

Dispositivos são os clientes do BitVoicer Server. Segundo a definição dada no BVSP (seção 6.1

Definições) dispositivo é: o “conjunto de hardware e possivelmente software, composto de um ou mais

circuitos integrados ou MCUs, acompanhados de outros componentes ou não, capaz de acessar os

serviços do servidor através de uma interface de comunicação”.

Há três opções para criar um dispositivo: através do menu principal (File New Device); através

do botão New Device ( ) da barra de ferramentas; e através do menu de contexto da categoria Devices

do Object Explorer.

Os tópicos a seguir descrevem as guias do formulário de edição de dispositivos e todos os seus

campos.

4.1.2.1 Geral

A guia geral (General) contém configurações diversas do dispositivo. A figura abaixo exibe os

campos desta guia e, em seguida, é dada a descrição de cada campo:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 20

ID: número de identificação do objeto na solução. Este número é gerado automaticamente pelo

servidor quando o objeto é adicionado à solução. Não é possível editar este campo.

Name: descrição dada pelo desenvolvedor ao objeto. Recomenda-se o uso de notação CamelCase

para atribuição de nomes (ex.: ArduinoSerialMic, MicrochipTCPIPSpeaker, ZWaveUSBStick,

SystemSpeaker, etc). É recomendado que o nome do dispositivo contenha pelo menos: o fabricante

ou desenvolvedor do dispositivo; e a sua função ou modelo. Isso facilita a identificação do

dispositivo nas diversas ferramentas onde ele for visualizado.

Type (tipo): além dos três tipos de dispositivos (Input, Output e Mixed) estabelecidos no BVSP,

também é possível cadastrar dispositivos do tipo SystemMic (microfone do sistema) e

SystemSpeaker (alto-falante do sistema). Apenas um dispositivo do tipo SystemMic e um dispositivo

do tipo SystemSpeaker podem ser cadastrados na solução. Dispositivos SystemMic e

SystemSpeaker são tratados, respectivamente, como dispositivos de entrada e saída pelo BitVoicer

Server.

Serial Number (número de série): este campo contém uma identificação exclusiva do dispositivo e

precisa (obrigatório) ser preenchido pelo usuário. Na versão atual do BitVoicer Server, o número de

série do dispositivo é utilizado principalmente para que aplicações externas possam interagir com

dispositivos através do módulo Data Forwarding (seção 3.1.5 Data Forwarding). No futuro, este

campo será utilizado para criação de instaladores externos. O campo número de série deve conter

20 caracteres e recomenda-se o uso da seguinte estrutura:

o Caractere 1 a 9: ID do fabricante ou desenvolvedor

o Caractere 10 a 12: ID do modelo ou versão

o Caractere 13 a 20: número de série

Microphone Level (nível do microfone): este campo só está disponível para edição quando o tipo

do dispositivo é SytemMic. O valor informado neste campo (1 a 100) representa o nível a ser

selecionado nas configurações do Windows quando o microfone do servidor for utilizado para captar

áudio. Está configuração será atualizada no sistema operacional sempre que um SRE for atribuído

(seção 3.1.3.1 Atribuição de motores de reconhecimento de fala) a este dispositivo.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 21

Speaker Level (nível do alto-falante): este campo só está disponível para edição quando o tipo do

dispositivo é SytemSpeaker. O valor informado neste campo (1 a 100) representa o nível a ser

selecionado nas configurações do Windows quando o alto-falante do servidor for utilizado para

reproduzir áudio. Está configuração será atualizada no sistema operacional sempre que houver

envio de áudio para o adaptador de áudio do servidor.

Synthesizer Volume (volume do sintetizador): este campo só está disponível para edição quando

o tipo do dispositivo é Output, Mixed ou SystemSpeaker. O valor deste campo determina o volume

do áudio gerado pelo sintetizador quando for necessário enviar áudio sintetizado a estes

dispositivos.

Minimum Audio Level (nível mínimo de áudio): este campo só está disponível para edição

quando o tipo do dispositivo é Input, Mixed ou SystemMic. Trata-se de um dos filtros de validação

(seção 3.1.3.2 Filtros de validação) utilizado por SREs para determinar se um reconhecimento de

fala é válido ou não. Para que este filtro tenha efeito prático (rejeitar fontes de fala de baixa

intensidade), a regra geral para sua definição é: quanto mais sensível for o dispositivo de captura,

maior deverá ser o nível mínimo de áudio. A ferramenta Monitor do servidor fornece informações em

tempo real sobre os níveis de áudio de dispositivos de entrada e pode auxiliar na definição do valor

deste campo.

Location (localização): local físico onde o dispositivo está instalado. Caso uma localização recém-

adicionada não esteja visível na caixa de listagem, certifique-se que a localização foi salva e clique

no botão Refresh à direita do campo.

Disable (desabilitar): indica se o dispositivo está ativado ou não. Quando um dispositivo é

desativado, ela ainda é visível em todo o gerenciador. No entanto, dispositivos desabilitados não

são identificados pelo Communication Manager e não são alvos de comandos executados pelo

Command Shooter.

ATENÇÃO: sempre que o BitVoicer Server envia áudio para o adaptador de áudio do servidor, o

nível de áudio nas configurações do Windows é ajustado para o nível especificado em Speaker Level. Caso

o computador que executa o BitVoicer Server seja usado para ouvir música, por exemplo, o nível do áudio

sendo reproduzido também será ajustado. Se o nível especificado em Speaker Level for superior a 30, pode

ocorrer desconforto auditivo principalmente durante o uso de fones de ouvido.

4.1.2.2 Comunicação

A guia comunicação (Communication) contém as configurações utilizadas por dispositivos do tipo

Input, Output e Mixed para se comunicar com o BitVoicer Server. Quando o tipo de dispositivo é SystemMic

ou SystemSpeaker, os campos desta guia permanecem bloqueados.

A figura abaixo exibe os campos desta guia e, em seguida, é dada a descrição de cada campo:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 22

Interface Serial ou TCP/IP: estes botões radiais permitem a seleção do tipo de interface de

comunicação utilizada pelo dispositivo. Quando um deles é selecionado, os campos relativos à

interface são habilitados para edição.

Port name (nome da porta): os nomes de portas seriais são estabelecidos pelo Windows. Portas

seriais regulares (geralmente associadas a circuitos integrados UART presentes no hardware do

computador) mantem seus nomes independente do dispositivo conectado à porta serial. Portas

seriais virtuais (USB-to-serial) são criadas pelo sistema operacional quando dispositivos que as

requerem são conectados à porta USB. O Windows tende a manter o nome destas portas caso o

mesmo dispositivo seja conectado a mesma porta USB. O nome de portas seriais é composto da

sigla “COM” mais o número dado à porta (ex. COM3, COM4, COM100, etc.).

Baud, Data bits, Parity, Stop bits e Flow control: estas configurações variam de dispositivo para

dispositivo e seus valores devem ser encontrados na documentação do hardware.

RTS e DTR: alguns dispositivos (ex. Arduino Micro e Arduino Leonardo) utilizam sinais RTS

(Request to Send) e DTR (Data Terminal Ready) na porta serial. Consulte a documentação do

hardware e ative estas opções se necessário.

Do not lock port (não bloqueie a porta): quando esta opção é selecionada, o BitVoicer Server

bloqueia e abre a porta somente quando é necessário enviar dados ao dispositivo. No restante do

tempo, a porta permanece disponível para que outras aplicações a acessem. Apenas dispositivos

do tipo Output podem ter esta opção selecionada, pois dispositivos Input e Mixed precisam estar

conectados ao servidor constantemente para enviar fluxos de áudio.

IP address (endereço IP): caso o dispositivo utilize interface de comunicação TCP/IP, é necessário

informar o endereço IP atribuído ao dispositivo para que o BitVoicer Server o identifique. Para evitar

problemas de conexão, é recomendado o uso de IP estático nos dispositivos clientes, embora em

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 23

instalações utilizando IP dinâmico os roteadores tendam a atribuir sempre o mesmo endereço IP ao

mesmo MAC address.

Inactivity timeout (tempo limite de inatividade): este campo define o limite de tempo (segundos)

que uma conexão TCP/IP pode permanecer inativa (sem troca de dados) antes que todos os

recursos associados a ela (inclusive SRE) sejam liberados e a conexão seja encerrada. Caso um

dispositivo cliente perca conexão com o BitVoicer Server sem que haja a possibilidade de informar

ao servidor sobre o término da conexão, o BitVoicer Server manterá o socket TCP/IP associado à

conexão aberto pelo período informado neste campo. Durante este período, o dispositivo cliente não

irá conseguir estabelecer uma nova conexão com o servidor, pois já haverá uma conexão

estabelecida para aquele endereço IP. Somente depois que o período de inatividade se encerrar e o

servidor encerrar e descartar a conexão, será permitido ao dispositivo cliente estabelecer uma nova

conexão com o servidor.

Data rate (taxa de dados): este campo define a quantidade máxima de bytes por segundo que o

BitVoicer Server pode enviar para dispositivos clientes. Isso é extremamente útil no envio de fluxos

de áudio para microcontroladores com pequena capacidade de memória, pois pode evitar o

transbordamento de buffers. O valor definido neste campo deve ser condizente com a capacidade

de consumir dados do dispositivo que os recebe. A taxa de dados efetivamente alcançada está

limitada a capacidade de transmissão da interface de comunicação em uso.

MSSS (maximum stream segment size – tamanho máximo do segmento de fluxo): é o

tamanho máximo do segmento (em bytes) de dados binários que o BitVoicer Server envia ao

dispositivo cliente a cada operação de envio. Caso a quantidade total de bytes a ser enviada seja

maior que o MSSS, os bytes são divididos em segmentos e enviados em intervalos regulares

definidos em função do valor do campo Data rate. O MSSS deve ser definido em função do

tamanho do buffer de recepção do dispositivo de destino.

Protocol (protocolo): este campo define o formato dos dados enviados pelo BitVoicer Server.

Caso seja selecionado BitVoicer Server, os dados enviados são empacotados em frames do

BitVoicer Server Protocol (seção 6.6 Estrutura do frame do BitVoicer Server Protocol). Caso seja

selecionado None, os dados são simplesmente transformados em um fluxo de bytes e enviados

sem qualquer empacotamento.

Input buffer size (tamanho do buffer de entrada): este campo define o tamanho do buffer de

entrada da interface de comunicação em uso. O BitVoicer Server realiza leituras das interfaces de

comunicação a cada 150 milissegundos. O buffer de entrada deve ser capaz de armazenar todos os

bytes enviados neste intervalo, ou seja, o tamanho do buffer de entrada deve ser definido em

função da taxa de envio do dispositivo cliente.

Output buffer size (tamanho do buffer de saída): este campo define o tamanho do buffer de

saída da interface de comunicação em uso. O buffer de saída deve ser suficientemente grande para

comportar a quantidade de dados enviada pelo BitVoicer Server (taxa de dados definida acima)

dada a taxa de transferência da interface de comunicação em uso.

4.1.2.3 Nós

Na guia Nós (Nodes) é possível cadastrar partes de dispositivos compostos ou nós de redes mesh

(ex.: Insteon, Z-Wave, etc.) que são controlados por um único dispositivo (geralmente um adaptador USB).

Para cadastrar Nós, basta clicar em uma linha em branco da grade, inserir o nome do nó e sua

localização. Caso uma localização recém-criada não esteja disponível na caixa de listagem, clique no botão

Refresh ao lado da caixa.

É possível desabilitar Nós individualmente selecionando-os na última coluna (Disabled) da grade e

salvando o dispositivo. Caso um Nó seja desabilitado, ele não receberá comandos definidos no esquema de

voz.

Para excluir um Nó, é preciso primeiro seleciona-lo clicando no cabeçalho da linha. Em seguida,

basta pressionar a tecla delete ou clicar na linha com o botão direito do mouse e então clicar em Remove.

A figura abaixo exibe os campos desta guia:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 24

4.1.2.4 Pistas

Na guia Pistas (Cues) é possível cadastrar comandos (seção 4.1.5 Comandos) que são executados

em resposta a eventos que ocorrem em dispositivos de entrada (Input, Mixed ou SytemMic). Para ativar

uma Pista, basta selecionar o campo Enable cue (ativar pista) correspondente e editar o comando logo

abaixo.

A figura abaixo exibe as áreas desta guia e, em seguida, é dada a descrição de cada evento:

Início do período ativado (Start of Activated Period): este evento ocorre quando a palavra de

ativação (item 5 da seção 3.1.3.2 Filtros de validação) é reconhecida no fluxo de áudio.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 25

Fim do período ativado (End of Activated Period): este evento ocorre ao término do período

ativado por palavra de ativação (item 6 da seção 3.1.3.2 Filtros de validação).

Fala rejeitada (Speech Rejected): este evento ocorre sempre que o SRE associado ao dispositivo

rejeita um reconhecimento de fala.

As pistas podem ser utilizadas para fornecer um retorno sonoro ou visual ao usuário. Podem ser

reproduzidos arquivos .wav, por exemplo, para indicar o início e o fim de períodos de ativação e/ou

enviados dados para dispositivos de captura quando uma fala é rejeitada. O desenvolvedor pode, por

exemplo, controlar o acionamento de LEDs quando estes dados forem recebidos.

4.1.3 Dados Binários

Dados binários (Binary Data) são sequências de bytes que podem ser enviadas aos dispositivos em

resposta a reconhecimentos de fala válidos ou quando pistas (seção 4.1.2.4 Pistas) são utilizadas em

dispositivos de entrada.

Para enviar dados binários a dispositivos clientes, é preciso criar e salvar a sequência de bytes e

depois associa-la a um ou mais comandos (seção 4.1.5 Comandos). Há três opções para criar dados

binários: através do menu principal (File New Binary Data); através do botão New Binary Data ( )

da barra de ferramentas; e através do menu de contexto da categoria Binary Data do Object Explorer.

A figura abaixo exibe o formulário de criação e edição de dados binários:

O editor de dados binários é composto de três colunas:

A coluna da esquerda exibe a posição do primeiro byte da linha dentro da sequência (array) de

bytes.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 26

A coluna do meio é onde o valor dos bytes é inserido em formato hexadecimal. Cada linha desta

coluna é composta por 8 campos (cada um deles representa um byte na sequência). O editor cria

campos adicionais automaticamente à medida que dados vão sendo inseridos e é possível utilizar

as teclas de direção para navegar entre os campos.

A coluna da direita exibe o caractere correspondente ao valor do campo na tabela ASCII ou “?”

(interrogação) caso se trate de um caractere não imprimível.

O editor de dados binários pode editar sequências de até 1023 bytes que é o comprimento máximo

do campo Tamanho da carga (payload size) definido no BVSP.

Também é possível importar e exportar dados binários através dos botões localizados acima do

editor. O arquivo importado/exportado consiste em uma sequência de bytes (inteiro de 8-bits sem sinal)

serializados utilizando a classe BinaryFormatter.

4.1.4 Esquemas de voz

Esquemas de voz (Voice Schemas) são os objetos centrais de uma solução do BitVoicer Server.

Neles são definidas as sentenças que devem ser reconhecidas, os comandos a serem executados, quais

dispositivos utilizarão o esquema de voz e a maioria dos filtros de validação (seção 3.1.3.2 Filtros de

validação).

Uma solução do BitVoicer Server pode conter múltiplos esquemas de voz. Cada um destes

esquemas deve conter sentenças relacionadas a um mesmo contexto funcional, por exemplo: controle de

iluminação, controle motriz, controle de temperatura, etc. Embora um mesmo contexto funcional possa ser

aplicado a dispositivos de modelos, fabricantes ou desenvolvedores diferentes, um esquema de voz deve

conter apenas comandos específicos de um modelo de dispositivo. Isso facilita o reuso e o

compartilhamento de esquemas de voz.

Há três opções para criar um esquema de voz: através do menu principal (File New Voice

Schema); através do botão New Voice Schema ( ) da barra de ferramentas; e através do menu de

contexto da categoria Voice Schemas do Object Explorer.

Os tópicos a seguir descrevem as guias do formulário de edição de esquemas de voz e todos os

seus campos.

4.1.4.1 Geral

A guia geral (General) contém configurações diversas do esquema de voz e dos filtros de validação

associados a ele. A figura abaixo exibe os campos desta guia e, em seguida, é dada a descrição de cada

campo:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 27

ID: número de identificação do objeto na solução. Este número é gerado automaticamente pelo

servidor quando o objeto é adicionado à solução. Não é possível editar este campo.

Name: descrição dada pelo usuário ao objeto. Recomenda-se o uso de notação CamelCase para

atribuição de nomes (ex.: LightControlAEOTECMicroSmartSwitch, SpeechFeedbackArduinoDUE,

ServoControlDAGUSpider, etc). É recomendado que o nome de um esquema de voz contenha pelo

menos: a descrição do contexto funcional; o nome do fabricante ou desenvolvedor; e o modelo do

hardware ou versão do software.

Minimum confidence level (nível mínimo de confiança): trata-se de um dos filtros de validação

(seção 3.1.3.2 Filtros de validação) utilizado por SREs para determinar se um reconhecimento de

fala é válido ou não. Para que um reconhecimento seja considerado válido, o nível de confiança do

reconhecimento deve ser igual ou superior ao valor definido neste campo. Quanto maior for o valor

deste campo, melhor deverá ser a qualidade do áudio e mais correta deverá ser a pronúncia. Caso

um dispositivo de entrada esteja associado a vários esquemas de voz (seção 4.1.4.2 Dispositivos

de entrada), o menor dos níveis mínimos de confiança será utilizado nos filtros de validação do

SRE.

Activation word (palavra de ativação): é uma palavra, ou um conjunto de palavras, que deve ser

pronunciada antes de uma sentença para que ela seja considerada válida. É possível pronunciar a

palavra de ativação e a sentença de forma contínua ou apenas a palavra de ativação e, dentro do

período ativado, a sentença propriamente dita. A palavra de ativação pode ser usada para imprimir

pessoalidade ao esquema de voz ou como forma de evitar “falsos positivos”. Neste último caso,

deve-se considerar a utilização de palavras de ativação cuja ocorrência seja pequena na linguagem

cotidiana e recomenda-se o uso de palavras com 3 ou mais sílabas. Caso um dispositivo de entrada

esteja associado a vários esquemas de voz, todas as palavras de ativação destes esquemas darão

início ao período de ativação por palavra de ativação, descrito a seguir. O uso de palavras de

ativação é opcional.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 28

Activation word activated period (período ativado por palavra de ativação): é o período

(segundos) que se inicia logo após a identificação de uma palavra de ativação. Durante este

período não é preciso repetir a palavra de ativação para que um reconhecimento seja considerado

válido. Caso um dispositivo de entrada esteja associado a vários esquemas de voz, o maior dos

períodos será utilizado nos filtros de validação do SRE.

Audio level activated period (período ativado por nível de áudio): é o período (milissegundos)

que se inicia quando o nível mínimo de áudio (item 4.1.2.1 Geral) definido no dispositivo de entrada

é atingido. Reconhecimentos feitos fora deste período são rejeitados pelo SRE. Caso um dispositivo

de entrada esteja associado a vários esquemas de voz, o maior dos períodos será utilizado nos

filtros de validação do SRE.

Latency period (período de latência): é o período (milissegundos) que se inicia logo após um

reconhecimento de fala válido. Durante este período, todos os reconhecimentos de fala são

rejeitados. Caso um dispositivo de entrada esteja associado a vários esquemas de voz, o menor

dos períodos de latência será utilizado nos filtros de validação do SRE.

4.1.4.2 Dispositivos de entrada

Na guia Dispositivos de entrada (Input Devices) é possível definir quais dispositivos servirão como

pontos de captura para o esquema de voz. Quando o BitVoicer Server detecta a presença de um dispositivo

de entrada, ele combina todos os esquemas de voz associados ao dispositivo, constrói seu SRE e só então

o atribuí ao dispositivo (seção 3.1.3.1 Atribuição de motores de reconhecimento de fala).

É importante ressaltar que quanto menor for o número de sentenças carregadas em um SRE,

melhor será sua precisão. Tendo isso em vista, deve-se evitar a atribuição de esquemas de voz a

dispositivos que não deverão identificar as sentenças presentes no esquema (ex. um esquema de voz para

abertura da porta da garagem ser associado a um dispositivo de captura instalado no banheiro).

A figura abaixo exibe a guia de atribuição de dispositivos de entrada:

A listagem da esquerda exibe os dispositivos de entrada que não estão associados ao esquema de

voz. Caso um dispositivo recém-cadastrado não esteja visível, basta clicar com o botão direito sobre a

listagem e, então, clicar em Refresh. A listagem da direita exibe os dispositivos de entrada associados ao

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 29

esquema de voz. Para mover os dispositivos entre as listagens, basta usar os botões de direção presentes

entre as duas listagens.

4.1.4.3 Sentenças

Na guia Sentenças (Sentences) são definidos os objetos de solução (blocos e itens de sentença)

que dão origem aos anagramas. Os anagramas são todas as permutações de texto possíveis criadas a

partir dos itens de sentença. A figura abaixo exibe uma sentença composta de quatro blocos de sentença

com diversos itens:

A sentença da figura acima é composta dos seguintes itens e blocos de sentença:

Block Block Block Block

Item turn on the lights

Item off tube

Item oven

Item shower

Estes itens e blocos dão origem aos seguintes anagramas que são exibidos na guia

Anagramas/Comandos:

Anagrams

turn on the lights

turn on the tube

turn on the oven

turn on the shower

turn off the lights

turn off the tube

turn off the oven

turn off the shower

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 30

Um aspecto importante sobre os SREs do BitVoicer Server é que eles sempre identificam um

anagrama por inteiro e não apenas parte dele. Suponha que você possua o seguinte anagrama em seu

esquema de voz: “go forward ten inches (vá para frente dez polegadas)”. O SRE espera ouvir a frase

completa e não apenas parte dela como, por exemplo, “go forward (vá para frente)”. Nesta situação, o SRE

deve rejeitar o segundo reconhecimento. Se for necessário que o BitVoicer Server identifique ambos os

anagramas, será necessário criar duas sentenças. Uma para cada frase.

Para adicionar ou remover sentenças, use os botões disponíveis no topo da guia (Add New

Sentence e Remove Selected Sentences) ou clique com o botão direito do mouse sobre o cabeçalho da

sentença (Sentence Header) e use as opções disponíveis no menu de contexto. Para adicionar ou remover

blocos de sentença, deve-se usar os botões de adição e remoção presentes sempre após o último bloco.

Blocos de sentença só podem ser adicionados e removidos da última posição na sentença.

Para adicionar itens de sentença, basta digita-los na grade de cada bloco. É possível utilizar a tecla

TAB para mover para o próximo item ou as teclas de direção para navegar entre eles. Para remover um

item de sentença, é preciso clicar no cabeçalho do item a fim de seleciona-lo e então utilizar a tecla

DELETE ou o menu de contexto presente no cabeçalho do item.

Não há limitação estabelecida para o número máximo de sentenças que um esquema de voz pode

conter. No entanto, um esquema de voz precisa ter pelo menos uma sentença, um bloco e um item de

sentença.

4.1.4.4 Anagramas/Comandos

A guia anagramas/comandos (Anagrams/Commands) exibe os anagramas criados a partir das

permutações dos itens de sentença definidos na guia Sentenças. Os anagramas são as sequências de texto

que os SREs buscam para executar os comandos a eles associados, ou seja, é nesta guia que são criados

e associados os comandos a serem executados em resposta a um reconhecimento de fala válido.

A figura abaixo exibe os anagramas criados a partir do exemplo dado na seção anterior e os

comandos associados ao primeiro anagrama:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 31

Na grade de anagramas, à esquerda, é possível selecionar cada anagrama individualmente e

visualizar, à direita, os comandos a ele associados. Os anagramas podem estar associados a diversos

comandos que são executados na ordem em que aparecem na tela.

Para associar um comando a um anagrama é preciso selecionar o anagrama desejado e clicar no

botão Add (adicionar) localizado na seção Commands (comandos). O comando em edição é exibido na área

Command Properties (propriedades do comando) logo abaixo (mais informações sobre comandos na seção

4.1.5 Comandos). Para remover um comando, basta seleciona-lo na grade de comandos e clicar em

Remove (remover). Também é possível alterar a ordem de execução dos comandos selecionado o

comando desejado e clicando nas setas para cima e para baixo localizadas à direita da grade de comandos.

Em algumas situações é interessante ter mais de um anagrama associado ao mesmo conjunto de

comandos (ex. “turn on the yellow led” e “turn the yellow led on" devem executar o mesmo comando). Para

que não seja necessário recriar manualmente os comandos, é possível copiar e colar comandos de um

anagrama em outro. Para isso, selecione o anagrama de onde os comandos devem ser copiados e clique

com o botão direito do mouse sobre ele. Em seguida, clique em Copy commands (copiar comandos), e

selecione o anagrama para onde os comandos devem ser copiados. Por fim, clique com o botão direito

sobre o anagrama de destino e clique em Past commands (colar comandos). Os comandos são copiados

para o anagrama de destino na mesma ordem que aparecem no anagrama de origem.

4.1.5 Comandos

Os comandos (commands) definem as ações que o BitVoicer Server deve tomar em resposta a um

reconhecimento de fala válido ou em resposta a eventos de dispositivo (seção 4.1.2.4 Pistas). Os tópicos a

seguir descrevem as três ações disponíveis nos comandos do BitVoicer Server: RunExecutable (rodar

executável), PlayAudio (reproduzir áudio) e SendData (enviar dados).

4.1.5.1 Rodar executável

Comandos rodar executável (RunExecutable) permitem que o desenvolvedor inicie a execução de

aplicativos ou abra documentos em seu editor padrão. Para que um documento possa ser aberto através de

comandos RunExecutable, é preciso que haja um editor padrão para o arquivo definido nas configurações

do Windows.

A figura abaixo exibe os campos presentes em comandos RunExecutable e, em seguida, é dada a

descrição de cada campo:

Action (ação): especifica a ação a ser tomada pelo comando.

File Path (caminho do arquivo): especifica a localização completa do arquivo a ser executado ou

aberto.

Parameters (parâmetros): define os parâmetros a serem utilizados ao rodar um executável.

Qualquer parâmetro aceito pelo executável através do prompt de comando também pode ser

utilizado neste campo (ex. iexplore.exe google.com).

Delay (atraso): especifica o atraso (em milissegundos) que deve ser dado antes que o comando

seja executado. Este campo é especialmente útil quando é necessário controlar o intervalo entre

comandos executados em sequência (disponível apenas em esquemas de voz).

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 32

Como a inicialização de executáveis ou documentos pode interagir com elementos da interface do

usuário, é preciso que o aplicativo BitVoicer Server UI Link esteja em execução para utilizar este tipo de

comando.

4.1.5.2 Reproduzir áudio

Comandos reproduzir áudio (PlayAudio) permitem que o desenvolvedor envie fluxos de áudio para

dispositivos clientes ou reproduza áudio utilizando o adaptador de áudio do servidor. O áudio reproduzido

pode ser voz sintetizada ou um arquivo .wav. Em função das especificações do BVSP, caso o arquivo .wav

seja enviado para um dispositivo cliente, ele deve estar no formato aceito pelo protocolo (PCM, 8-bits, 8000

amostras por segundo, mono – seção 6.3.2 Modo fluxo). Se o arquivo .wav a ser reproduzido não estiver

em formato compatível, uma mensagem de erro será adicionada ao log do servidor (seção 4.4 Log do

servidor). O link a seguir é uma ferramenta online de conversão de arquivos .wav capaz de gerar arquivos

compatíveis com o BVSP: http://audio.online-convert.com/convert-to-wav. Caso o arquivo seja reproduzido

através do adaptador de áudio do servidor, todos os formatos suportados pelo Windows podem ser

utilizados.

A figura abaixo exibe os campos presentes em comandos PlayAudio e, em seguida, é dada a

descrição de cada campo:

Action (ação): especifica a ação a ser tomada pelo comando.

Audio Source (fonte de áudio): especifica a fonte do áudio a ser reproduzido ou enviado ao

dispositivo alvo. As fontes de áudio podem ser: Synthesizer (sintetizador) ou WaveFile (arquivo

.wav).

Text (texto): este campo só é visível caso a fonte de áudio seja Synthesizer. O texto neste campo

será sintetizado e reproduzido pelo adaptador de áudio do servidor ou enviado ao dispositivo alvo.

File Path (caminho do arquivo): especifica a localização completa do arquivo a ser reproduzido ou

enviado ao dispositivo alvo. Este campo só é visível caso a fonte de áudio seja WaveFile.

Target Device (dispositivo alvo): especifica para onde o fluxo de áudio deve ser enviado a fim de

ser reproduzido. Para reproduzir áudio utilizando o adaptador de áudio do servidor, é necessário

selecionar um dispositivo do tipo SystemSpeaker (seção 4.1.2.1 Geral).

Target Device Node (nó do dispositivo alvo): especifica qual nó do dispositivo alvo será

responsável pela reprodução do áudio.

Delay (atraso): especifica o atraso (em milissegundos) que deve ser dado antes que o comando

seja executado. Este campo é especialmente útil quando é necessário controlar o intervalo entre

comandos executados em sequência (disponível apenas em esquemas de voz).

Location specific (especifico da localização): quando este campo é definido como verdadeiro

(true), o comando só é executado se o dispositivo alvo, ou seu nó, estiver na mesma localização

que o dispositivo de captura. Um comando cujo anagrama é “turn lights on (ligue as luzes)”, por

exemplo, não deve ligar todas as luzes de uma casa. Apenas aquelas onde o áudio foi captado

devem ser ligadas.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 33

4.1.5.3 Enviar dados

Comandos enviar dados (SendData) permitem que o desenvolvedor envie dados a dispositivos

clientes em resposta a um reconhecimento de fala válido ou em resposta a eventos de dispositivo (seção

4.1.2.4 Pistas). Caso o dispositivo alvo utilize o BVSP, o dado é encapsulado em um frame (seção 6.6

Estrutura do frame do BitVoicer Server Protocol) deste protocolo antes de ser enviado.

A figura abaixo exibe os campos presentes em comandos SendData e, em seguida, é dada a

descrição de cada campo:

Action (ação): especifica a ação a ser tomada pelo comando.

Data Type (tipo de dados): especifica o tipo de dados a ser enviado ao dispositivo alvo. Os tipos

de dados aceitos são:

o Byte: inteiro de 8-bits (0 a 255) sem sinal.

o Int16: inteiro de 16-bits (-32768 a 32767) com sinal.

o Int32: inteiro de 32-bits (-2.147.483.648 a 2.147.483.647) com sinal.

o Binary: sequência de no máximo 1023 bytes.

o String: sequência de no máximo 1023 caracteres (ISO 8859-1).

Data (dados): especifica o dado a ser enviado ao dispositivo alvo. Este campo só é visível se o tipo

de dado for Byte, Int16, Int32 ou String.

Binary Data (dados binários): especifica de qual objeto Dados Binários devem ser obtidos os

bytes a serem enviados. Este campo só é visível se o tipo de dado for Binary.

Target Device (dispositivo alvo): especifica para onde os dados do comando devem ser enviados.

Target Device Node (nó do dispositivo alvo): especifica qual nó do dispositivo alvo é o

destinatário final dos dados.

Delay (atraso): especifica o atraso (em milissegundos) que deve ser dado antes que o comando

seja executado. Este campo é especialmente útil quando é necessário controlar o intervalo entre

comandos executados em sequência (disponível apenas em esquemas de voz).

Location specific (especifico da localização): quando este campo é definido como verdadeiro

(true), o comando só é executado se o dispositivo alvo, ou seu nó, estiver na mesma localização

que o dispositivo de captura. Um comando cujo anagrama é “turn lights on (ligue as luzes)”, por

exemplo, não deve ligar todas as luzes de uma casa. Apenas aquelas onde o áudio foi captado

devem ser ligadas.

4.2 Propriedades do servidor

O formulário de propriedades do servidor (Server Properties) permite instalar e selecionar idiomas,

definir filtros de validação e alterar configurações de comunicação com dispositivos clientes e aplicações

externas.

Há duas opções para acessar as propriedades do servidor: através do botão Server Properties (

) da barra de ferramentas; e através do menu de contexto do item BitVoicer Server do Object Explorer.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 34

Para poder abrir o formulário de propriedades do servidor é preciso executar o BVSM com

privilégios administrativos (clicando no ícone do gerenciador com o botão direito e selecionando “Executar

como administrador”) ou conceder privilégios administrativos quando solicitado.

O formulário de propriedades do servidor é composto de três guias: Speech (fala), Communication

(comunicação) e Log. As seções a seguir descrevem estas guias e cada um de seus campos.

4.2.1 Fala

Na guia fala (Speech) é possível instalar e desinstalar idiomas, definir o idioma ativo e Filtros de

validação que se aplicam a todos os objetos de solução.

A seção Override Filters (sobrepor filtros) permite definir os filtros de validação de escopo global.

Ativando a caixa de seleção de cada um destes campos, é possível definir o valor que irá sobrepor àqueles

presentes em dispositivos e esquemas de voz.

A figura abaixo exibe os campos desta guia e, em seguida, é dada a descrição de cada campo:

Active language (idioma ativo): nesta caixa de listagem é possível definir qual é o idioma ativo

para reconhecimento de fala e síntese de voz. Caso o idioma desejado não esteja disponível nesta

caixa, será necessário instala-lo através do botão Install/Uninstall Language à direita.

Conflict resolution period (período de resolução de conflitos): este filtro de validação é

empregado apenas caso haja mais de um dispositivo de entrada ativo na mesma localização (seção

4.1.1 Localizações). Ele consiste em esperar um determinado período de tempo (milissegundos)

após um reconhecimento de fala e, caso outro reconhecimento ocorra na mesma localização,

considerar válido apenas aquele com maior nível de confiança.

Minimum confidence level (nível mínimo de confiança): para que um reconhecimento seja

considerado válido, o nível de confiança do reconhecimento deve ser igual ou superior ao valor

definido neste campo. Quanto maior for o valor deste campo, melhor deverá ser a qualidade do

áudio e mais correta deverá ser a pronúncia.

Activation word (palavra de ativação): é uma palavra, ou um conjunto de palavras, que deve ser

pronunciada antes de uma sentença para que ela seja considerada válida. É possível pronunciar a

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 35

palavra de ativação e a sentença de forma contínua ou apenas a palavra de ativação e, dentro do

período ativado, a sentença propriamente dita.

Activation word activated period (período ativado por palavra de ativação): é o período

(segundos) que se inicia logo após a identificação de uma palavra de ativação. Durante este

período não é preciso repetir a palavra de ativação para que um reconhecimento seja considerado

válido.

Minimum Audio Level (nível mínimo de áudio): trata-se de mais um dos filtros de validação (item

3.1.3.2 Filtros de validação) utilizado por SREs para determinar se um reconhecimento de fala é

válido ou não. Para que este filtro tenha efeito prático (rejeitar fontes de fala de baixa intensidade), a

regra geral para sua definição é: quanto mais sensível for o dispositivo de captura, maior deverá ser

o nível mínimo de áudio. A ferramenta Monitor do servidor fornece informações em tempo real sobre

os níveis de áudio de dispositivos de entrada e pode auxiliar na definição do valor deste campo.

Audio level activated period (período ativado por nível de áudio): é o período (milissegundos)

que se inicia quando o nível mínimo de áudio é atingido. Reconhecimentos feitos fora deste período

são rejeitados pelos SREs

Latency period (período de latência): é o período (milissegundos) que se inicia logo após um

reconhecimento de fala válido. Durante este período, todos os reconhecimentos de fala são

rejeitados.

O botão Install/Unistall Language (instalar/desinstalar idioma) dá acesso à ferramenta de instalação

de idiomas:

Para instalar um novo idioma, selecione-o na listagem Uninstalled Languages (idiomas não

instalados) e clique em Install Selected Language (instalar idioma selecionado) logo abaixo. Para

desinstalar um idioma, selecione-o na listagem Installed Languages (idiomas instalados) e clique em

Uninstall Selected Language (desinstalar idioma selecionado) logo abaixo.

Os idiomas adicionais não fazem parte do pacote de instalação do BitVoicer Server. Eles são

baixados dos servidores da BitSophia na internet. Por esta razão, caso ocorram erros de instalação,

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 36

verifique se os firewalls do Windows ou da rede não estão bloqueando o BVSM e desabilite qualquer proxy

de conexão (Iniciar Painel de Controle Rede e Internet Internet Options guia Conexões

Configurações LAN).

4.2.2 Comunicação

Na guia comunicação (Communication) é possível configurar portas TCP e WCF, definir tempos

limite de inatividade e controlar a execução da aplicação BitVoicer Server UI Link.

A figura abaixo exibe os campos desta guia e, em seguida, é dada a descrição de cada campo:

Listener TCP port (porta do listener TCP): esta porta TCP é utilizada pelo BitVoicer Server para

criar o listener TCP/IP que recebe conexões de entrada de dispositivos clientes. Caso outra

aplicação no servidor utilize a mesma porta definida neste campo, será necessário alterar a porta da

aplicação em conflito ou do BitVoicer Server.

WCF HTTP port (porta WCF HTTP): esta porta é utilizada por aplicações externas para acessar os

serviços WCF disponíveis no BitVoicer Server (seções 3.1.3.5 Serviço WCF do módulo Speech

Manager e 3.1.5 Data Forwarding).

Data forwarding buffer (buffer de encaminhamento de dados): o módulo Data Forwarding

armazena os frames (quadros) enviados por dispositivos clientes para que eles possam ser

recuperados por aplicações externas. Este campo define a quantidade máxima de frames

armazenados pelo módulo Data Forwarding para cada dispositivo. Caso o número de frames no

buffer atinja o valor definido neste campo e um novo frame seja recebido, o frame mais antigo é

descartado (FIFO buffer) para que o buffer possa acomodar o novo frame.

Data forwarding idle timeout (tempo limite de inatividade do encaminhamento de dados):

caso uma aplicação externa se conecte ao módulo Data Forwarding e permaneça inativa por

período (minutos) igual ou superior ao definido neste campo, os recursos utilizados pela aplicação

serão descartados e a conexão WCF será fechada. Neste caso, será necessário que aplicação

inicie uma nova conexão WCF para retomar o acesso ao serviço.

Speech interface idle timeout (tempo limite de inatividade da interface de fala): caso uma

aplicação externa se conecte ao módulo Speech Manager e permaneça inativa por período

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 37

(minutos) igual ou superior ao definido neste campo, os recursos utilizados pela aplicação serão

descartados e a conexão WCF será fechada. Neste caso, será necessário que aplicação inicie uma

nova conexão WCF para retomar o acesso ao serviço.

Disable User Interface Link (desabilitar link com interface do usuário): alguns Comandos

executados pelo BitVoicer Server requerem interação com a interface do usuário. Esta interação é

realizada pela aplicação BitVoicer Server UI Link. Ao marcar esta caixa de seleção, o BitVoicer

Server desativa o serviço que permite a troca de dados com esta aplicação e encerra sua execução.

Caso esta caixa de seleção seja marcada, a aplicação BitVoicer Server UI Link não será mais

executada após a inicialização do Windows.

4.2.3 Log

Esta guia contém um único campo (Maximum Log Size – tamanho máximo do log) que define o

número máximo de registros de eventos operacionais que o BitVoicer Server deve armazenar (mais

detalhes sobre logs do BitVoicer Server na seção 4.4 Log do servidor). Quando o log atinge sua capacidade

máxima, os registros mais antigos são eliminados para acomodar novos registros.

4.3 Opções do gerenciador

As opções do gerenciador definem o modo de funcionamento de algumas funções do BVSM.

Para acessar o formulário de opções do BVSM clique em Tools Options no menu principal. A

figura abaixo exibe este formulário e, em seguida, é dada a descrição de cada campo:

Auto-refresh anagrams (atualizar anagramas automaticamente): na edição de Esquemas de

voz, a geração de anagramas é feita a partir das sentenças definidas na guia Sentences do

formulário de edição de esquemas de voz. Por padrão, os anagramas são recalculados

automaticamente sempre que a guia Anagrams/Commands é selecionada. Esse processo pode ser

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 38

demorado em esquemas de voz com grande número de sentenças. Para impedir que o

gerenciador recalcule os anagramas sempre que a guia Anagrams/Commands for selecionada, é

necessário desmarcar esta opção. Quando esta opção estiver desmarcada, será necessário utilizar

o menu de contexto da grade de anagramas para atualizar seu conteúdo.

Disable the ‘take effect’ warning in the server properties form (desabilitar o aviso ‘ter efeito’

no formulário de propriedades do servidor): quando as Propriedades do servidor são salvas, é

preciso reiniciar o servidor para que as alterações tenham efeito. O BVSM avisa sobre esta

necessidade sempre que as propriedades são salvas. Para desabilitar este aviso, é necessário

selecionar esta opção.

Confirm solution object exclusions (confirmar exclusão de objetos de solução): quando esta

opção está marcada, o BVSM sempre solicita ao usuário uma confirmação antes de excluir objetos

de solução.

Confirm log exclusions (confirmar exclusão de logs): quando esta opção está marcada, o

BVSM sempre solicita ao usuário uma confirmação antes de excluir registros de log.

Confirm sentence exclusions (confirmar exclusão de sentenças): quando esta opção está

marcada, o BVSM sempre solicita ao usuário uma confirmação antes de excluir sentenças de

esquemas de voz.

Confirm sentence block exclusions (confirmar exclusão de blocos de sentenças): quando

esta opção está marcada, o BVSM sempre solicita ao usuário uma confirmação antes de excluir

blocos de sentença de esquemas de voz.

Na guia comandos (Commands - figura abaixo) é possível definir qual será o comando padrão

usado na edição de Dispositivos e Esquemas de voz. Ao adicionar Pistas a dispositivos ou comandos

(seção 4.1.4.4 Anagramas/Comandos) a esquemas de voz, o comando definido nesta guia será adicionado

ao editor de comandos do objeto sendo editado.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 39

4.4 Log do servidor

O BitVoicer Server mantém dois tipos de logs: log operacional e log de erros. O log operacional

mantém registros de eventos comuns que ocorrem durante a operação do servidor: alteração de objetos de

solução, envio de dados a dispositivos clientes, execução de comandos, encaminhamento de dados,

reconhecimento de fala e síntese de voz. O log de erros mantém registros de erros ou exceções que

comprometem o correto funcionamento do servidor.

O log operacional é armazenado em um arquivo gerenciado diretamente pelo BitVoicer Server e

pode ser visualizado através da ferramenta Server Log. É possível acessar esta ferramenta através do

menu principal (View Server Log) ou através do botão Server Log ( ) disponível na barra de

ferramentas. A figura abaixo exibe a ferramenta de visualização de log:

Na seção Filter (filtro) é possível selecionar quais registros serão exibidos na grade de eventos. É

possível filtrar os registros por Módulos do servidor ou exibir todos os registros. Após selecionar o módulo

desejado é preciso clicar no botão Apply (aplicar) para que os registros sejam filtrados.

A grade de eventos não atualiza automaticamente os registros exibidos. Para visualizar os últimos

registros gerados pelo servidor é preciso clicar no botão Refhesh (atualizar) à direita da seção filtros.

O botão Clear (limpar) exclui todos os registros armazenados no arquivo de log e limpa a grade de

eventos.

A grade de eventos é composta de quatro colunas ajustáveis: a primeira coluna exibe em ordem

decrescente a data e a hora que o evento ocorreu; a segunda coluna exibe o módulo responsável pelo

evento; a terceira coluna exibe o usuário que gerou o evento; e, por fim, a quarta coluna exibe uma

descrição do evento. Eventos gerados pelo servidor (eventos que não requerem interação com o usuário)

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 40

ou por dispositivos clientes serão atribuídos à conta de usuário em que o serviço do BitVoicer Server é

executado.

O log de erros é armazenado pelo Windows junto com o log do sistema operacional e de outras

aplicações. Para visualizar este log, clique em iniciar na barra de tarefas, digite “Event Viewer” e pressione

ENTER. Na aplicação Event Viewer, navegue para Windows Log Application. Na parte central desta

aplicação serão exibidos os registros de log de diversas aplicações instaladas no servidor. Na coluna

Source (fonte) procure pelas entradas com a descrição BitVoicer Server ou filtre os resultados utilizando as

ferramentas disponíveis à direita da lista de registros.

4.5 Monitor do servidor

A ferramenta monitor do servidor (Server Monitor) permite que o desenvolvedor visualize: o estado

dos módulos do servidor; quais dispositivos estão conectados; quais foram os resultados dos últimos

reconhecimentos de fala; e qual o estado, em tempo real, dos motores de reconhecimento de fala. Além

disso, também é possível realizar testes de comunicação utilizando o módulo Data Forwarding.

É possível acessar a ferramenta monitor do servidor através do menu principal (View Server

Monitor) ou através do botão Server Monitor ( ) disponível na barra de ferramentas. As seções a seguir

descrevem cada uma das guias disponíveis nesta ferramenta.

4.5.1 Geral

A guia geral (General), abaixo, exibe informações gerais sobre os módulos Communication

Manager, Data Forwarding e Speech Manager:

A seção comunicação (Communication) informa se o módulo Communication Manager está

operacional e quantos dispositivos clientes estão conectados. Se o estado deste módulo for “Stopped

(parado)”, nenhum dispositivo poderá se conectar ao servidor e os outros módulos, embora operacionais,

não serão capazes de se comunicar com dispositivos clientes.

A seção encaminhamento de dados (Data Forwarding) informa se o módulo Data Forwarding está

operacional e quantas vinculações (Active Bindings) entre dispositivos clientes e aplicações externas estão

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 41

ativas. Vinculação é o método pelo qual aplicações externas podem estabelecer conexões com dispositivos

clientes (seção 7.1.3.3 Classe DataForwardingClient). A qualquer momento é possível que múltiplas

aplicações externas estejam vinculadas a múltiplos dispositivos clientes simultaneamente.

A seção fala (Speech) informa se o reconhecimento de fala e a síntese de voz estão operacionais

no módulo Speech Manager, quantos motores de reconhecimento de fala estão disponíveis para alocação e

quantos já foram alocados. Caso não haja licenças ativadas no servidor, o reconhecimento de fala não será

ativado e o item Recognition status (estado do reconhecimento) irá exibir o estado stopped (parado). O item

Assigned Engines (motores atribuídos) irá exibir quantos motores de reconhecimento de fala estão

atribuídos a dispositivos. Estes motores são atribuídos (seção 3.1.3.1 Atribuição de motores de

reconhecimento de fala) a dispositivos de entrada mesmo que eles ainda não estejam associados a

qualquer esquema de voz (seção 4.1.4.2 Dispositivos de entrada).

Caso o estado de qualquer um dos módulos exibidos nesta guia seja parado (stopped) em função

de algum erro, será possível obter informações sobre o erro no log do Windows (seção 4.4 Log do servidor).

4.5.2 Comunicação

A guia comunicação (Communication) exibe os dispositivos que foram identificados pelo módulo

Communication Manager e estão atualmente conectados ao servidor:

4.5.3 Encaminhamento de dados

Na guia encaminhamento de dados (Data Forwarding) é possível realizar testes de comunicação

com dispositivos clientes usando o módulo Data Forwarding. A figura abaixo exibe esta guia e o resultado

do teste descrito em detalhes na seção 8.4 Encaminhamento de dados:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 42

A seção Device (dispositivo) exibe uma caixa de listagem com todos os dispositivos presentes na

solução, exceto dispositivos do tipo SystemMic e SystemSpeaker. Depois de selecionado um dispositivo, é

possível se vincular (botão Bind) a ele e realizar troca de dados. Nesta ferramenta é possível se vincular a

apenas um dispositivo de cada vez, no entanto, o módulo Data Forwarding suporta vinculação simultânea

de múltiplos dispositivos a múltiplas aplicações.

Depois que o monitor do servidor é vinculado com sucesso a um dispositivo, é possível enviar

dados através da seção Send (enviar) e receber dados através da seção Received (recebido). Para enviar

dados, basta selecionar o tipo de dado na caixa de listagem Data type (tipo de dado), digitar o dado na

caixa de texto abaixo e clicar no botão Send. Neste momento, um frame do BVSP (seção 6.6 Estrutura do

frame do BitVoicer Server Protocol) contendo o dado informado é enviado ao dispositivo cliente. A seção

Received é atualizada automaticamente e exibe os dados enviados pelo dispositivo vinculado.

Para se vincular a outro dispositivo é preciso primeiro se desvincular do dispositivo atual através do

botão desvincular (Unbind).

4.5.4 Fala

A guia fala (Speech) exibe informações sobre os últimos reconhecimentos de fala (aceitos e

rejeitados) e o estado em tempo real de motores de reconhecimento.

A seção Recognition Results (resultados de reconhecimento), figura abaixo, exibe detalhes dos

últimos dez reconhecimentos de fala. Nesta seção é possível ver qual dispositivo de entrada captou o áudio,

se ele foi aceito ou rejeitado, o motivo da rejeição, o texto reconhecido, o momento do reconhecimento, o

nível de confiança e os níveis de áudio no momento do reconhecimento.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 43

Na seção Engine Status (estado do motor) é possível visualizar em tempo real algumas informações

utilizadas pelos Filtros de validação para determinar se um reconhecimento é válido ou não. Para visualizar

estas informações, é preciso selecionar um dispositivo de entrada na caixa de listagem Recognition client

(cliente de reconhecimento). Esta listagem exibe apenas os dispositivos de entrada ativos quando a

ferramenta monitor do servidor foi aberta. Caso um dispositivo se torne ativo após a abertura desta

ferramenta, é preciso clicar no botão Refresh (atualizar), ao lado, para que ele apareça na lista.

O campo Audio level (nível de áudio) exibe o volume (0 a 100) mais recente medido no fluxo de

áudio enviado pelo dispositivo. O campo Audio level average (média do nível de áudio) exibe a média das

últimas medições. Os campos In audio level activated period (em período ativado por nível de áudio) e In

activation word activated period (em período ativado por palavra de ativação) exibem verdadeiro (true)

quando o motor de reconhecimento de fala encontre-se dentro destes períodos (seção 3.1.3.2 Filtros de

validação).

4.6 Exportação de objetos de solução

A exportação de Objetos de solução permite que o desenvolvedor crie cópias de segurança,

compartilhe objetos e duplique instalações do BitVoicer Server de maneira simples e rápida.

As exportações de objetos são salvas em arquivos .sof (Solution Object File) que são gerados

através do assistente de exportação (Export Wizard) localizado no menu principal (Tools Export Solution

Objects). A figura abaixo exibe o formulário inicial deste assistente:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 44

O primeiro passo do assistente de exportação consiste em especificar o tipo do conteúdo do arquivo

de exportação:

Voice Schemas and commands (esquemas de voz e comandos): esta opção exporta os

esquemas de voz selecionados, suas sentenças, anagramas, os comandos relacionados aos

anagramas e os dados binários relacionados a estes comandos.

Voice Schemas only (esquemas de voz apenas): esta opção exporta apenas os esquemas de

voz selecionados, suas sentenças e anagramas. Comandos e dados binários relacionados são

ignorados.

Devices (dispositivos): esta opção exporta os dispositivos selecionados e suas pistas (seção

4.1.2.4 Pistas), incluindo os dispositivos e dados binários relacionados às pistas.

Binary Data (dados binários): esta opção exporta apenas os dados binários selecionados.

O segundo passo (figura abaixo) consiste em especificar o arquivo para onde os objetos de solução

serão exportados e sua localização. É possível navegar pelas pastas do servidor utilizando o botão procurar

(Browse).

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 45

O terceiro e último passo (figura abaixo) consiste em selecionar quais objetos serão exportados:

Depois que os objetos forem selecionados, basta clicar em Finish (finalizar) para que o assistente

de exportação reúna as informações necessárias e exporte os objetos selecionados para o arquivo

especificado. A figura abaixo exibe o resultado deste processo:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 46

Caso ocorra algum erro durante o processo de exportação, a coluna Message (mensagem) irá exibir

um link onde pode ser obtida a descrição do erro.

4.7 Importação de objetos de solução

A importação de Objetos de solução permite adicionar à solução os objetos contidos em arquivos

.sof (Solution Object File) gerados pelo assistente de exportação.

O assistente de importação está disponível através do menu principal (Tools Import Solution

Objects). A figura abaixo exibe o formulário inicial deste assistente:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 47

O primeiro passo do assistente de importação consiste em especificar o arquivo de onde os objetos

de solução serão importados. Nos próximos passos, o assistente de importação irá solicitar informações em

função do conteúdo deste arquivo. As seções a seguir descrevem os passos do assistente para os quatro

tipos de conteúdo disponíveis: esquemas de voz e comandos; esquemas de voz apenas; dispositivos; e

dados binários.

4.7.1 Importação de esquemas de voz e comandos

Quando o conteúdo da importação for esquemas de voz e comandos, o formulário a seguir é exibido

no segundo passo do assistente de importação:

Caso a opção Select Input Devices (selecionar dispositivos de entrada) seja marcada, o passo

exibido na figura abaixo será adicionado ao assistente. Neste passo é possível especificar quais dispositivos

servirão como Dispositivos de entrada para os esquemas de voz selecionados.

Caso a opção Merge identical binary data (fundir dados binários idênticos) seja marcada, todo dado

binário com nome e conteúdo idênticos a dados binários existentes não é importado. Os comandos

importados que usem estes objetos são mapeados para dados binários existentes. Os dados binários para

os quais não há equivalente na solução são importados normalmente.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 48

No terceiro passo (figura abaixo) o usuário deve selecionar os esquemas de voz que deseja

importar:

No próximo e último passo são mapeados quais dispositivos serão os alvos dos comandos

importados. As três primeiras colunas deste formulário (figura abaixo) exibem informações sobre o alvo

original dos comandos sendo importados. Utilizando as últimas duas colunas, o desenvolvedor deve mapear

cada um dos dispositivos originais para dispositivos alvo já presentes na solução.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 49

Depois que os comandos forem mapeados, basta clicar em Finish (finalizar) para que o assistente

de importação reúna as informações necessárias e importe os objetos selecionados para a solução. A figura

abaixo exibe o resultado deste processo:

Caso ocorra algum erro durante o processo de importação, a coluna Message (mensagem) irá exibir

um link onde pode ser obtida a descrição do erro.

4.7.2 Importação de esquemas de voz apenas

Quando o conteúdo da importação for apenas esquemas de voz, sem comandos ou dados binários,

o formulário a seguir é exibido no segundo passo do assistente de importação:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 50

Caso a opção Select Input Devices (selecionar dispositivos de entrada) seja marcada, o passo

exibido na figura abaixo será adicionado ao assistente. Neste passo é possível especificar quais dispositivos

servirão como Dispositivos de entrada para os esquemas de voz selecionados.

No terceiro passo (figura abaixo) o desenvolvedor deve selecionar os esquemas de voz que deseja

importar:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 51

Caso a opção selecionar dispositivos de entrada não tenha sido marcada, este será o último passo

do assistente. Se este for o caso, basta clicar em Finish (finalizar) para que o assistente de importação

reúna as informações necessárias e importe os objetos selecionados para a solução. A figura abaixo exibe

o resultado deste processo:

Caso ocorra algum erro durante o processo de importação, a coluna Message (mensagem) irá exibir

um link onde pode ser obtida a descrição do erro.

4.7.3 Importação de dispositivos

Quando o conteúdo da importação for dispositivos, o formulário a seguir é exibido no segundo

passo do assistente de importação:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 52

Caso a opção Merge identical binary data (fundir dados binários idênticos) seja marcada, todo dado

binário com nome e conteúdo idênticos a dados binários existentes não é importado. Os comandos

importados que usem estes objetos são mapeados para dados binários existentes. Os dados binários para

os quais não há equivalente na solução são importados normalmente.

As opções Map Locations (mapear localizações) e Merge Locations (fundir localizações) são

mutualmente excludentes (apenas uma pode ser selecionada). Caso a opção mapear localizações seja

marcada, o passo exibido na figura abaixo será adicionado ao assistente. Neste passo é possível mapear a

localização original dos dispositivos importados para localizações já existentes na solução.

Caso a opção fundir localizações seja marcada, o assistente irá criar as localizações para cujo

nome não há correspondente na solução e as localizações coincidentes serão mapeadas para aquelas já

existentes.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 53

No terceiro passo (figura abaixo) o usuário deve selecionar os dispositivos que deseja importar:

No quarto passo (figura abaixo) o usuário tem a opção de alterar as configurações de comunicação

utilizadas pelos dispositivos importados. Em dispositivos cuja interface de comunicação é SerialCOM (porta

serial), é possível alterar o nome da porta. Em dispositivos cuja interface de comunicação é TCPIP

(TCP/IP), é possível alterar o endereço IP do dispositivo.

Se algum dos dispositivos importados utilizar pistas (seção 4.1.2.4 Pistas) e o dispositivo alvo de

qualquer uma delas não seja importado, será necessário mapear o alvo do comando destas pistas para

dispositivos já existentes. Neste caso, será adicionado o passo abaixo ao assistente de importação:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 54

As três primeiras colunas deste formulário (figura acima) exibem informações sobre o alvo original

dos comandos sendo importados. Utilizando as últimas duas colunas, o desenvolvedor deve mapear cada

um dos dispositivos originais para dispositivos alvo já presentes na solução.

Depois que os comandos forem mapeados, basta clicar em Finish (finalizar) para que o assistente

de importação reúna as informações necessárias e importe os objetos selecionados para a solução. A figura

abaixo exibe o resultado deste processo:

Caso ocorra algum erro durante o processo de importação, a coluna Message (mensagem) irá exibir

um link onde pode ser obtida a descrição do erro.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 55

4.7.4 Importação de dados binários

Quando o conteúdo da importação for dados binários, o formulário a seguir é exibido no segundo

passo do assistente de importação:

Caso Skip identical binary data (pular dados binários idênticos) seja marcado, todo dado binário com

nome e conteúdo idênticos a dados binários existentes é ignorado.

No próximo e último passo (figura abaixo) o usuário deve selecionar os dados binários que deseja

importar:

Depois que os objetos a serem importados forem selecionados, basta clicar em Finish (finalizar)

para que o assistente de importação reúna as informações necessárias e importe os objetos selecionados

para a solução. A figura abaixo exibe o resultado deste processo:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 56

Caso ocorra algum erro durante o processo de importação, a coluna Message (mensagem) irá exibir

um link onde pode ser obtida a descrição do erro.

4.8 Teste de reconhecimento de fala e síntese de voz

O BVSM possui duas ferramentas em que é possível testar o reconhecimento de fala e a síntese de

voz sem a necessidade de adquirir licenças. Estas ferramentas utilizam apenas o adaptador de áudio do

servidor e não requerem conexões com dispositivos clientes.

Antes de utilizar estas ferramentas, certifique-se que o adaptador de áudio está corretamente

instalado (Iniciar Painel de Controle Sistema e Segurança Gerenciador de dispositivos) e que os

níveis de áudio do microfone e dos alto-falantes não estão no nível mínimo (Iniciar Painel de Controle

Hardware e Som Som).

Para acessar a ferramenta de teste de reconhecimento de fala (figura abaixo) clique em Tools

Try Speech Recognition no menu principal:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 57

Para acessar a ferramenta de teste de síntese de voz (figura abaixo) clique em Tools Try Speech

Synthesis no menu principal:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 58

4.9 Ativação

A ativação de licenças do BitVoicer Server é feita através da ferramenta de ativação localizada no

menu principal (Help Activation). Para acessar esta ferramenta, é necessário executar o BVSM com

privilégios administrativos ou conceder privilégios administrativos quando solicitado. Além disso, também é

preciso que o servidor esteja conectado à Internet.

A ferramenta de ativação (figura abaixo) é composta de uma grade para entrada de chaves de

produto, uma área de status mais abaixo e uma área de relatório de ativação (Activation Report) à direita.

As chaves de produto do BitVoicer Server são compostas por cinco blocos e cada bloco é composto

por quatro caracteres alfa-numéricos. Para ativar uma ou mais chaves de produto, digite-as na grade de

chaves e clique em Activate (ativar). A área relatório de ativação irá exibir informações detalhadas sobre o

processo de ativação.

Para que o BitVoicer Server identifique as chaves de produto ativadas é preciso reiniciar o servidor.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 59

5 BitVoicer Server UI Link

A aplicação BitVoicer Server UI Link (UI Link) permite que o BitVoicer Server execute Comandos e

acesse recursos que requerem interação com a interface do usuário. Ao utilizar o adaptador de áudio do

servidor para captar ou reproduzir áudio, por exemplo, o BitVoicer Server está interagindo com a interface

do usuário. Além disso, comandos que iniciam a execução de aplicativos ou abrem documentos, também

podem requerer tal interação.

A aplicação UI Link é carregada quando o sistema operacional é inicializado. No entanto, ela não

fica visível na barra de tarefas do Windows a maior parte do tempo. Apenas quando mensagens de erro são

exibidas, um pequeno ícone aparece próximo à área do relógio.

Para acessar o UI Link, clique no pequeno ícone em forma de seta (bandeja do sistema) próximo à

área do relógio, como mostra a figura a seguir:

O ícone do UI Link pode aparecer na bandeja do sistema de duas formas:

O ícone com o quadrado em vermelho (parado) indica que há um problema na comunicação com o

BitVoicer Server e o UI Link não está executando comandos. O ícone com o triangulo em verde (rodando)

indica que o UI Link está funcionando corretamente.

É possível controlar a execução do UI Link através do menu de contexto (botão direito do mouse)

disponível em seu ícone ou abrindo a aplicação (figura abaixo) clicando no ícone com o botão esquerdo do

mouse.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 60

O item File (arquivo) do menu principal permite controlar quais operações o UI Link está autorizado

a executar:

Do not listen (não escute): o UI Link não utilizará o microfone do servidor para captar áudio.

Do not speak (não fale): o UI Link não reproduzirá voz sintetizada utilizando os alto-falantes do

servidor.

Do not play áudio (não toque áudio): o UI Link não reproduzirá arquivos de áudio .wav a pedido

do servidor.

Do not start processes (não inicie processos): o UI Link não rodará executáveis ou abrirá

documentos a pedido do servidor.

A área Recent Activity (atividades recentes) exibe os últimos comandos executadas pelo UI Link. A

área Messages (mensagens) exibe mensagens de erros ocorridos na comunicação com o servidor ou

durante a execução de comandos.

Para que o UI Link continue em execução, é necessário minimiza-lo. Fechar o UI Link utilizando o

botão em forma de “X” encerra a aplicação.

Caso seja necessário desabilitar completamente o UI Link, selecione a opção “Disable user interface

link (desabilitar link com interface do usuário)” nas propriedades do servidor (seção 4.2.2 Comunicação).

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 61

6 BitVoicer Server Protocol

O BitVoicer Server Protocol (BVSP) é utilizado por microcontroladores para acessar os serviços de

encaminhamento de dados, reconhecimento de fala e síntese de voz do BitVoicer Server.

6.1 Definições

Aplicação: conjunto de um ou mais programas desenhados para realizar operações com propósito

específico.

Carga de dados (payload): são os dados a serem transmitidos, excluindo as informações enviadas

com ele (cabeçalhos ou meta-dados).

Comunicação entre processos: é o grupo de mecanismos que permite aos processos transferirem

informação entre si.

Dados tipificados: dados cujo conteúdo é determinado.

Dispositivo: conjunto de hardware e possivelmente software, composto de um ou mais circuitos

integrados ou MCUs, acompanhados de outros componentes ou não, capaz de acessar os serviços

do servidor através de uma interface de comunicação.

Dispositivo cliente: dispositivo que utiliza os serviços disponíveis no servidor.

Dispositivo de entrada: dispositivos capazes de atuar como ponto de captura e que enviam fluxos

de áudio ao servidor.

Dispositivo misto: dispositivos que possuem as características de dispositivos de entrada e saída.

Dispositivo de saída: dispositivos que recebem dados do servidor em resposta a um

reconhecimento de fala válido.

Fluxo de áudio: representação digital de ondas sonoras composta de uma sequência de bits.

Inbound: sentido de comunicação quando dados são enviados de um dispositivo ao servidor.

Interface/canal de comunicação: meio e protocolo através dos quais unidades de informação

(bits) são transmitidas de um ponto final de comunicação a outro em qualquer sentido.

Listener TCP/IP: um socket orientado para conexões TCP/IP que monitora tentativas de conexão.

Little-endian: o byte ou bit menos significativo (Least Significant Bit – LSB) primeiro.

MCU (Microcontroller Unit): microcontrolador contendo um processador, memória e periféricos de

entrada/saída.

Outbound: sentido de comunicação quando dados são enviados do servidor a um dispositivo.

PCM (Pulse-Code Modulation): método usado para representar digitalmente amostras de sinais

analógicos.

Ponto de captura: local físico onde ondas sonoras são convertidas em impulsos elétricos.

Ponto final de comunicação (Communication End-point): ponto onde dados chegam ou deixam

uma entidade e passam para uma interface/canal de comunicação.

Processo: contexto de execução próprio que abstrai a execução de código dos componentes reais

do sistema. Processos não tem conhecimento acerca de outros processos.

Programa: sequência de instruções escritas para realizar tarefas específicas em uma unidade de

processamento de dados.

Reconhecimento de fala válido: ocorre quando o servidor, ao analisar um fluxo de áudio, identifica

uma ou mais palavras pré-determinadas sob condições previamente estabelecidas.

Sentido da comunicação: direção em que os dados são transmitidos (inbound ou outbound).

Servidor: unidade de processamento de dados que utiliza este protocolo para prover serviços de

reconhecimento de fala.

Sinal de alteração de modo: sinal que solicita a alteração do modo de operação do canal de

comunicação em um dos sentidos.

Socket: implementação da interface de socketes Berkeley.

Tempo limite de inatividade: é a quantidade máxima de tempo, em segundos, que o servidor se

mantém conectado a uma interface de comunicação TCP/IP inativa. Este intervalo é estabelecido

no servidor para cada dispositivo.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 62

6.2 Escopo

Este protocolo define a forma de comunicação entre pontos finais de comunicação do BitVoicer

Server e dispositivos clientes. A comunicação entre processos realizada entre o BitVoicer Server e outras

aplicações rodando no servidor não faz parte do escopo deste protocolo.

O BVSP não impõe restrições quanto às interfaces de comunicação intermediárias utilizadas para

conectar dois pontos finais de comunicação.

6.3 Conceitos básicos

O BVSP fornece dois modos distintos de operação: Enquadrado (Framed) e Fluxo (Stream). Estes

modos de operação podem ser alternados a qualquer momento independentemente do sentido da

comunicação, ou seja, o modo de operação pode ser diferente em cada sentido (inbound e outbound).

6.3.1 Modo enquadrado

Neste modo de comunicação, toda informação trocada é encapsulada em quadros (frames). Os

frames são compostos de campos delimitadores e qualificadores além da carga de dados (payload).

Enquadrado é o modo inicial de operação, em ambos os sentidos, quando uma conexão é estabelecida com

o servidor. Somente neste modo é possível trocar dados tipificados e fazer solicitações de controle ao

servidor.

6.3.2 Modo fluxo

Neste modo de operação, toda informação trocada é enviada como fluxos binários na forma de

octetos (blocos de 8 bits - um byte). O conteúdo dos dados neste modo de operação é áudio PCM de 8 bits

com uma taxa de amostragem de 8000 Hz. Quando a comunicação ocorre neste modo, todos os dados

recebidos pelo ponto final de comunicação devem ser tratados como áudio. Para retomar o modo

Enquadrado de operação, o sinal de alteração de modo deve ser inserido no sinal de áudio e enviado ao

ponto final de comunicação que o recebe.

Apenas dispositivos de entrada ou mistos podem solicitar ao servidor que o canal inbound

(Dispositivo Servidor) passe a operar no modo Fluxo, ou seja, apenas dispositivos de entrada ou mistos

podem servir como ponto de captura e enviar fluxos de áudio ao servidor.

6.3.3 Motor de reconhecimento de fala (Speech Recognition Engine – SRE)

Motor de Reconhecimento de Fala é um processo executado no servidor para cada dispositivo

cliente operando um canal inbound no modo Fluxo. Este processo recebe e gerencia fluxos de áudio,

identifica uma ou mais palavras neste fluxo, valida a identificação através de condições e envia dados a um

ou mais dispositivos clientes em resposta a identificações válidas.

As palavras a serem identificadas ou reconhecidas são previamente definidas no servidor e podem

ser atribuídas a um ou mais dispositivos clientes. As condições de validação, por sua vez, podem ser

definidas de forma individual para cada dispositivo ou para todos os dispositivos que usam determinado

conjunto de palavras.

Os dados enviados em resposta a identificações válidas, seu tipo e destino também são definidos

previamente no servidor. Reconhecimentos válidos podem levar ao envio de dados para o dispositivo que

captou o áudio ou para outros dispositivos clientes conectados.

6.4 Interfaces de comunicação

O tipo de ponto final de comunicação disponível no servidor varia em função do hardware disponível

neste equipamento. Inicialmente, dois tipos de interface de comunicação são suportados: TCP/IP e porta

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 63

serial. Estas interfaces de comunicação são operadas pelo servidor de forma diferente em função de suas

particularidades e mais tipos de interface podem ser adicionados no futuro.

6.4.1 TCP/IP

Nesta interface de comunicação, o servidor implementa um listener TCP/IP que aguarda por

solicitações de conexão TCP/IP baseada em Sockets. A porta TCP padrão usada pelo listener é a porta

4194.

A identificação do dispositivo que solicita uma conexão ao listener é feita através do número IP da

interface de comunicação do dispositivo. Uma relação de dispositivos é usada pelo servidor para aceitar

conexões de entrada solicitadas ao listener. Esta relação contém os respectivos endereços IP que

identificam cada dispositivo na rede.

Caso o dispositivo que solicita a conexão faça parte da relação de dispositivos, a conexão TCP/IP é

aceita e imediatamente aberta. Se o dispositivo que solicita a conexão não fizer parte da relação de

dispositivos, a conexão é imediatamente recusada e nenhum dado é enviado ao dispositivo que solicitou a

conexão.

Uma vez aceita a conexão, o servidor envia um frame contendo informações de estado e o

dispositivo pode iniciar troca de dados com o servidor. Como este frame de estado não é gerado a pedido

do dispositivo cliente, o número aleatório, obrigatório neste tipo de frame, será zero.

Caso não haja qualquer envio ou recebimento de dados em uma interface TCP/IP por período

superior ao tempo limite de inatividade, a conexão TCP/IP será encerrada pelo servidor e os recursos

consumidos por ela serão liberados.

6.4.2 Porta serial

Nesta interface de comunicação, dois modos de conexão podem ser utilizados: intermitente e

persistente. O modo de conexão usado por cada dispositivo é determinado com base em uma relação de

dispositivos armazenada no servidor. Esta relação contém uma lista de portas seriais a serem monitoradas,

suas especificações e modo de conexão.

6.4.2.1 Conexão intermitente

Conexões seriais intermitentes são aquelas que o servidor não bloqueia permanentemente o acesso

à porta serial. Neste tipo de conexão, o servidor só bloqueia a porta quando este precisa enviar dados a

dispositivos ou MCUs.

Este tipo de conexão só pode ser utilizado por dispositivos de saída. Isso se dá, pois o dispositivo

permanece conectado ao servidor apenas durante o breve intervalo de tempo necessário para que o

servidor lhe envie dados. Se a porta serial não estiver disponível para conexão no momento que o servidor

precisar lhe enviar dados, duas outras tentativas de conexão são feitas em intervalos de 500 milissegundos.

Se nenhuma das tentativas for bem sucedida, o servidor descarta os dados a serem enviados.

6.4.2.2 Conexão persistente

Conexões seriais persistentes são aquelas que o servidor bloqueia permanentemente o acesso à

porta serial, ou seja, a conexão com o dispositivo vinculado à porta serial é persistente.

A relação de dispositivos que utilizam este modo de conexão indica quais portas seriais devem ser

monitoradas pelo servidor. A cada 300 milissegundos o servidor verifica as portas seriais disponíveis no

equipamento que executa o servidor e abre aquelas presentes na relação de dispositivos. Na mesma

ocasião, caso uma porta serial já aberta se torne indisponível, ela é fechada e seus recursos são liberados.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 64

Uma vez aberta a porta serial, o servidor envia um frame contendo informações de estado e o

dispositivo pode iniciar troca de dados com o servidor. Como este frame de estado não é gerado a pedido

do dispositivo cliente, o número aleatório, obrigatório neste tipo de frame, será zero.

6.5 Descrição operacional

Esta seção descreve como é operacionalizada a troca de informações entre dispositivos e o

servidor.

6.5.1 Modo inicial de operação

O modo inicial de operação do BVSP, em ambos os sentidos de comunicação, é Enquadrado.

Considera-se iniciada a operação do protocolo quando dispositivos clientes podem iniciar troca de

informações com o servidor. Esse momento varia dependendo da interface de comunicação utilizada pelo

dispositivo e é descrito em detalhes na seção 6.4 Interfaces de comunicação.

6.5.2 Alteração de modo de operação

Uma vez iniciada a operação do protocolo, os participantes da comunicação podem controlar o

modo de operação de seu canal de comunicação de saída, ou seja, o dispositivo cliente é responsável por

controlar o modo de operação no sentido inbound (Dispositivo Servidor) e o servidor é responsável por

controlar o modo de operação no sentido outbound (Servidor Dispositivo).

6.5.2.1 Alterando o modo de operação para Fluxo

Para solicitar a alteração do modo de operação do canal de comunicação para Fluxo, o ponto final

de comunicação que controla o canal deve enviar um frame do tipo Alteração de Modo. O ponto final de

comunicação que recebe o frame deve tomar as medidas necessárias para passar a processar os dados

recebidos como fluxo de áudio.

6.5.2.2 Alterando o modo de operação para Enquadrado

Quando a troca de dados entre pontos finais de comunicação, em determinado sentido, está

operando no modo Fluxo, o ponto final de comunicação que recebe os dados deve processa-los como fluxo

de áudio PCM. Para instruir o ponto final de comunicação que recebe os dados, que o modo de operação

no canal deve ser alterado para Enquadrado, um sinal de alteração de modo deve ser inserido no fluxo de

áudio e detectado no ponto final de comunicação que o recebe. Este sinal é composto dos seguintes bytes

(octetos): 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF.

O ponto final de comunicação que recebe o sinal de alteração de modo deve, imediatamente,

abandonar o modo de operação Fluxo. O próximo byte recebido após o término do sinal de alteração de

modo será, portanto, aquele que identifica o campo Início de Frame.

6.5.3 Solicitando status ao servidor

Solicitações de Status ao servidor só podem ser feitas quando o canal de comunicação inbound

(Dispositivo Servidor) está operando no modo Enquadrado. Caso o canal esteja operando no modo

Fluxo, é necessário primeiro solicitar ao servidor que ele altere o modo de operação do canal para

Enquadrado.

Para solicitar informações de status ao servidor, é necessário enviar um frame do tipo Solicitação de

Status. Este frame, depois de recebido e processado, instrui o servidor a criar um frame com informações

de status e repassa-lo imediatamente ao dispositivo que o solicitou. As informações contidas neste frame

são descritas em detalhes na seção 6.6.1.5.1 Carga do tipo status.

O tempo para recebimento, processamento e resposta do servidor a um frame de Solicitação de

Status é influenciado, em sua maior parte, pelo tempo necessário para que a interface de comunicação

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 65

envie ou receba os frames. Por esta razão, é possível utilizar este mecanismo para identificar, também, se o

servidor ainda está ao alcance do dispositivo cliente ou se o canal de comunicação não está mais operando.

6.5.4 Reconhecimento de fala

Quando o servidor identifica a presença de um dispositivo de entrada ou misto e estabelece uma

conexão com este dispositivo, é atribuído um Motor de Reconhecimento de Fala (SRE) exclusivo para o

dispositivo. A partir deste momento, caso o servidor receba uma solicitação para alterar o modo de

operação do canal inbound (Dispositivo Servidor) para Fluxo, todos os dados recebidos neste canal são

encaminhados ao SRE que é responsável pelo processamento do áudio. O SRE é descrito em detalhes na

seção 6.3.3.

Ao se desconectar de um dispositivo de entrada ou misto, o servidor imediatamente libera o SRE

atribuído a este dispositivo.

6.5.5 Encaminhando dados a aplicações no servidor

O encaminhamento de dados a aplicações sendo executadas no servidor só é possível quando o

canal de comunicação inbound (Dispositivo Servidor) está operando no modo Enquadrado. Caso o canal

esteja operando no modo Fluxo, é necessário primeiro solicitar ao servidor que ele altere o modo de

operação do canal para Enquadrado.

Para encaminhar dados a outras aplicações, o dispositivo cliente deve enviar frames do tipo

Transferência de Dados ao servidor. O servidor, por sua vez, encaminha os dados contidos nestes frames

para um local de armazenamento capaz de realizar comunicação entre processos. Outros processos

(aplicações) podem, então, fazer consultas a estes locais de armazenamento e recuperar os dados

enviados pelo dispositivo cliente.

A comunicação entre processos realizada entre o servidor e outras aplicações não faz parte do

escopo deste protocolo e deve ser definida na documentação do servidor que implementa o protocolo.

6.5.6 Recebendo dados tipificados do servidor

O recebimento de dados tipificados do servidor só é possível quando o canal de comunicação

outbound (Servidor Dispositivo) está operando no modo Enquadrado. Caso o canal esteja operando no

modo Fluxo, é necessário primeiro solicitar ao dispositivo cliente que ele altere o modo de operação do

canal para Enquadrado.

Os dados enviados pelo servidor são encapsulados em frames do tipo Transferência de Dados.

Estes dados podem ser provenientes de outras aplicações (comunicação entre processos) ou podem ser

dados enviados em resposta a um reconhecimento de fala válido. O dispositivo cliente que recebe os dados

deve ser capaz de tratar ambas as fontes de dados sem distinção, pois o servidor não informa ao dispositivo

qual é a fonte dos dados.

6.6 Estrutura do frame do BitVoicer Server Protocol

A unidade básica de transmissão no modo enquadrado é o quadro (frame). A tabela abaixo exibe os

campos que compõem o frame.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 66

Byte Bit Campo

0 7 a 0 INÍCIO DE FRAME

1

1 TIPO DE FRAME

0

3

TIPO DE DADO 2

1

0

9

TAMANHO DA CARGA

8

2

7

6

5

4

3

2

1

0

3 a N --- CARGA

N + 1 7 a 0 FIM DE FRAME

N = 2 + Tamanho da Carga

6.6.1 Elementos do frame

Os frames do BVSP são compostos de campos. Estes campos são descritos nas próximas seções

em ordem de transmissão. A ordenação dos bytes e bits utilizada no protocolo é Little-endian (o byte ou bit

menos significativo – LSB – primeiro).

6.6.1.1 Início de frame (start of frame)

Este campo marca o início de um frame do BVSP. Ele é composto da sequência 10101011 (0xAB).

6.6.1.2 Tipo de frame (frame type)

Este campo é composto de dois bits que identificam o tipo ou função do frame. Os tipos de frame

são:

Transferência de Dados (Data Transfer): o valor do campo é 0x00.

Solicitação de Status (Status Request): o valor do campo é 0x01. O tipo de dado do frame

Solicitação de Status deve ser Byte, o tamanho da carga deve ser um, e o campo Carga deve

conter um número aleatório entre 0 e 255. O frame de resposta deverá conter dado do tipo Status.

Alteração de Modo (Mode Change): o valor do campo é 0x02. O tipo de dado do frame Alteração

de Modo deve ser N/A, o tamanho da carga deve ser zero, e o campo Carga não deve fazer parte

do frame.

6.6.1.3 Tipo de dado (data type)

Este campo é composto de 4 bits e indica o tipo de dado contido no campo Carga. Os tipos de

dados suportados pelo protocolo são:

Bytes

transmitidos de

cima para baixo

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 67

Tipo Valor Descrição

N/A 0x00 Indica que a tipificação de dados não se aplica ao frame.

Byte 0x01 Inteiro sem sinal de 8 bits. Intervalo: 0 a 255.

Int16 0x03 Inteiro com sinal de 16 bits. Intervalo: -32.768 a 32.767.

Int32 0x05 Inteiro com sinal de 32 bits. Intervalo: -2.147.483.648 a 2.147.483.647.

Binary 0x07 Array de bytes de comprimento variável. Comprimento máximo: 1023 bytes.

String 0x08 String de caracteres (ISO 8859-1) de comprimento variável. Comprimento máximo: 1023 bytes.

Status 0x0F

Este tipo de dado indica o estado de funcionamento do servidor. Ele é composto de dois bytes: o primeiro byte contém o número aleatório enviado pelo MCU cliente que solicitou os dados de estado; o segundo byte e cada bit deste byte expõe diferentes informações de estado. Maiores informações na seção 6.6.1.5.1 Carga do tipo status.

6.6.1.4 Tamanho da carga (payload size)

Este campo é composto por 10 bits e indica o número de bytes contidos no campo Carga. O valor

máximo deste campo é, portanto, 1023.

6.6.1.5 Carga (payload)

Este campo contém os dados a serem transmitidos. O tipo de dado é determinado pelo campo Tipo

de Dados e a quantidade de bytes é determinada pelo campo Tamanho da Carga.

Caso o tipo de dado do frame seja Status (0x0F), o campo Carga conterá dois bytes. A próxima

seção descreve em detalhes a atribuição dada a cada um destes bytes.

6.6.1.5.1 Carga do tipo status

Cargas do tipo Status são compostas de dois bytes:

Primeiro byte: contém o número aleatório gerado e enviado pelo dispositivo cliente que solicitou o

frame de estado.

Segundo byte: os bits deste byte indicam diferentes informações de estado do servidor. Bits com

valor igual a zero indicam falso e bits com valor igual a um indicam verdadeiro.

Bit Descrição

7 a 3 (Reservados)

2 Encaminhamento de dados ativo: indica se o serviço de encaminhamento de dados do servidor está em funcionamento.

1 SRE disponível: indica se há um SRE alocado para o dispositivo.

0 Operante: indica se o servidor está em funcionamento.

6.6.1.6 Fim de frame (end of frame)

Este campo marca o fim de um frame do BVSP. Ele é composto da sequência 01010111 (0x57).

6.7 Notas

O BVSP não implementa funcionalidades para identificação e recuperação de erros de transmissão

nem notificação de recebimento de frames. Estas funcionalidades devem ser implementadas por camadas

inferiores. Todos os frames inconsistentes são simplesmente descartados.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 68

Fontes de inconsistência incluem:

Campos não identificados ou faltando;

Tamanho do frame incorreto (levando-se em consideração o valor informado no campo Tamanho da

Carga);

Valores não suportados nos campos.

6.8 Especificação aberta

Este protocolo é propriedade intelectual da BitSophia Tecnologia Ltda. ME. A BitSophia se

compromete a não interpelar você judicialmente por fazer uso, venda, exportação, importação ou

distribuição de dispositivos que implementam as especificações deste protocolo, desde que:

a. Todas as especificações do protocolo sejam rigorosamente implementadas;

b. Nenhum trecho das especificações seja modificado, adaptado ou estendido;

c. O dispositivo em que o protocolo é implementado use os serviços de uma versão licenciada do

BitVoicer Server;

d. As marcas BitVoicer ou BitSophia não sejam usadas em qualquer material publicitário,

documentação, produto ou serviço sem autorização prévia.

Esta é uma promessa pessoal que a BitSophia faz diretamente a você e você reconhece que

nenhum direito é recebido da BitSophia, seus parceiros, distribuidores ou qualquer outro em função desta

promessa.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 69

7 Referências de bibliotecas

Esta seção contém referências das bibliotecas que compõem o pacote de instalação do BitVoicer

Server. A Biblioteca C# encapsula os serviços Windows Communication Foundation (WCF) expostos pelo

BitVoicer Server e fornece funcionalidades que facilitam a integração do servidor com outras aplicações

.NET. As Bibliotecas para Arduino implementam todos os serviços disponíveis no BitVoicer Server e, por

serem escritas em C/C++, podem ser facilmente portadas para outras plataformas de hardware.

7.1 Biblioteca C#

Esta biblioteca está localizada na pasta de instalação do BitVoicer Server (geralmente c:\Program

Files\BitSophia\BitVoicer Server).

Assembly: bvsi.dll

7.1.1 BitSophia.BitVoicerServer.Integration

O espaço de nome BitSophia.BitVoicerServer.Integration contém tipos que permitem integrar os

módulos Speech Manager e Data Forwarding do BitVoicer Server a outras aplicações .NET. As classes

SpeechMonitor e DataForwardingMonitor são as principais classes deste espaço de nome. Elas

encapsulam os serviços WCF dos módulos acima e fornecem funcionalidades adicionais que simplificam a

interação com estes módulos.

7.1.1.1 Classe DataForwardingMonitor

DESCRIÇÃO:

Encapsula e estende os serviços WCF do módulo Data Forwarding.

SINTAXE:

public class DataForwardingMonitor : IDisposable

CONSTRUTORES:

public DataForwardingMonitor(): inicializa uma nova instância da classe DataForwardingMonitor usando

configurações padrão.

public DataForwardingMonitor(double refreshInterval): inicializa uma nova instância da classe

DataForwardingMonitor usando o intervalo de atualização especificado.

Parâmetros:

double refreshInterval: o intervalo, em milissegundos, no qual o DataForwardingMonitor verifica

se há frames disponíveis no servidor. O valor mínimo para este parâmetro é 100 milissegundos.

public DataForwardingMonitor(int port): inicializa uma nova instância da classe

DataForwardingMonitor usando a porta especificada.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 70

Parâmetros:

int port: a porta na qual o serviço WCF DataForwarding está escutando.

public DataForwardingMonitor(double refreshInterval, int port): inicializa uma nova instância da

classe DataForwardingMonitor usando o intervalo de atualização e a porta especificada.

Parâmetros:

double refreshInterval: o intervalo, em milissegundos, no qual o DataForwardingMonitor verifica

se há frames disponíveis no servidor. O valor mínimo para este parâmetro é 100 milissegundos.

int port: a porta na qual o serviço WCF DataForwarding está escutando.

PROPRIEDADES

public bool IsRunning: obtém um valor indicando se o DataForwardingMonitor está checando se há

frames disponíveis no servidor.

public bool IsConnected: obtém um valor indicando se o DataForwardingMonitor está conectado ao

serviço DataForwarding.

public bool IsDisposed: obtém um valor indicando se o DataForwardingMonitor foi descartado.

public ISynchronizeInvoke SynchronizingObject: obtém ou define o objeto usado para combinar as

chamadas de manipulador de eventos que são emitidas quando ocorre o evento Faulted ou o evento

DataReceived.

Observações:

Por padrão, os eventos Faulted e DataReceived são disparados em uma thread da piscina de

threads do sistema. Quando estes eventos são manipulados por um componente Windows Form,

como um formulário, acessar esses componentes a partir de uma thread diferente pode resultar em

uma exceção ou pode simplesmente não funcionar. Para evitar isso, defina esta propriedade para

um componente Windows Form. Isso faz com que os métodos que manipulam estes eventos sejam

executados na mesma thread onde foram criados os componentes.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 71

MÉTODOS

public bool Bind(byte[] serialNumber): vincula a instancia atual do DataForwardingMonitor a um

dispositivo cliente.

Parâmetros:

byte[] serialNumber: array de bytes contendo o número de série do dispositivo a que se quer

vincular.

Valor de retorno:

bool: verdadeiro se a vinculação ocorrer com sucesso. Caso contrário, falso.

public void Connect(): conecta o DataForwardingMonitor ao serviço WCF DataForwarding.

public int CountAvailableFrames(): obtém o número de frames disponíveis nos dispositivos aos quais o

DataForwardingMonitor está vinculado.

Valor de retorno:

int: número de frames disponíveis. Caso não haja frames disponíveis ou o DataForwardingMonitor

não esteja vinculado a qualquer dispositivo, retorna zero.

public int CountActiveBindings(): obtém o número de dispositivos aos quais o DataForwardingMonitor

está vinculado.

Valor de retorno:

int: número de dispositivos aos quais o DataForwardingMonitor está vinculado. Caso o

DataForwardingMonitor não esteja vinculado a qualquer dispositivo, retorna zero.

public void Disconnect(): desconecta o DataForwardingMonitor do serviço WCF DataForwarding.

public void Dispose(): libera todos os recursos usados pelo DataForwardingMonitor. Sempre chame

este método antes de liberar a última referência a esta classe.

protected virtual void Dispose(bool disposing): libera os recursos não gerenciados usados pelo

DataForwardingMonitor e opcionalmente libera os recursos gerenciados.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 72

Parâmetros:

bool disposing: use verdadeiro para liberar recursos gerenciados e não gerenciados. Use falso

para liberar apenas recursos não gerenciados.

public Device[] GetSolutionDevices(): obtém uma array de dispositivos contendo todos os dispositivos

presentes na solução.

Valor de retorno:

Device[]: uma array do tipo BitSophia.BitVoicerServer.Integration.DataFwdService.Device

contendo todos os dispositivos presentes na solução ou uma array vazia se nenhum dispositivo for

encontrado.

public ForwardedData Receive(): recebe um frame do serviço WCF DataForwarding.

Valor de retorno:

ForwardedData: um objeto do tipo BitSophia.BitVoicerServer.Integration.DataFwdService

.ForwardedData contendo os dados do frame mais antigo (FIFO) enviado por um dispositivo

cliente. Se nenhum frame estiver disponível, retorna nulo.

public ForwardedData[] ReceiveAll(): recebe todos os frames disponíveis no serviço WCF

DataForwarding.

Valor de retorno:

ForwardedData[]: uma array do tipo BitSophia.BitVoicerServer.Integration.DataFwdService

.ForwardedData contendo todos os frames enviados por dispositivos clientes. Se nenhum frame

estiver disponível, retorna uma array vazia.

public bool Send(byte[] serialNumber, byte data): envia um byte para o dispositivo especificado.

Parâmetros:

byte[] serialNumber: array de bytes contendo o número de série do dispositivo para o qual se

deseja enviar o dado.

byte data: byte a ser empacotado em um frame do BVSP e enviado ao dispositivo.

Valor de retorno:

bool: verdadeiro se o dado for enviado com sucesso. Caso contrário, falso.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 73

bool Send(byte[] serialNumber, Int16 data): envia um Int16 para o dispositivo especificado.

Parâmetros:

byte[] serialNumber: array de bytes contendo o número de série do dispositivo para o qual se

deseja enviar o dado.

Int16 data: Int16 a ser empacotado em um frame do BVSP e enviado ao dispositivo.

Valor de retorno:

bool: verdadeiro se o dado for enviado com sucesso. Caso contrário, falso.

bool Send(byte[] serialNumber, int data): envia um int para o dispositivo especificado.

Parâmetros:

byte[] serialNumber: array de bytes contendo o número de série do dispositivo para o qual se

deseja enviar o dado.

int data: int a ser empacotado em um frame do BVSP e enviado ao dispositivo.

Valor de retorno:

bool: verdadeiro se o dado for enviado com sucesso. Caso contrário, falso.

bool Send(byte[] serialNumber, string data): envia uma string para o dispositivo especificado.

Parâmetros:

byte[] serialNumber: array de bytes contendo o número de série do dispositivo para o qual se

deseja enviar o dado.

string data: string a ser empacotada em um frame do BVSP e enviada ao dispositivo.

Valor de retorno:

bool: verdadeiro se o dado for enviado com sucesso. Caso contrário, falso.

bool Send(byte[] serialNumber, byte[] data): envia uma array de bytes para o dispositivo

especificado.

Parâmetros:

byte[] serialNumber: array de bytes contendo o número de série do dispositivo para o qual se

deseja enviar o dado.

byte[] data: array de bytes a ser empacotada em um frame do BVSP e enviada ao dispositivo.

Valor de retorno:

bool: verdadeiro se o dado for enviado com sucesso. Caso contrário, falso.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 74

bool Send(byte[] serialNumber, BVSPFrame frame): envia um frame do BVSP para o dispositivo

especificado.

Parâmetros:

byte[] serialNumber: array de bytes contendo o número de série do dispositivo para o qual se

deseja enviar o dado.

BVSPFrame data: objeto do tipo BitSophia.BitVoicerServer.Integration.DataFwdService.BVSPFrame

a ser enviado ao dispositivo.

Valor de retorno:

bool: verdadeiro se o dado for enviado com sucesso. Caso contrário, falso.

void Start(): inicia o monitoramento de frames disponíveis. O evento DataReceived só passa a ser

levantado depois que o DataForwardingMonitor é iniciado.

void Stop(): interrompe o monitoramento de frames disponíveis. Quando o DataForwardingMonitor está

parado o evento DataReceived não é levantado.

void Unbind(byte[] serialNumber): desvincula a instancia atual do DataForwardingMonitor de um

dispositivo cliente.

Parâmetros:

byte[] serialNumber: array de bytes contendo o número de série do dispositivo do qual se quer

desvincular.

EVENTOS

public event DataReceivedEventHandler DataReceived: ocorre quando um ou mais frames são

recebidos pelo DataForwardingMonitor. Este evento é levantado na piscina de threads do sistema.

public event FaultedEventHandler Faulted: ocorre quando uma exceção é lançada na thread que

monitora frames disponíveis. Este evento é levantado na piscina de threads do sistema.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 75

OBSERVAÇÕES:

A classe DataForwardingMonitor utiliza um timer interno para controlar com que frequência o

servidor deve ser consultado depois que o método Start() é chamado. O valor padrão do intervalo de

consulta é 500 milissegundos (meio segundo). Utilizar valores inferiores a este irá aumenta o consumo de

recursos do servidor.

Mesmo que a propriedade SynchronizingObject não seja nulo, os eventos DataReceived e Faulted

podem ser levantados depois que os métodos Stop() ou Dispose() forem chamados. Isso ocorre porque o

sinal para levantar estes eventos é sempre enfileirado para execução em uma thread da piscina de threads

do sistema. Uma forma de evitar isso é definir uma flag que indica aos manipuladores destes eventos que

eventos subsequentes devem ser ignorados.

A classe DataForwardingMonitor suporta vinculação simultânea com múltiplos dispositivos através

de múltiplas chamadas ao método Bind(byte[] serialNumber).

Sempre chame o método Dispose() antes de liberar a última referência a esta classe.

7.1.1.2 Classe DataReceivedEventArgs

DESCRIÇÃO:

Fornece informações sobre o evento DataReceived da classe DataForwardingMonitor.

SINTAXE:

public class DataReceivedEventArgs : EventArgs

CONSTRUTORES:

public DataReceivedEventArgs(): inicializa uma nova instância da classe DataReceivedEventArgs.

public DataReceivedEventArgs(ForwardedData[] forwardedData): inicializa uma nova instância da

classe DataReceivedEventArgs e atribui a array especificada à propriedade ForwardedData.

Parâmetros:

ForwardedData[] forwardedData: uma array do tipo BitSophia.BitVoicerServer.Integration

.DataFwdService.ForwardedData contendo todos os frames enviados por dispositivos clientes.

PROPRIEDADES:

public ForwardedData[] ForwardedData: obtém uma array do tipo BitSophia.BitVoicerServer.Integration

.DataFwdService.ForwardedData contendo todos os frames enviados por dispositivos clientes.

7.1.1.3 Classe ExtensionMethods

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 76

DESCRIÇÃO:

Fornece métodos de extensão para classes do espaço de nome

BitSophia.BitVoicerServer.Integration.

MÉTODOS:

internal static byte[] ToISO88591ByteArray(this string text): retorna uma array de bytes (ISO

8859-1) a partir de uma string de texto. Este método pode ser utilizado para criar a carga de objetos

BVSFrame cujo dado é do tipo string.

internal static string ToISO88591String(this byte[] byteArray): retorna uma string a partir de

uma array de bytes codificada usando o padrão ISO 8859-1. Este método pode ser utilizado para

obter a string contida na propriedade Payload de objetos BVSFrame.

public static byte PayloadToByte(this ForwardedData fwdData): retorna o byte contido em objetos

ForwardedData cujo dado é do tipo byte.

public static Int16 PayloadToInt16(this ForwardedData fwdData): retorna o Int16 contido em

objetos ForwardedData cujo dado é do tipo Int16.

public static int PayloadToInt32(this ForwardedData fwdData): retorna o int contido em objetos

ForwardedData cujo dado é do tipo int.

public static byte[] PayloadToBinary(this ForwardedData fwdData): retorna a array de bytes

contida em objetos ForwardedData cujo dado é do tipo Binary.

public static string PayloadToString(this ForwardedData fwdData): retorna a string contida em

objetos ForwardedData cujo dado é do tipo string.

7.1.1.4 Classe FaultedEventArgs

DESCRIÇÃO:

Fornece informações sobre o evento Faulted das classes DataForwardingMonitor e SpeechMonitor.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 77

SINTAXE:

public class FaultedEventArgs : EventArgs

CONSTRUTORES:

public FaultedEventArgs(): inicializa uma nova instância da classe FaultedEventArgs.

public FaultedEventArgs(Exception ex): inicializa uma nova instância da classe FaultedEventArgs e

atribui a exceção especificada à propriedade Exception.

Parâmetros:

Exception ex: um objeto do tipo System.Exception contendo informações sobre o erro que

disparou o evento Faulted das classes DataForwardingMonitor e SpeechMonitor.

PROPRIEDADES:

public Exception Exception: obtém a exceção que disparou o evento Faulted das classes

DataForwardingMonitor e SpeechMonitor.

7.1.1.5 Classe RecognitionResultEventArgs

DESCRIÇÃO:

Fornece informações sobre os eventos SpeechRecognized ou SpeechRejected da classe

SpeechMonitor.

SINTAXE:

public class RecognitionResultEventArgs : EventArgs

CONSTRUTORES:

public RecognitionResultEventArgs(): inicializa uma nova instância da classe

RecognitionResultEventArgs.

public RecognitionResultEventArgs (BVSRecognitionResult recognitionResult): inicializa uma nova

instância da classe RecognitionResultEventArgs e atribui o objeto BVSRecognitionResult

especificado à propriedade Result.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 78

Parâmetros:

BVSRecognitionResult recognitionResult: um objeto do tipo BitSophia.BitVoicerServer

.Integration.SpeechInterfaceService.BVSRecognitionResult contendo informações sobre os

eventos SpeechRecognized ou SpeechRejected da classe SpeechMonitor.

PROPRIEDADES:

public BVSRecognitionResult Result: obtém ou define o objeto do tipo BitSophia.BitVoicerServer

.Integration.SpeechInterfaceService.BVSRecognitionResult contendo informações sobre os eventos

SpeechRecognized ou SpeechRejected da classe SpeechMonitor.

7.1.1.6 Classe SpeechMonitor

DESCRIÇÃO:

Encapsula e estende os serviços WCF do módulo Speech Manager.

SINTAXE:

public class SpeechMonitor : IDisposable

CONSTRUTORES:

public SpeechMonitor(): inicializa uma nova instância da classe SpeechMonitor usando configurações

padrão.

public SpeechMonitor(double refreshInterval): inicializa uma nova instância da classe SpeechMonitor

usando o intervalo de atualização especificado.

Parâmetros:

double refreshInterval: o intervalo, em milissegundos, no qual o SpeechMonitor verifica se há

resultados de reconhecimento disponíveis no servidor. O valor mínimo para este parâmetro é 100

milissegundos.

public SpeechMonitor(int port): inicializa uma nova instância da classe SpeechMonitor usando a porta

especificada.

Parâmetros:

int port: a porta na qual o serviço WCF SpeechInterface está escutando.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 79

public SpeechMonitor(double refreshInterval, int port): inicializa uma nova instância da classe

SpeechMonitor usando o intervalo de atualização e a porta especificada.

Parâmetros:

double refreshInterval: o intervalo, em milissegundos, no qual o SpeechMonitor verifica se há

resultados de reconhecimento disponíveis no servidor. O valor mínimo para este parâmetro é 100

milissegundos.

int port: a porta na qual o serviço WCF SpeechInterface está escutando.

PROPRIEDADES

public bool IsRunning: obtém um valor indicando se o SpeechMonitor está checando se há resultados

de reconhecimento disponíveis no servidor.

public bool IsConnected: obtém um valor indicando se o SpeechMonitor está conectado ao serviço

SpeechInterface.

public bool IsDisposed: obtém um valor indicando se o SpeechMonitor foi descartado.

public ISynchronizeInvoke SynchronizingObject: obtém ou define o objeto usado para combinar as

chamadas de manipulador de eventos que são emitidas quando ocorrem os eventos Faulted,

SpeechRecognized e SpeechRejected.

Observações:

Por padrão, os eventos Faulted, SpeechRecognized e SpeechRejected são disparados em uma

thread da piscina de threads do sistema. Quando estes eventos são manipulados por um

componente Windows Form, como um formulário, acessar esses componentes a partir de uma

thread diferente pode resultar em uma exceção ou pode simplesmente não funcionar. Para evitar

isso, defina esta propriedade para um componente Windows Form. Isso faz com que os métodos

que manipulam estes eventos sejam executados na mesma thread onde foram criados os

componentes.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 80

MÉTODOS:

public void Connect(): conecta o SpeechMonitor ao serviço WCF SpeechInterface.

public void Disconnect(): desconecta o SpeechMonitor do serviço WCF SpeechInterface.

public void Dispose(): libera todos os recursos usados pelo SpeechMonitor. Sempre chame este

método antes de liberar a última referência a esta classe.

protected virtual void Dispose(bool disposing): libera os recursos não gerenciados usados pelo

SpeechMonitor e opcionalmente libera os recursos gerenciados.

Parâmetros:

bool disposing: use verdadeiro para liberar recursos gerenciados e não gerenciados. Use falso

para liberar apenas recursos não gerenciados.

public Device[] GetRecognitionClients(): obtém um array de clientes de reconhecimento ativos

(aqueles para os quais um motor de reconhecimento de fala foi atribuído).

Valor de retorno:

Device[]: uma array do tipo BitSophia.BitVoicerServer.Integration.SpeechInterfaceService.Device

contendo todos os dispositivos clientes para os quais um motor de reconhecimento de fala foi

atribuído ou uma array vazia se nenhum dispositivo for encontrado.

public BVSRecognitionResult[] GetRecognitionResults(): recupera todos os resultados de

reconhecimentos de fala disponíveis no serviço WCF SpeechInterface.

Valor de retorno:

BVSRecognitionResult[]: uma array do tipo BitSophia.BitVoicerServer.Integration

.SpeechInterfaceService.BVSRecognitionResult contendo todos os resultados de reconhecimento

disponíveis no servidor. Se nenhum resultado de reconhecimento estiver disponível, retorna uma

array vazia.

public SREStatus GetSREStatus(byte[] serialNumber): recupera o estado mais recente do SRE

atribuído ao dispositivo especificado.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 81

Parâmetros:

byte[] serialNumber: array de bytes contendo o número de série do dispositivo do qual se quer

obter o estado da SRE.

Valor de retorno:

SREStatus: um objeto do tipo BitSophia.BitVoicerServer.Integration.SpeechInterfaceService

.SREStatus contendo informações sobre o estado atual do SRE atribuído ao dispositivo. Se o

dispositivo especificado não possuir um SRE, retorna nulo.

public SREStatus GetSREStatus(int deviceID): recupera o estado mais recente do SRE atribuído ao

dispositivo especificado.

Parâmetros:

int deviceID: o ID na solução do dispositivo do qual se quer obter o estado da SRE.

Valor de retorno:

SREStatus: um objeto do tipo BitSophia.BitVoicerServer.Integration.SpeechInterfaceService

.SREStatus contendo informações sobre o estado atual do SRE atribuído ao dispositivo. Se o

dispositivo especificado não possuir um SRE, retorna nulo.

public void PlaySpeech(string text): sintetiza e reproduz o texto especificado utilizando o dispositivo

do tipo SystemSpeaker presente na solução. Se nenhum dispositivo do tipo SystemSpeaker for

encontrado, nenhum áudio é reproduzido.

Parâmetros:

string text: a sequência de caracteres a ser sintetizada.

public bool SendSpeech(string text, byte[] serialNumber): sintetiza o texto especificado e o envia

ao dispositivo cliente na forma de fluxo de áudio (seção 6.3.2 Modo fluxo).

Parâmetros:

string text: a sequência de caracteres a ser sintetizada.

byte[] serialNumber: array de bytes contendo o número de série do dispositivo para o qual se

deseja enviar o áudio sintetizado.

Valor de retorno:

bool: verdadeiro se o dispositivo foi encontrado e o áudio enfileirado para transmissão. Caso

contrário, falso.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 82

public void Start(): inicia o monitoramento de resultados de reconhecimento disponíveis. Os eventos

SpeechRecognized e SpeechRejected só passam a ser levantados depois que o SpeechMonitor é

iniciado.

public void Stop(): interrompe o monitoramento de resultados de reconhecimento disponíveis. Quando

o SpeechMonitor está parado os eventos SpeechRecognized e SpeechRejected não são levantados.

EVENTOS:

public event FaultedEventHandler Faulted: ocorre quando uma exceção é lançada na thread que

monitora resultados de reconhecimentos disponíveis. Este evento é levantado na piscina de threads

do sistema.

public event RecognitionResultEventHandler SpeechRecognized: ocorre quando um ou mais

resultados de reconhecimento válidos (seção 3.1.3.2 Filtros de validação) são identificados pelo

SpeechMonitor. Este evento é levantado na piscina de threads do sistema.

public event RecognitionResultEventHandler SpeechRejected: ocorre quando um ou mais resultados

de reconhecimento inválidos (seção 3.1.3.2 Filtros de validação) são identificados pelo

SpeechMonitor. Este evento é levantado na piscina de threads do sistema.

OBSERVAÇÕES:

A classe SpeechMonitor utiliza um timer interno para controlar com que frequência o servidor deve

ser consultado depois que o método Start() é chamado. O valor padrão do intervalo de consulta é 500

milissegundos (meio segundo). Utilizar valores inferiores a este irá aumenta o consumo de recursos do

servidor.

Mesmo que a propriedade SynchronizingObject não seja nulo, os eventos Faulted,

SpeechRecognized e SpeechRejected podem ser levantados depois que os métodos Stop() ou Dispose()

forem chamados. Isso ocorre porque o sinal para levantar estes eventos é sempre enfileirado para

execução em uma thread da piscina de threads do sistema. Uma forma de evitar isso é definir uma flag que

indica aos manipuladores destes eventos que eventos subsequentes devem ser ignorados.

Sempre chame o método Dispose () antes de liberar a última referência a esta classe.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 83

7.1.1.7 Delegado DataReceivedEventHandler

DESCRIÇÃO:

Representa o método que irá manipular o evento DataReceived da classe DataForwardingMonitor.

SINTAXE:

public delegate void DataReceivedEventHandler( object sender, DataReceivedEventArgs e)

7.1.1.8 Delegado FaultedEventHandler

DESCRIÇÃO:

Representa o método que irá manipular o evento Faulted das classes DataForwardingMonitor e

SpeechMonitor.

SINTAXE:

public delegate void FaultedEventHandler( object sender, FaultedEventArgs e)

7.1.1.9 Delegado RecognitionResultEventHandler

DESCRIÇÃO:

Representa o método que irá manipular os eventos SpeechRecognized e SpeechRejected da classe

SpeechMonitor.

SINTAXE:

public delegate void RecognitionResultEventHandler( object sender, RecognitionResultEventArgs e)

7.1.1.10 Enumerador RejectionReason

DESCRIÇÃO:

Especifica as razões pelas quais um reconhecimento de fala pode ser considerado inválido (seção

3.1.3.2 Filtros de validação).

SINTAXE:

public enum RejectionReason

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 84

MEMBROS:

None Nenhuma razão para rejeitar o reconhecimento. Reconhecimento válido.

LowConfidenceLevel Baixo nível de confiança.

LowAudioLevel Baixo nível de áudio.

InLatencyPeriod Dentro do período de latência.

ActWordNotRecognized A palavra de ativação não foi identificada.

7.1.2 BitSophia.BitVoicerServer.Integration.SpeechInterfaceService

O espaço de nome BitSophia.BitVoicerServer.Integration.SpeechInterfaceService contém os tipos

gerados a partir dos metadados expostos pelo serviço SpeechInterface (seção 3.1.3.5 Serviço WCF do

módulo Speech Manager).

7.1.2.1 Classe BVSRecognitionResult

DESCRIÇÃO:

Contém informações detalhadas sobre reconhecimentos de fala realizados por motores de

reconhecimento de fala.

SINTAXE:

[SerializableAttribute()] public partial class BVSRecognitionResult : IExtensibleDataObject, INotifyPropertyChanged PROPRIEDADES:

public DateTime ActWordRecognitionTime: obtém ou define o momento em que a palavra de ativação foi

reconhecida.

public int AudioLevel: obtém ou define o nível de áudio (volume de 0 a 100) no momento do

reconhecimento.

public double AudioLevelAvg: obtém ou define a média do nível de áudio no momento do

reconhecimento.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 85

public int AudioLevelTrigger: obtém ou define o nível de áudio (volume de 0 a 100) que iniciou o

período ativado por nível de áudio.

public double AudioLevelTriggerAvg: obtém ou define a média do nível de áudio no momento que o

período ativado por nível de áudio se iniciou.

public float ConfidenceLevel: obtém ou define um valor (0 a 1), estimado pelo motor de

reconhecimento de fala, que representa a probabilidade de um texto reconhecido corresponder ao

sinal de áudio captado.

public int InputDeviceID: obtém ou define o ID do dispositivo que captou o fluxo de áudio.

public int InputDeviceLocationID: obtém ou define o ID da localização do dispositivo que captou o

fluxo de áudio.

public string InputDeviceName: obtém ou define o nome do dispositivo que captou o fluxo de áudio.

public byte[] InputDeviceSerialNumber: obtém ou define o número de série do dispositivo que captou o

fluxo de áudio.

public bool IsActivationWordOnly: obtém ou define um valor que indica se o texto reconhecido

corresponde apenas a uma palavra de ativação (verdadeiro) ou não (falso).

public DateTime LatencyStartTime: obtém ou define o momento em que o período de latência se iniciou.

public DateTime RecognitionTime: obtém ou define o momento em que se deu o reconhecimento de

fala.

public int RejectionReason: obtém ou define o razão pela qual o reconhecimento foi rejeitado (seção

7.1.1.10 Enumerador RejectionReason).

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 86

public string Text: obtém ou define o texto reconhecido pelo motor de reconhecimento de fala.

7.1.2.2 Classe Command

DESCRIÇÃO:

Representa um comando em uma solução do BitVoicer Server. Este comando é executado pelo

servidor em resposta a eventos de dispositivo ou reconhecimentos válidos (seção 4.1.2.4 Pistas).

SINTAXE:

[SerializableAttribute()] public partial class Command : BitSophia.BitVoicerServer.Integration.SpeechInterfaceService.SolutionObject

PROPRIEDADES:

public byte Action: obtém ou define qual ação deverá ser tomada pelo comando:

0 = RunExecutable (rodar executável)

1 = PlayAudio (reproduzir áudio)

2 = SendData (enviar dados)

public byte AudioSource: obtém ou define qual é a fonte de áudio de comandos PlayAudio:

0 = Synthesizer (sintetizador)

1 = WaveFile (arquivo .wav)

public int BinaryDataID: obtém ou define o ID do objeto Binary Data que contém os dados enviados por

comandos SendData.

public string Data: obtém ou define a representação textual dos dados enviados por comandos

SendData (somente quando o tipo de dados não for Binary).

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 87

public byte DataType: obtém ou define o tipo de dado enviado por comandos SendData:

0 = NA

1 = Byte

3 = Int16

5 = Int32

7 = Binary

8 = String

public bool LocationSpecific: obtém ou define se o comando deve ser executado somente quando o

dispositivo que captar o áudio estiver na mesma localização do dispositivo alvo do comando (seção

4.1.5 Comandos).

public string Parameters: obtém ou define os parâmetros utilizados na execução de comandos

RunExecutable.

public string PlayFilePath: obtém ou define o caminho completo do arquivo .wav reproduzido por

comandos PlayAudio (somente quando a fonte de áudio for WaveFile).

public string RunFilePath: obtém ou define o caminho completo do arquivo a ser executado por

commandos RunExecutable.

public string SynthesizedText: obtém ou define o texto a ser sintetizado por comandos PlayAudio

(somente quando a fonte de áudio for Synthesizer).

public int TargetDeviceID: obtém ou define o ID do dispositivo alvo do comando.

public int TargetDeviceNodeID: obtém ou define o ID do nó do dispositivo alvo do comando.

7.1.2.3 Classe Device

DESCRIÇÃO:

Representa um dispositivo em uma solução do BitVoicer Server.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 88

SINTAXE:

[SerializableAttribute()] public partial class Device : BitSophia.BitVoicerServer.Integration.SpeechInterfaceService.SolutionObject

PROPRIEDADES:

public Command ActivatedPeriodEndedCue: obtém ou define o comando a ser executado quando o

período ativado (seção 3.1.3.2 Filtros de validação) do dispositivo se encerra.

public Command ActivatedPeriodStartedCue: obtém ou define o comando a ser executado quando o

período ativado (seção 3.1.3.2 Filtros de validação) do dispositivo se inicia.

public int CommInterface: obtém ou define qual a interface de comunicação utilizada pelo dispositivo:

0 = NA

1 = SerialCOM

2 = TCPIP

public int DeviceType: obtém ou define o tipo do dispositivo:

0 = Input

1 = Output

2 = Mixed

3 = SystemMic

4 = SystemSpeaker

public bool Disabled: obtém ou define um valor que indica se o dispositivo está desabilitado (verdadeiro)

ou não (falso).

public bool EnableActivatedPeriodEndedCue: obtém ou define um valor que indica se o comando

relativo à pista “Fim do período ativado” (seção 4.1.2.4 Pistas) deve ser executado ou não.

public bool EnableActivatedPeriodStartedCue: obtém ou define um valor que indica se o comando

relativo à pista “Início do período ativado” (seção 4.1.2.4 Pistas) deve ser executado ou não.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 89

public bool EnableSpeechRejectedCue: obtém ou define um valor que indica se o comando relativo à

pista “Fala rejeitada” (seção 4.1.2.4 Pistas) deve ser executado ou não.

public int InputBufferSize: obtém ou define o tamanho (em bytes) do buffer de entrada da interface de

comunicação usada pelo dispositivo.

public int LocationID: obtém ou define o ID do objeto Location associado ao dispositivo.

public int MaxStreamSegmentSize: obtém ou define o tamanho máximo do segmento (em bytes) de

dados binários que o BitVoicer Server envia ao dispositivo cliente a cada operação de envio.

public byte MinimumAudioLevel: obtém ou define o nível mínimo de áudio (volume de 0 a 100) que deve

ser atingido para que reconhecimentos feitos através deste dispositivo sejam considerados válidos

(seção 3.1.3.2 Filtros de validação).

public Dictionary<int, DeviceNode> Nodes: obtém ou define o dicionário de nós presentes no

dispositivo.

public int OutputBufferSize: obtém ou define o tamanho (em bytes) do buffer de saída da interface de

comunicação usada pelo dispositivo.

public int OutputProtocol: obtém ou define o protocolo utilizado pelo dispositivo para enviar dados:

0 = None

1 = BitVoicerServerProtocol

public int OutputRate: obtém ou define a quantidade máxima de bytes por segundo que o BitVoicer

Server pode enviar para o dispositivo.

public byte[] SerialNumber: obtém ou define o número de série do dispositivo (codificação UTF-8).

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 90

public SerialSettings SerialSettings: obtém ou define o objeto BitSophia.BitVoicerServer

.Integration.SpeechInterfaceService.SerialSettings que contém as configurações da porta serial

utilizada pelo dispositivo.

public Command SpeechRejectedCue: obtém ou define o comando a ser executado quando uma fala

captada pelo dispositivo é rejeitada (seção 3.1.3.2 Filtros de validação).

public int SynthesizerVolume: obtém ou define o volume (1 a 100) do áudio gerado pelo sintetizador

quando for necessário enviar áudio sintetizado para o dispositivo.

public float SystemMicLevel: obtém ou define o nível (0 a 1) do microfone a ser selecionado nas

configurações do Windows quando o tipo do dispositivo for SystemMic.

public float SystemSpeakerLevel: obtém ou define o nível (0 a 1) do alto-falante a ser selecionado nas

configurações do Windows quando o tipo do dispositivo for SystemSpeaker.

public TCPIPSettings TCPIPSettings: obtém ou define o objeto BitSophia.BitVoicerServer

.Integration.SpeechInterfaceService.TCPIPSettings que contém as configurações TCP/IP utilizadas

pelo dispositivo.

7.1.2.4 Classe DeviceNode

DESCRIÇÃO:

Representa um nó de dispositivo em uma solução do BitVoicer Server.

SINTAXE:

[SerializableAttribute()] public partial class DeviceNode : BitSophia.BitVoicerServer.Integration.SpeechInterfaceService.SolutionObject

PROPRIEDADES:

public bool Disabled: obtém ou define um valor que indica se o nó está desabilitado (verdadeiro) ou não

(falso).

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 91

public int LocationID: obtém ou define o ID do objeto Location associado ao nó.

7.1.2.5 Classe SerialSettings

DESCRIÇÃO:

Contém as configurações da porta serial utilizada por dispositivos cuja interface de comunicação é

SerialCOM.

SINTAXE:

[System.SerializableAttribute()] public partial class SerialSettings : IExtensibleDataObject, INotifyPropertyChanged

PROPRIEDADES:

public int Baud: obtém ou define a taxa de transferência (bits por segundo) da porta serial.

public int DataBits: obtém ou define o comprimento padrão dos bits de dados por byte.

public bool DtrEnabled: obtém ou define se o sinal DTR (Data Terminal Ready) deve ser ativado na

porta serial.

public bool DoNotLock: obtém ou define se o BitVoicer Server deve manter a porta desbloqueada sempre

que ela estiver disponível. Se esta propriedade for verdadeiro, o servidor só irá abrir a porta quando

precisar enviar dados a ela e irá libera-la assim que os dados forem enviados.

public int FlowControl: obtém ou define o protocolo para controle de transmissão de dados:

0 = None

1 = XOnXOff

2 = RequestToSend

3 = RequestToSendXOnXOff

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 92

public int Parity: obtém ou define o protocolo de controle de paridade:

0 = None

1 = Odd

2 = Even

3 = Mark

4 = Space

public string PortName: obtém ou define o nome da porta serial (ex.: COM3, COM4, COM201)

public bool RtsEnabled: obtém ou define se o sinal RTS (Request to Send) deve ser ativado na porta

serial.

public int StopBits: obtém ou define o número padrão de bits de parada por byte:

0 = None

1 = One

2 = Two

3 = OnePointFive

7.1.2.6 Classe SolutionObject

DESCRIÇÃO:

Representa a classe base dos principais objetos de solução do BitVoicer Server (seção 4.1 Objetos

de solução).

SINTAXE:

[SerializableAttribute()] public partial class SolutionObject : IExtensibleDataObject, INotifyPropertyChanged

PROPRIEDADES:

public int ID: obtém ou define o identificador interno do objeto de solução.

public string Name: obtém ou define o nome do objeto de solução.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 93

7.1.2.7 Classe SpeechInterfaceClient

DESCRIÇÃO:

Cria um proxy WCF a partir dos metadados expostos pelo serviço SpeechInterface (seção 3.1.3.5

Serviço WCF do módulo Speech Manager).

SINTAXE:

public partial class SpeechInterfaceClient : System.ServiceModel .ClientBase<BitSophia.BitVoicerServer.Integration.SpeechInterfaceService .ISpeechInterface>, BitSophia.BitVoicerServer.Integration.SpeechInterfaceService.ISpeechInterface

MÉTODOS:

public Device[] GetRecognitionClients(): obtém um array de clientes de reconhecimento ativos

(aqueles para os quais um motor de reconhecimento de fala foi atribuído).

Valor de retorno:

Device[]: uma array do tipo BitSophia.BitVoicerServer.Integration.SpeechInterfaceService.Device

contendo todos os dispositivos clientes para os quais um motor de reconhecimento de fala foi

atribuído ou uma array vazia se nenhum dispositivo for encontrado.

public BVSRecognitionResult[] GetRecognitionResults(): recupera todos os resultados de

reconhecimentos de fala disponíveis no serviço WCF SpeechInterface.

Valor de retorno:

BVSRecognitionResult[]: uma array do tipo BitSophia.BitVoicerServer.Integration

.SpeechInterfaceService.BVSRecognitionResult contendo todos os resultados de reconhecimento

disponíveis no servidor. Se nenhum resultado de reconhecimento estiver disponível, retorna uma

array vazia.

public SREStatus GetSREStatusByID(int deviceID): recupera o estado mais recente do SRE atribuído

ao dispositivo especificado.

Parâmetros:

int deviceID: o ID na solução do dispositivo do qual se quer obter o estado da SRE.

Valor de retorno:

SREStatus: um objeto do tipo BitSophia.BitVoicerServer.Integration.SpeechInterfaceService

.SREStatus contendo informações sobre o estado atual do SRE atribuído ao dispositivo. Se o

dispositivo especificado não possuir um SRE, retorna nulo.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 94

public SREStatus GetSREStatusBySN(byte[] serialNumber): recupera o estado mais recente do SRE

atribuído ao dispositivo especificado.

Parâmetros:

byte[] serialNumber: array de bytes contendo o número de série do dispositivo do qual se quer

obter o estado da SRE.

Valor de retorno:

SREStatus: um objeto do tipo BitSophia.BitVoicerServer.Integration.SpeechInterfaceService

.SREStatus contendo informações sobre o estado atual do SRE atribuído ao dispositivo. Se o

dispositivo especificado não possuir um SRE, retorna nulo.

public void PlaySpeech(string text): sintetiza e reproduz o texto especificado utilizando o dispositivo

do tipo SystemSpeaker presente na solução. Se nenhum dispositivo do tipo SystemSpeaker for

encontrado, nenhum áudio é reproduzido.

Parâmetros:

string text: a sequência de caracteres a ser sintetizada.

public bool SendSpeech(string text, byte[] serialNumber): sintetiza o texto especificado e o envia

ao dispositivo cliente na forma de fluxo de áudio (seção 6.3.2 Modo fluxo).

Parâmetros:

string text: a sequência de caracteres a ser sintetizada.

byte[] serialNumber: array de bytes contendo o número de série do dispositivo para o qual se

deseja enviar o áudio sintetizado.

Valor de retorno:

bool: verdadeiro se o dispositivo foi encontrado e o áudio enfileirado para transmissão. Caso

contrário, falso.

7.1.2.8 Classe SREStatus

DESCRIÇÃO:

Contém informações sobre o estado de motores de reconhecimento de fala (Speech Recognition

Engine - SRE).

SINTAXE:

[SerializableAttribute()] public partial class SREStatus : IExtensibleDataObject, INotifyPropertyChanged

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 95

PROPRIEDADES:

public int AudioLevel: obtém ou define o nível de áudio (volume de 0 a 100) mais recente medido pelo

SRE.

public double AudioLevelAvg: obtém ou define a média do nível de áudio mais recente calculado pelo

SRE.

public bool IsInAudioLevelActivatedPeriod: obtém ou define se o SRE encontra-se dentro do período

ativado por nível de áudio.

public bool IsInActWordActivatedPeriod: obtém ou define se o SRE encontra-se dentro do período

ativado por palavra de ativação.

7.1.2.9 Classe TCPIPSettings

DESCRIÇÃO:

Contém as configurações TCP/IP utilizadas por dispositivos cuja interface de comunicação é TCPIP.

SINTAXE:

[SerializableAttribute()] public partial class TCPIPSettings : IExtensibleDataObject, INotifyPropertyChanged

PROPRIEDADES:

public int InactivityTimeout: obtém ou define o tempo limite (em segundos) que um dispositivo, cuja

interface de comunicação é TCP/IP, pode permanecer inativo (sem troca de dados) antes que a

conexão seja encerrada e todos os recursos associados a ela sejam liberados.

public byte[] IPAddress: obtém ou define o endereço IP (IPv4) de um dispositivo cliente. Cada byte da

array corresponde a um octeto do endereço IP.

public int TCPPort: obtém ou define a porta TCP utilizada pelo dispositivo. Esta propriedade não é

utilizada atualmente pelo BitVoicer Server.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 96

7.1.3 BitSophia.BitVoicerServer.Integration.DataFwdService

O espaço de nome BitSophia.BitVoicerServer.Integration.DataFwdService contém os tipos gerados

a partir dos metadados expostos pelo serviço DataForwarding (seção 3.1.5 Data Forwarding).

7.1.3.1 Classe BVSPFrame

DESCRIÇÃO:

Representa um frame (quadro) do tipo “Transferência de Dados” do BVSP (seção 6.6 Estrutura do

frame do BitVoicer Server Protocol).

SINTAXE:

[SerializableAttribute()] public partial class BVSPFrame : IExtensibleDataObject, INotifyPropertyChanged

PROPRIEDADES:

public int DataLength: obtém ou define a quantidade de bytes contidos na propriedade Payload.

public int DataType: obtém ou define o tipo de dado contido na propriedade Payload:

1 = Byte

3 = Int16

5 = Int32

7 = Binary

8 = String

public byte[] Payload: obtém ou define a array de bytes que contém os dados do tipo especificado na

propriedade DataType.

7.1.3.2 Classe Command

DESCRIÇÃO:

Representa um comando em uma solução do BitVoicer Server. Este comando é executado pelo

servidor em resposta a eventos de dispositivo ou reconhecimentos válidos (seção 4.1.2.4 Pistas).

SINTAXE:

[SerializableAttribute()] public partial class Command : BitSophia.BitVoicerServer.Integration.DataFwdService.SolutionObject

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 97

PROPRIEDADES:

public byte Action: obtém ou define qual ação deverá ser tomada pelo comando:

0 = RunExecutable (rodar executável)

1 = PlayAudio (reproduzir áudio)

2 = SendData (enviar dados)

public byte AudioSource: obtém ou define qual é a fonte de áudio de comandos PlayAudio:

0 = Synthesizer (sintetizador)

1 = WaveFile (arquivo .wav)

public int BinaryDataID: obtém ou define o ID do objeto Binary Data que contém os dados enviados por

comandos SendData.

public string Data: obtém ou define a representação textual dos dados enviados por comandos

SendData (somente quando o tipo de dados não for Binary).

public byte DataType: obtém ou define o tipo de dado enviado por comandos SendData:

0 = NA

1 = Byte

3 = Int16

5 = Int32

7 = Binary

8 = String

public bool LocationSpecific: obtém ou define se o comando deve ser executado somente quando o

dispositivo que captar o áudio estiver na mesma localização do dispositivo alvo do comando (seção

4.1.5 Comandos).

public string Parameters: obtém ou define os parâmetros utilizados na execução de comandos

RunExecutable.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 98

public string PlayFilePath: obtém ou define o caminho completo do arquivo .wav reproduzido por

comandos PlayAudio (somente quando a fonte de áudio for WaveFile).

public string RunFilePath: obtém ou define o caminho completo do arquivo a ser executado por

commandos RunExecutable.

public string SynthesizedText: obtém ou define o texto a ser sintetizado por comandos PlayAudio

(somente quando a fonte de áudio for Synthesizer).

public int TargetDeviceID: obtém ou define o ID do dispositivo alvo do comando.

public int TargetDeviceNodeID: obtém ou define o ID do nó do dispositivo alvo do comando.

7.1.3.3 Classe DataForwardingClient

DESCRIÇÃO:

Cria um proxy WCF a partir dos metadados expostos pelo serviço DataForwarding (seção 3.1.5

Data Forwarding).

SINTAXE:

public partial class DataForwardingClient : System.ServiceModel .ClientBase<BitSophia.BitVoicerServer.Integration.DataFwdService .IDataForwarding>, BitSophia.BitVoicerServer.Integration.DataFwdService.IDataForwarding

MÉTODOS:

public bool Bind(byte[] serialNumber): vincula a instancia atual da classe DataForwardingClient a um

dispositivo cliente.

Parâmetros:

byte[] serialNumber: array de bytes contendo o número de série do dispositivo a que se quer

vincular.

Valor de retorno:

bool: verdadeiro se a vinculação ocorrer com sucesso. Caso contrário, falso.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 99

public int CountActiveBindings(): obtém o número de dispositivos aos quais o DataForwardingClient

está vinculado.

Valor de retorno:

int: número de dispositivos aos quais o DataForwardingClient está vinculado. Caso o

DataForwardingClient não esteja vinculado a qualquer dispositivo, retorna zero.

public int CountAvailableFrames(): obtém o número de frames disponíveis nos dispositivos aos quais o

DataForwardingClient está vinculado.

Valor de retorno:

int: número de frames disponíveis. Caso não haja frames disponíveis ou o DataForwardingClient

não esteja vinculado a qualquer dispositivo, retorna zero.

public Device[] GetSolutionDevices(): obtém uma array de dispositivos contendo todos os dispositivos

presentes na solução.

Valor de retorno:

Device[]: uma array do tipo BitSophia.BitVoicerServer.Integration.DataFwdService.Device

contendo todos os dispositivos presentes na solução ou uma array vazia se nenhum dispositivo for

encontrado.

public ForwardedData Receive(): recebe um frame do serviço WCF DataForwarding.

Valor de retorno:

ForwardedData: um objeto do tipo BitSophia.BitVoicerServer.Integration.DataFwdService

.ForwardedData contendo os dados do frame mais antigo (FIFO) enviado por um dispositivo

cliente. Se nenhum frame estiver disponível, retorna nulo.

public ForwardedData[] ReceiveAll(): recebe todos os frames disponíveis no serviço WCF

DataForwarding.

Valor de retorno:

ForwardedData[]: uma array do tipo BitSophia.BitVoicerServer.Integration.DataFwdService

.ForwardedData contendo todos os frames enviados por dispositivos clientes. Se nenhum frame

estiver disponível, retorna uma array vazia.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 100

public bool Send(byte[] serialNumber, BVSPFrame frame): envia um objeto do tipo BitSophia

.BitVoicerServer.Integration.DataFwdService.BVSPFrame para o dispositivo especificado.

Parâmetros:

byte[] serialNumber: array de bytes contendo o número de série do dispositivo para o qual se

deseja enviar o dado.

BVSPFrame data: objeto do tipo BitSophia.BitVoicerServer.Integration.DataFwdService.BVSPFrame

a ser enviado ao dispositivo.

Valor de retorno:

bool: verdadeiro se o dado for enviado com sucesso. Caso contrário, falso.

public void Unbind(byte[] serialNumber): desvincula a instancia atual do DataForwardingClient de um

dispositivo cliente.

Parâmetros:

byte[] serialNumber: array de bytes contendo o número de série do dispositivo do qual se quer

desvincular.

7.1.3.4 Classe Device

DESCRIÇÃO:

Representa um dispositivo em uma solução do BitVoicer Server.

SINTAXE:

[SerializableAttribute()] public partial class Device : BitSophia.BitVoicerServer.Integration.DataFwdService.SolutionObject

PROPRIEDADES:

public Command ActivatedPeriodEndedCue: obtém ou define o comando a ser executado quando o

período ativado (seção 3.1.3.2 Filtros de validação) do dispositivo se encerra.

public Command ActivatedPeriodStartedCue: obtém ou define o comando a ser executado quando o

período ativado (seção 3.1.3.2 Filtros de validação) do dispositivo se inicia.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 101

public int CommInterface: obtém ou define qual a interface de comunicação utilizada pelo dispositivo:

0 = NA

1 = SerialCOM

2 = TCPIP

public int DeviceType: obtém ou define o tipo do dispositivo:

0 = Input

1 = Output

2 = Mixed

3 = SystemMic

4 = SystemSpeaker

public bool Disabled: obtém ou define um valor que indica se o dispositivo está desabilitado (verdadeiro)

ou não (falso).

public bool EnableActivatedPeriodEndedCue: obtém ou define um valor que indica se o comando

relativo à pista “Fim do período ativado” (seção 4.1.2.4 Pistas) deve ser executado ou não.

public bool EnableActivatedPeriodStartedCue: obtém ou define um valor que indica se o comando

relativo à pista “Início do período ativado” (seção 4.1.2.4 Pistas) deve ser executado ou não.

public bool EnableSpeechRejectedCue: obtém ou define um valor que indica se o comando relativo à

pista “Fala rejeitada” (seção 4.1.2.4 Pistas) deve ser executado ou não.

public int InputBufferSize: obtém ou define o tamanho (em bytes) do buffer de entrada da interface de

comunicação usada pelo dispositivo.

public int LocationID: obtém ou define o ID do objeto Location associado ao dispositivo.

public int MaxStreamSegmentSize: obtém ou define o tamanho máximo do segmento (em bytes) de

dados binários que o BitVoicer Server envia ao dispositivo cliente a cada operação de envio.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 102

public byte MinimumAudioLevel: obtém ou define o nível mínimo de áudio (volume de 0 a 100) que deve

ser atingido para que reconhecimentos feitos através deste dispositivo sejam considerados válidos

(seção 3.1.3.2 Filtros de validação).

public Dictionary<int, DeviceNode> Nodes: obtém ou define o dicionário de nós presentes no

dispositivo.

public int OutputBufferSize: obtém ou define o tamanho (em bytes) do buffer de saída da interface de

comunicação usada pelo dispositivo.

public int OutputProtocol: obtém ou define o protocolo utilizado pelo dispositivo para enviar dados:

0 = None

1 = BitVoicerServerProtocol

public int OutputRate: obtém ou define a quantidade máxima de bytes por segundo que o BitVoicer

Server pode enviar para o dispositivo.

public byte[] SerialNumber: obtém ou define o número de série do dispositivo (codificação UTF-8).

public SerialSettings SerialSettings: obtém ou define o objeto BitSophia.BitVoicerServer

.Integration.DataFwdService.SerialSettings que contém as configurações da porta serial utilizada

pelo dispositivo.

public Command SpeechRejectedCue: obtém ou define o comando a ser executado quando uma fala

captada pelo dispositivo é rejeitada (seção 3.1.3.2 Filtros de validação).

public int SynthesizerVolume: obtém ou define o volume (1 a 100) do áudio gerado pelo sintetizador

quando for necessário enviar áudio sintetizado para o dispositivo.

public float SystemMicLevel: obtém ou define o nível (0 a 1) do microfone a ser selecionado nas

configurações do Windows quando o tipo do dispositivo for SystemMic.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 103

public float SystemSpeakerLevel: obtém ou define o nível (0 a 1) do alto-falante a ser selecionado nas

configurações do Windows quando o tipo do dispositivo for SystemSpeaker.

public TCPIPSettings TCPIPSettings: obtém ou define o objeto BitSophia.BitVoicerServer

.Integration.DataFwdService.TCPIPSettings que contém as configurações TCP/IP utilizadas pelo

dispositivo.

7.1.3.5 Classe Device Node

DESCRIÇÃO:

Representa um nó de dispositivo em uma solução do BitVoicer Server.

SINTAXE:

[SerializableAttribute()] public partial class DeviceNode : BitSophia.BitVoicerServer.Integration.DataFwdService.SolutionObject

PROPRIEDADES:

public bool Disabled: obtém ou define um valor que indica se o nó está desabilitado (verdadeiro) ou não

(falso).

public int LocationID: obtém ou define o ID do objeto Location associado ao nó.

7.1.3.6 Classe ForwardedData

DESCRIÇÃO:

Representa um frame (quadro) do BVSP (seção 6.6 Estrutura do frame do BitVoicer Server

Protocol) que também contém informações sobre o dispositivo que enviou o frame.

SINTAXE:

[SerializableAttribute()] public partial class ForwardedData : BitSophia.BitVoicerServer.Integration.DataFwdService.BVSPFrame

PROPRIEDADES:

public string SourceDeviceName: obtém ou define o nome do dispositivo que enviou o frame.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 104

public byte[] SourceDeviceSerialNumber: obtém ou define o número de série do dispositivo que enviou

o frame.

7.1.3.7 Classe SerialSettings

DESCRIÇÃO:

Contém as configurações da porta serial utilizada por dispositivos cuja interface de comunicação é

SerialCOM.

SINTAXE:

[System.SerializableAttribute()] public partial class SerialSettings : IExtensibleDataObject, INotifyPropertyChanged

PROPRIEDADES:

public int Baud: obtém ou define a taxa de transferência (bits por segundo) da porta serial.

public int DataBits: obtém ou define o comprimento padrão dos bits de dados por byte.

public bool DtrEnabled: obtém ou define se o sinal DTR (Data Terminal Ready) deve ser ativado na

porta serial.

public bool DoNotLock: obtém ou define se o BitVoicer Server deve manter a porta desbloqueada sempre

que ela estiver disponível. Se esta propriedade for verdadeiro, o servidor só irá abrir a porta quando

precisar enviar dados a ela e irá libera-la assim que os dados forem enviados.

public int FlowControl: obtém ou define o protocolo para controle de transmissão de dados:

0 = None

1 = XOnXOff

2 = RequestToSend

3 = RequestToSendXOnXOff

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 105

public int Parity: obtém ou define o protocolo de controle de paridade:

0 = None

1 = Odd

2 = Even

3 = Mark

4 = Space

public string PortName: obtém ou define o nome da porta serial (ex.: COM3, COM4, COM201)

public bool RtsEnabled: obtém ou define se o sinal RTS (Request to Send) deve ser ativado na porta

serial.

public int StopBits: obtém ou define o número padrão de bits de parada por byte:

0 = None

1 = One

2 = Two

3 = OnePointFive

7.1.3.8 Classe SolutionObject

DESCRIÇÃO:

Representa a classe base dos principais objetos de solução do BitVoicer Server (seção 4.1 Objetos

de solução).

SINTAXE:

[SerializableAttribute()] public partial class SolutionObject : IExtensibleDataObject, INotifyPropertyChanged

PROPRIEDADES:

public int ID: obtém ou define o identificador interno do objeto de solução.

public string Name: obtém ou define o nome do objeto de solução.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 106

7.1.3.9 Classe TCPIPSettings

DESCRIÇÃO:

Contém as configurações TCP/IP utilizadas por dispositivos cuja interface de comunicação é TCPIP.

SINTAXE:

[SerializableAttribute()] public partial class TCPIPSettings : IExtensibleDataObject, INotifyPropertyChanged

PROPRIEDADES:

public int InactivityTimeout: obtém ou define o tempo limite (em segundos) que um dispositivo, cuja

interface de comunicação é TCP/IP, pode permanecer inativo (sem troca de dados) antes que a

conexão seja encerrada e todos os recursos associados a ela sejam liberados.

public byte[] IPAddress: obtém ou define o endereço IP (IPv4) de um dispositivo cliente. Cada byte da

array corresponde a um octeto do endereço IP.

public int TCPPort: obtém ou define a porta TCP utilizada pelo dispositivo. Esta propriedade não é

utilizada atualmente pelo BitVoicer Server.

7.2 Bibliotecas para Arduino

As bibliotecas para Arduino estão localizadas na pasta “Libraries\Arduino” dentro da pasta de

instalação do BitVoicer Server (geralmente c:\Program Files\BitSophia\BitVoicer Server).

Para instalar as bibliotecas do BitVoicer Server no ambiente de desenvolvimento do Arduino, siga as

instruções deste link: http://www.arduino.cc/en/Guide/Libraries

7.2.1 BVSP

A biblioteca BVSP fornece todos os recursos necessários para trocar informações com o BitVoicer

Server. A classe BVSP, contida na biblioteca, implementa o BitVoicer Server Protocol de modo que não é

necessário conhecer todos os detalhes do protocolo para interagir com o servidor. Esta classe emprega um

modelo de programação baseado em eventos que simplifica a estrutura do código e a recuperação de

dados enviados pelo servidor.

7.2.1.1 Classe BVSP

DESCRIÇÃO:

Implementa o BitVoicer Server Protocol e fornece um conjunto de funções, membros e eventos para

troca de dados, obtenção de status e manutenção de conexões com o servidor.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 107

CONSTRUTORES:

public BVSP(): inicializa uma nova instancia da classe BVSP.

MEMBROS:

byte inboundMode: obtém o modo de operação do canal de comunicação no sentido inbound (dispositivo

servidor). O valor deste membro reflete o modo definido através da função

setInboundMode(byte mode).

0x00 = modo enquadrado

0x01 = modo fluxo

boolean isReceiving: obtém um valor que indica se a função receive() está lendo o buffer da porta

serial ou processando os dados recebidos:

Verdadeiro = está recebendo

Falso = não está recebendo

byte outboundMode: obtém o modo de operação do canal de comunicação no sentido outbound (servidor

dispositivo). O modo de operação do canal outbound é controlado pelo servidor.

0x00 = modo enquadrado

0x01 = modo fluxo

volatile int usedMemory: obtém quantos bytes do buffer interno estão atualmente em uso. O tamanho

padrão do buffer interno é 64 bytes.

FUNÇÕES:

void begin(Stream &serialPort, unsigned long statusRequestTimeout, unsigned long

statusRequestInterval): define a porta serial utilizada para comunicação, o tempo limite para que

uma requisição de status expire e a periodicidade com que requisições de status devem ser feitas.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 108

Parâmetros:

Stream &serialPort: uma das classes Serial que representam portas seriais na plataforma

Arduino (ex.: Serial, Serial1, Serial2, Serial3).

unsigned long statusRequestTimeout: o tempo limite, em milissegundos, para que uma

requisição de status expire. Caso o servidor não responda a requisições de status neste intervalo,

a função hasStatusTimedOut() passará a retornar verdadeiro e as funções isBVSRunning(),

isDataFwdRunning() e isSREAvailable() passarão a retornar falso.

unsigned long statusRequestInterval: define com que periodicidade, em milissegundos, a

classe BVSP deve realizar requisições de status através de chamadas a função keepAlive().

Observações:

A função begin deve chamada antes que qualquer outra função da classe BVSP seja chamada.

A porta serial especificada no parâmetro serialPort deve ser usada exclusivamente pela classe

BVSP. Se outras aplicações no servidor precisarem trocar dados com o dispositivo nesta mesma

porta, o desenvolvedor deve fazê-lo através do módulo Data Forwarding.

byte getReceivedByte(): obtém o último byte recebido pela classe BVSP. Esta função deve ser usada

somente dentro do manipulador do evento frameReceived para recuperar o byte contido no frame.

Valor de retorno:

byte: o ultimo byte recebido através de clamadas à função receive. Caso o tipo de dado recebido

não seja do tipo byte, o valor retornado será zero. Se esta função for chamada fora do manipulador

do evento frameReceived, o valor retornado é indeterminado.

int getReceivedBytes(byte *buffer, int bufferSize): copia os últimos bytes recebidos pela classe

BVSP para o buffer passado à função. Esta função deve ser usada somente dentro do manipulador

do evento frameReceived para recuperar a array de bytes contida no frame.

Parâmetros:

byte *buffer: uma array de bytes para onde os dados devem ser copiados.

int bufferSize: o tamanho do buffer passado à função.

Valor de retorno:

int: o número de bytes copiados para o buffer. Caso o tipo de dado recebido não seja do tipo

binary, o valor retornado será zero. Se esta função for chamada fora do manipulador do evento

frameReceived, o valor retornado é indeterminado.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 109

int getReceivedBytes(byte *buffer, int bufferSize, int offset, int count): copia os últimos

bytes recebidos pela classe BVSP para o buffer passado à função. Esta função deve ser usada

somente dentro do manipulador do evento frameReceived para recuperar a array de bytes contida

no frame.

Parâmetros:

byte *buffer: uma array de bytes para onde os dados devem ser copiados.

int bufferSize: o tamanho do buffer passado à função.

int offset: a localização no buffer onde os dados devem começar a ser copiados.

int count: a quantidade de bytes que deve ser copiada.

Valor de retorno:

int: o número de bytes copiados para o buffer. Caso o tipo de dado recebido não seja do tipo

binary, o valor retornado será zero. Se esta função for chamada fora do manipulador do evento

frameReceived, o valor retornado é indeterminado.

int getReceivedInt16(): obtém o último inteiro de 16-bits recebido pela classe BVSP. Esta função deve

ser usada somente dentro do manipulador do evento frameReceived para recuperar o Int16 contido

no frame.

Valor de retorno:

int: o ultimo Int16 recebido através de clamadas à função receive. Caso o tipo de dado recebido

não seja do tipo Int16, o valor retornado será zero. Se esta função for chamada fora do

manipulador do evento frameReceived, o valor retornado é indeterminado.

long getReceivedInt32(): obtém o último inteiro de 32-bits recebido pela classe BVSP. Esta função deve

ser usada somente dentro do manipulador do evento frameReceived para recuperar o Int32 contido

no frame.

Valor de retorno:

long: o ultimo Int32 recebido através de clamadas à função receive. Caso o tipo de dado recebido

não seja do tipo Int32, o valor retornado será zero. Se esta função for chamada fora do

manipulador do evento frameReceived, o valor retornado é indeterminado.

int getReceivedStream(byte *buffer, int bufferSize): copia as últimas amostras de áudio recebidas

pela classe BVSP para o buffer passado à função. Esta função deve ser usada somente dentro do

manipulador do evento streamReceived para recuperar a array de bytes correspondente ao fluxo de

áudio recebido.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 110

Parâmetros:

byte *buffer: uma array de bytes para onde as amostras devem ser copiadas.

int bufferSize: o tamanho do buffer passado à função.

Valor de retorno:

int: o número de amostras copiadas para o buffer. Caso não haja um fluxo de áudio presente no

buffer interno, o valor retornado será zero. Se esta função for chamada fora do manipulador do

evento streamReceived, o valor retornado é indeterminado.

int getReceivedStream(short *buffer, int bufferSize): copia as últimas amostras de áudio

recebidas pela classe BVSP para o buffer passado à função. Esta função deve ser usada somente

dentro do manipulador do evento streamReceived para recuperar a array de bytes correspondente

ao fluxo de áudio recebido.

Parâmetros:

short *buffer: uma array de shorts (inteiro de 16-bits com sinal) para onde as amostras devem

ser copiadas.

int bufferSize: o tamanho do buffer passado à função.

Valor de retorno:

int: o número de amostras copiadas para o buffer. Caso não haja um fluxo de áudio presente no

buffer interno, o valor retornado será zero. Se esta função for chamada fora do manipulador do

evento streamReceived, o valor retornado é indeterminado.

int getReceivedStream(byte *buffer, int bufferSize, int offset, int count): copia as últimas

amostras de áudio recebidas pela classe BVSP para o buffer passado à função. Esta função deve

ser usada somente dentro do manipulador do evento streamReceived para recuperar a array de

bytes correspondente ao fluxo de áudio recebido.

Parâmetros:

byte *buffer: uma array de bytes para onde as amostras devem ser copiadas.

int bufferSize: o tamanho do buffer passado à função.

int offset: a localização no buffer onde as amostras devem começar a ser copiadas.

int count: a quantidade de amostras que deve ser copiada.

Valor de retorno:

int: o número de amostras copiadas para o buffer. Caso não haja um fluxo de áudio presente no

buffer interno, o valor retornado será zero. Se esta função for chamada fora do manipulador do

evento streamReceived, o valor retornado é indeterminado.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 111

int getReceivedStream(short *buffer, int bufferSize, int offset, int count): copia as últimas

amostras de áudio recebidas pela classe BVSP para o buffer passado à função. Esta função deve

ser usada somente dentro do manipulador do evento streamReceived para recuperar a array de

bytes correspondente ao fluxo de áudio recebido.

Parâmetros:

short *buffer: uma array de shorts (inteiro de 16-bits com sinal) para onde as amostras devem

ser copiadas.

int bufferSize: o tamanho do buffer passado à função.

int offset: a localização no buffer onde as amostras devem começar a ser copiadas.

int count: a quantidade de amostras que deve ser copiada.

Valor de retorno:

int: o número de amostras copiadas para o buffer. Caso não haja um fluxo de áudio presente no

buffer interno, o valor retornado será zero. Se esta função for chamada fora do manipulador do

evento streamReceived, o valor retornado é indeterminado.

int getReceivedString(char *buffer, int bufferSize): obtém a última string (array de chars)

recebida pela classe BVSP. Esta função deve ser usada somente dentro do manipulador do evento

frameReceived para recuperar a string contida no frame.

Parâmetros:

char *buffer: uma array de chars para onde a string deve ser copiada.

int bufferSize: o tamanho do buffer passado à função.

Valor de retorno:

int: o número de caracteres copiados para o buffer. Caso o tipo de dado recebido não seja do tipo

string, o valor retornado será zero. Se esta função for chamada fora do manipulador do evento

frameReceived, o valor retornado é indeterminado.

boolean hasStatusTimedOut(): obtém um valor que indica se a última requisição de status feita através da

função requestStatus expirou ou não.

Valor de retorno:

boolean: verdadeiro se a última requisição de status expirou. Caso contrário, falso.

Observações:

Para determinar se a última requisição de status expirou, esta função utiliza o parâmetro

statusRequestTimeout passado à função begin.

boolean isBVSRunning(): obtém um valor que indica se o BitVoicer Server está em execução.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 112

Valor de retorno:

Boolean: verdadeiro se o BitVoicer Server estiver em execução. Caso contrário, falso.

Observações:

Está função não executa consultas ao servidor. Para que ela retorne verdadeiro é preciso que um

frame de requisição de status seja enviado ao servidor através das funções requestStatus ou

keepAlive. Caso o tempo limite de resposta (ver função begin) seja excedido, esta função irá

retornar falso.

boolean isDataFwdRunning(): obtém um valor que indica se o módulo Data Forwarding está em

execução.

Valor de retorno:

Boolean: verdadeiro se o módulo Data Forwarding estiver em execução. Caso contrário, falso.

Observações:

Está função não executa consultas ao servidor. Para que ela retorne verdadeiro é preciso que um

frame de requisição de status seja enviado ao servidor através das funções requestStatus ou

keepAlive. Caso o tempo limite de resposta (ver função begin) seja excedido, esta função irá

retornar falso.

boolean isSREAvailable(): obtém um valor que indica se há um motor de reconhecimento de fala

atribuído ao dispositivo (seção 3.1.3.1 Atribuição de motores de reconhecimento de fala).

Valor de retorno:

Boolean: verdadeiro se houver um motor de reconhecimento de fala atribuído ao dispositivo. Caso

contrário, falso.

Observações:

Está função não executa consultas ao servidor. Para que ela retorne verdadeiro é preciso que um

frame de requisição de status seja enviado ao servidor através das funções requestStatus ou

keepAlive. Caso o tempo limite de resposta (ver função begin) seja excedido, esta função irá

retornar falso.

void keepAlive(): mantém o dispositivo cliente ativo e requisita um frame de status ao servidor.

Observações:

Esta função verifica se o intervalo de requisição de status (ver função begin) se esgotou antes de

realizar requisições ao servidor. Caso este intervalo ainda não tenha se esgotado, nenhuma

requisição é enviada.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 113

void receive(): verifica se há dados disponíveis na porta serial e processa os dados recebidos de acordo

com as especificações do BitVoicer Server Protocol.

Observações:

Esta função pode levantar os eventos frameReceived, modeChanged ou streamReceived em

função dos dados recebidos do servidor. Manipuladores de eventos devem ser atribuídos a estes

eventos para que seja possível recuperar os dados recebidos.

void requestStatus(): envia um frame de requisição de status ao servidor e marca o momento em que o

frame foi enviado.

Observações:

Para obter os valores da resposta enviada pelo servidor, utilize as funções isBVSRunning,

isDataFwdRunning e isSREAvailable.

void reset(): descarta todos os dados contidos no buffer interno e retorna a classe BVSP ao seu estado

inicial. Os parâmetros passados através da função begin não são descartados.

void send(byte data): encapsula o byte especificado em um frame do BitVoicer Server Protocol e o envia

ao módulo Data Forwarding do servidor.

Parametros:

byte data: o byte (inteiro sem sinal de 8-bits) a ser enviado ao módulo Data Forwarding do

servidor.

void send(int data): encapsula o int especificado em um frame do BitVoicer Server Protocol e o envia ao

módulo Data Forwarding do servidor.

Parâmetros:

int data: o int (inteiro com sinal de 16-bits) a ser enviado ao módulo Data Forwarding do servidor.

void send(long data): encapsula o long especificado em um frame do BitVoicer Server Protocol e o envia

ao módulo Data Forwarding do servidor.

Parâmetros:

long data: o long (inteiro com sinal de 32-bits) a ser enviado ao módulo Data Forwarding do servidor.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 114

void send(byte *data, int count): encapsula a array de bytes especificada em um frame do BitVoicer

Server Protocol e a envia ao módulo Data Forwarding do servidor.

Parâmetros:

byte *data: a array de bytes a ser enviada ao módulo Data Forwarding do servidor.

int count: a quantidade de bytes a serem enviados a partir da posição 0.

void send(byte *data, int offset, int count): encapsula a array de bytes especificada em um frame

do BitVoicer Server Protocol e a envia ao módulo Data Forwarding do servidor.

Parâmetros:

byte *data: a array de bytes a ser enviada ao módulo Data Forwarding do servidor.

int offset: a posição a partir da qual os dados devem ser enviados.

int count: a quantidade de bytes a serem enviados.

void send(char *data): encapsula a string especificada em um frame do BitVoicer Server Protocol e a

envia ao módulo Data Forwarding do servidor.

Parâmetros:

char *data: a string (array de chars) a ser enviada ao módulo Data Forwarding do servidor.

void sendStream(byte *data, int count): envia o fluxo de áudio especificado para o motor de

reconhecimento de fala atribuído ao dispositivo (seção 3.1.3.1 Atribuição de motores de

reconhecimento de fala).

Parâmetros:

byte *data: o fluxo de áudio (array de bytes) a ser enviado ao motor de reconhecimento de fala.

int count: a quantidade de amostras a serem enviadas a partir da posição 0.

Observações:

Para que o BitVoicer Server direcione fluxos de áudio para o motor de reconhecimento de fala é

preciso que o canal de comunicação no sentido inbound (dispositivo servidor) esteja operando

no modo fluxo (seção 6.3.2 Modo fluxo). Para alterar o modo de operação do canal inbound utilize

a função setInboundMode.

void setInboundMode(byte mode): altera o modo de operação (seção 6.3 Conceitos básicos) do canal de

comunicação no sentido inbound (dispositivo servidor).

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 115

Parâmetros:

byte mode: um byte que indica em qual modo de operação o canal deve passar a operar. As

constantes a seguir podem ser utilizadas em chamadas a esta função:

o FRAMED_MODE = 0x00

o STREAM_MODE = 0x01

Observações:

O modo de operação inicial do canal de comunicação no sentido inbound é enquadrado.

Para enviar dados ao módulo Data Forwarding é preciso que o canal inbound esteja operando no

modo enquadrado.

Para enviar fluxos de áudio a motores de reconhecimento de fala é preciso que o canal inbound

esteja operando no modo fluxo.

EVENTOS:

FrameReceivedPtr frameReceived: ocorre quando a função receive identifica que um frame do BitVoicer

Server Protocol (seção 6.6 Estrutura do frame do BitVoicer Server Protocol) foi recebido do servidor.

ModeChangedPtr modeChanged: ocorre quando a função receive identifica que uma requisição para

alteração do modo de operação do canal outbound (seção 6.5.2 Alteração de modo de operação) foi

recebida do servidor.

StreamReceivedPtr streamReceived: ocorre quando a função receive identifica que um segmento de

fluxo de áudio (seção 6.3.2 Modo fluxo) foi recebido do servidor.

OBSERVAÇÕES:

A classe BVSP usa um buffer interno para processar os frames e fluxos de áudio recebidos do

servidor. O tamanho desse buffer é determinado pela constante BVSP_BUFFER_SIZE definida no arquivo

BVSP.h e seu valor padrão é 64 (bytes). Caso a classe BVSP receba frames com comprimento superior a

64 bytes (um frame contendo uma string com mais de 60 caracteres, por exemplo), é preciso aumentar o

tamanho deste buffer para que ele comporte todo o frame (seção 6.6 Estrutura do frame do BitVoicer Server

Protocol).

Dispositivos clientes que utilizam interface de comunicação TCP/IP precisam manter a conexão com

o servidor ativa para que ela não seja encerrada (seção 6.4.1 TCP/IP). A função keepAlive, em conjunto

com os parâmetros definidos na função begin, fornece os recursos para manter esta conexão ativa.

Embora a função keepAlive seja especialmente útil para dispositivos TCP/IP, ela pode ser usada por

qualquer tipo de dispositivo para manter as informações de status (ver funções isBVSRunning,

isDataFwdRunning e isSREAvailable) atualizadas.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 116

7.2.1.2 Constantes

#define BVSP_BUFFER_SIZE 64

#define DATA_TYPE_NA 0x00

#define DATA_TYPE_BYTE 0x01

#define DATA_TYPE_INT16 0x03

#define DATA_TYPE_INT32 0x05

#define DATA_TYPE_BINARY 0x07

#define DATA_TYPE_STRING 0x08

#define DATA_TYPE_STATUS 0x0F

#define FRAMED_MODE 0x00

#define STREAM_MODE 0x01

7.2.1.3 Tipo FrameReceivedPtr

DESCRIÇÃO:

Define um ponteiro de função para as funções que irão manipular o evento frameReceived da

classe BVSP.

SINTAXE:

typedef void (*FrameReceivedPtr)(byte, int)

PARÂMETROS:

byte: tipo de dado contido no frame.

o 1 = Byte

o 3 = Int16

o 5 = Int32

o 7 = Binary

o 8 = String

int: o comprimento, em bytes, do campo “carga” do frame (seção 6.6 Estrutura do frame do

BitVoicer Server Protocol).

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 117

OBSERVAÇÕES:

As constantes definidas na biblioteca BVSP (seção 7.2.1.2 Constantes) podem ser usadas para

testar o valor passado ao primeiro parâmetro (tipo de dado).

7.2.1.4 Tipo ModeChangedPtr

DESCRIÇÃO:

Define um ponteiro de função para as funções que irão manipular o evento modeChanged da classe

BVSP.

SINTAXE:

typedef void (*ModeChangedPtr)(void)

7.2.1.5 Tipo StreamReceivedPtr

DESCRIÇÃO:

Define um ponteiro de função para as funções que irão manipular o evento streamReceived da

classe BVSP.

SINTAXE:

typedef void (*StreamReceivedPtr)(int)

PARÂMETROS:

int: a quantidade de amostras disponíveis para leitura.

7.2.2 BVSMic

A biblioteca BVSMic fornece os recursos necessários para gravar amostras de áudio utilizando o

ADC (analog-to-digital converter) do Arduino. Estas amostras são armazenadas no buffer interno da classe

BVSMic e podem ser recuperadas para envio aos motores de reconhecimento de fala do BitVoicer Server.

7.2.2.1 Classe BVSMic

DESCRIÇÃO:

Fornece um conjunto de membros e funções que permitem gravar amostras de áudio utilizando um

dos pinos analógicos do Arduino.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 118

CONSTRUTORES:

public BVSMic(): inicializa uma nova instancia da classe BVSMic.

MEMBROS:

int available: obtém o número de amostras disponíveis para leitura no buffer interno.

boolean isRecording: obtém um valor que indica se a classe BVSMic está atualmente captando áudio.

FUNÇÕES:

void begin(): define as configurações do timer do Arduino para obter 8000 amostras por segundo.

Observações:

A função begin deve chamada antes que qualquer outra função da classe BVSMic seja chamada.

byte getAnalogPin(): obtém o número do pino analógico sendo usado para captar áudio. Este número é

definido através da função setAudioInput.

Valor de retorno:

byte: o número do pino analógico sendo usado para captar áudio

unsigned long getEOCInterrupt(): obtém um valor que indica qual interrupt (ADC_IER register) de fim

de conversão está ativo na classe BVSMic. Esta função só é suportada no Arduino DUE.

Valor de retorno:

unsigned long: um long (inteiro de 32-bits) sem sinal com apenas um dos bits entre a posição 0 e

15 definidos com valor igual a 1.

int read(byte *buffer, int bufferSize): lê todas as amostras de áudio disponíveis no buffer interno e

as grava na array de bytes especificada.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 119

Parâmetros:

byte *buffer: a array de bytes onde as amostras serão gravadas a partir da posição 0.

int bufferSize: o tamanho da array passada ao parâmetro buffer.

Valor de retorno:

int: o número de amostras efetivamente lidas. Se o buffer interno estiver vazio, retorna 0.

int read(byte *buffer, int bufferSize, int offset, int count): lê o número especificado de

amostras do buffer interno e as grava em uma array de bytes.

Parâmetros:

byte *buffer: a array de bytes onde as amostras serão gravadas.

int bufferSize: o tamanho da array passada ao parâmetro buffer.

int offset: a posição no buffer onde as amostras devem começar a ser gravadas.

int count: o número de amostras a serem lidas.

Valor de retorno:

int: o número de amostras efetivamente lidas. Se o buffer interno estiver vazio, retorna 0.

void resetBuffer(): descarta todas as amostras de áudio gravadas no buffer interno e reestabelece as

posições de gravação e leitura ao seu estado inicial.

void setAudioInput(byte pin, byte analogReference): define qual pino analógico será usado para

capturar amostras de áudio e qual a voltagem de referência usada pelo ADC.

Parâmetros:

byte pin: o número do pino analógico no qual serão feitas leituras para capturar amostras de

áudio.

byte analogReference: uma das constantes utilizadas pela função analogReference da

plataforma Arduino.

Observações:

A placa Arduino DUE suporta somente a voltagem de referência DEFAULT (3.3V). Tentar utilizar

outras voltagens de referência nesta placa não tem qualquer efeito.

Não use qualquer voltagem de referência inferior a 0V ou superior a 5V no pino AREF. Se uma

voltagem de referência externa for usada no pino AREF, a referência analógica deve ser definida

como EXTERNAL antes de iniciar a gravação de áudio.

void startRecording(): inicia a captura e gravação de áudio.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 120

void stopRecording(): interrompe a captura e gravação de áudio.

void write(byte sample): grava uma amostra de áudio no buffer interno.

Parâmetros:

byte sample: a amostra de áudio a ser gravada.

OBSERVAÇÕES:

A classe BVSMic usa um buffer interno para armazenar amostras de áudio. O tamanho desse buffer

é determinado pela constante BVSM_BUFFER_SIZE definida no arquivo BVSMic.h e seu valor padrão é 128

(bytes). Um buffer de 128 bytes é capaz de armazenar 16 milissegundos de áudio a 8000 amostras por

segundo. Se o buffer interno não for lido antes que ele encha, novas amostras serão simplesmente

descartadas. Caso o intervalo entre leituras do buffer seja superior a 16 milissegundos, é possível aumentar

o tamanho do buffer através da constante BVSM_BUFFER_SIZE usando a seguinte fórmula:

(intervalo entre as leituras em milissegundos / 1000) * 8000 = tamanho do buffer em bytes

A classe BVSMic utiliza os seguintes timers para gerar interrupções:

Arduino DUE: contador de tempo 1 no canal 2 (TC5).

Arduino Micro, Leonardo, Yún, LyliPad USB e outras placas baseadas no microcontrolador

ATmega32u4: contador de tempo 3 (timer3).

Arduino UNO, Mega e outras placas baseadas em microcontroladores ATmega: contador de tempo

2 (timer2).

A função tone e saídas PWM também utilizam timers. Certifique-se que seu código não utiliza os

mesmos timers utilizados pela classe BVSMic.

7.2.2.2 Constantes

#define BVSM_BUFFER_SIZE 128

7.2.3 BVSSpeaker

A biblioteca BVSSpeaker fornece os recursos necessários para reproduzir fluxos de áudio enviados

pelo BitVoicer Server (seção 3.1.3.4 Voz sintetizada). Para reproduzir áudio, a placa Arduino precisa possuir

um DAC (digital-to-analog converter) ou fazer uso de um DAC externo. Atualmente, esta biblioteca é

suportada apenas no Arduino DUE (único a possuir DACs integrados).

7.2.3.1 Classe BVSSpeaker

DESCRIÇÃO:

Reproduz fala sintetizada utilizando o conversor digital-para-analógico do Arduino DUE.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 121

CONSTRUTORES:

public BVSSpeaker(): inicializa uma nova instancia da classe BVSSpeaker.

MÉTODOS:

void begin(DACClass &dac): prepara a classe BVSSpeaker para reproduzir áudio.

Parâmetros:

DACClass &dac: uma instância da classe DACClass. A biblioteca DAC (disponível na mesma pasta

da biblioteca BVSSpeaker) declara uma instância da classe DACClass chamada DAC que pode

ser usada neste parâmetro (consulte o exemplo Reconhecimento de fala e síntese de voz).

Observações:

A função begin deve chamada antes que qualquer outra função da classe BVSSpeaker seja

chamada.

int enqueue(byte *data, int count): enfileira uma quantidade determinada de amostras de áudio para

reprodução.

Parâmetros:

byte *data: uma array de bytes contendo amostras de áudio para serem reproduzidas.

int count: o número de amostras em data a serem reproduzidas a partir da posição 0.

Valor de retorno:

int: o número de amostras enfileiradas para reprodução.

Observações:

A função enqueue pode ser chamada a qualquer momento para enfileirar amostras de áudio.

Mesmo enquanto a classe BVSSpeaker está reproduzindo áudio, é possível enfileirar novas

amostras.

Caso o buffer interno não comporte todas as amostras sendo enfileiradas, apenas aquelas que

couberem no espaço livre serão enfileiradas.

void finishPlaying(): sinaliza à classe BVSSpeaker que ela deve reproduzir as amostras que ainda

estão no buffer interno e, então, parar a reprodução.

int getQueueCount(): obtém o número de amostras no buffer interno aguardando para serem

reproduzidas. Esta função pode ser usada para saber qual o nível de utilização do buffer.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 122

Valor de retorno:

int: o número de amostras no buffer interno aguardando para serem reproduzidas.

boolean isPlaying(): obtém um valor que indica se a classe BVSSpeaker está reproduzindo áudio no

momento.

Valor de retorno:

boolean: verdadeiro se estiver reproduzindo áudio. Caso contrário, falso.

void play(): verifica se há amostras de áudio disponíveis no buffer interno e as reproduz.

Observações:

Caso a função finishPlaying tenha sido chamada, a função play continuará reproduzindo áudio

até que todas as amostras presentes no buffer interno tenham sido reproduzidas.

OBSERVAÇÕES:

A classe BVSSpeaker utiliza três buffers internos para reproduzir áudio. O maior destes buffers

enfileira as amostras de áudio a serem reproduzidas. O tamanho desse buffer é determinado pela constante

BVSSPEAKER_QUEUE_SIZE definida no arquivo BVSSpeaker.h e seu valor padrão é 8192 (bytes). Este

tamanho permite à classe BVSSpeaker armazenar cerca de um segundo de áudio no formato definido pelo

BitVoicer Server Protocol (seção 6.3.2 Modo fluxo). Se a taxa de transferência entre o servidor e o

dispositivo for superior a 8000 bytes por segundo e o áudio a ser reproduzido for maior que um segundo, é

possível que o buffer interno da classe BVSSpeaker se encha e amostras de áudio sejam perdidas. Para

evitar isso, é possível aumentar o tamanho deste buffer ou controlar a taxa de transferência nas

propriedades do dispositivo (seção 4.1.2.2 Comunicação). Os outros dois buffers são preenchidos

alternadamente pela classe BVSSpeaker e acessados pelo DAC do Arduino usando DMA (Direct Memory

Access). O tamanho desses buffers é determinado pela constante BVSSPEAKER_DAC_BUFFER_SIZE definida

no arquivo BVSSpeaker.h e seu valor padrão é 512 (bytes).

A classe BVSSpeaker utiliza o DAC0 do Arduino DUE para converter fluxo de áudio digital (PCM de

8-bits a uma taxa de amostragem de 8000 Hz) em sinal analógico.

7.2.3.2 Constantes

#define BVSSPEAKER_QUEUE_SIZE 8192

#define BVSSPEAKER_DAC_BUFFER_SIZE 512

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 123

8 Exemplos

As seções a seguir contêm exemplos práticos de implementação das principais funcionalidades

disponíveis no BitVoicer Server.

Os exemplos 8.1, 8.2, 8.3, e 8.4 foram desenvolvidos e testados usando a plataforma Arduino

(versão da IDE 1.6.3). Para compilar os exemplos é necessário instalar também as Bibliotecas para Arduino

do BitVoicer Server.

O exemplo 8.5 não requer o uso de dispositivos externos de captura (apenas o adaptador de áudio

do próprio servidor).

8.1 Obtenção de estado do servidor

Este exemplo demonstra como recuperar informações de estado do servidor e exibi-las utilizando

LEDs. Os frames de estado do BVSP (seção 6.6.1.5.1 Carga do tipo status) contêm três indicações de

estado: se o servidor está operante; se há um motor de reconhecimento de fala (Speech Recognition

Engine - SRE) atribuído ao dispositivo; e se o módulo Data Forwarding está operante. Neste exemplo é

utilizado um dispositivo de saída (seção 4.1.2 Dispositivos), ou seja, não será atribuído um SRE ao

dispositivo e apenas dois dos três LEDs deverão acender.

8.1.1 Materiais necessários

Servidor executando o BitVoicer Server 1.0

Placa Arduino (qualquer modelo)

Cabo USB para o Arduino

3 LEDs

3 resistências (se você não possui as especificações do LED, use resistências de no mínimo

200 ohms)

Breadboard

Jogo de cabos (jumpers) para breadboard

8.1.2 Passo-a-passo

1) Monte os três LEDs e resistências na breadboard e os conecte ao Arduino conforme exibido na

figura abaixo:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 124

2) Abra o ambiente de desenvolvimento do Arduino (IDE) e abra o sketch de exemplo BVSStatus (File

Examples BVSP Examples BVSPStatus). O código deste sketch é exibido na figura

abaixo:

#include <BVSP.h> // Defines the Arduino pins that will be used to control // the LEDs #define BVS_RUNNING 3 #define BVS_SRE 5 #define BVS_DATA_FWD 4 // Defines the constants that will be passed as parameters to // the BVSP.begin function const unsigned long STATUS_REQUEST_INTERVAL = 2000; const unsigned long STATUS_REQUEST_TIMEOUT = 1000; // Initializes a new global instance of the BVSP class BVSP bvsp = BVSP(); void setup() { // Starts serial communication at 115200 bps Serial.begin(115200); // Sets the Arduino pin modes pinMode(BVS_RUNNING, OUTPUT); pinMode(BVS_SRE, OUTPUT); pinMode(BVS_DATA_FWD, OUTPUT);

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 125

// Sets the Arduino serial port that will be used for // communication, how long it will take before a status request // times out and how often status requests should be sent to // BitVoicer Server bvsp.begin(Serial, STATUS_REQUEST_TIMEOUT, STATUS_REQUEST_INTERVAL); } void loop() { // Checks if the status request interval has elapsed and if it // has, sends a status request to BitVoicer Server bvsp.keepAlive(); // Checkes if there is data available at the serial port buffer // and processes its content according to the specifications // of the BitVoicer Server Protocol bvsp.receive(); // Gets the respective status from the BVSP class and sets // the LEDs on or off digitalWrite(BVS_RUNNING, bvsp.isBVSRunning()); digitalWrite(BVS_DATA_FWD, bvsp.isDataFwdRunning()); digitalWrite(BVS_SRE, bvsp.isSREAvailable()); }

3) Conecte o Arduino ao PC e faça o upload do código para o Arduino.

4) Abra o BitVoicer Server Manager e crie a localização (seção 4.1.1 Localizações) que será atribuída

ao dispositivo. Se a localização já existir, pule para o próximo passo.

5) Crie um dispositivo de saída (Output), atribua um número de série, especifique a localização e

configure a interface de comunicação (seção 4.1.2 Dispositivos).

Alguns instantes após o dispositivo ser salvo, os LEDs conectados aos pinos 3 e 4 deverão

acender. O LED conectado ao pino 5 deverá permanecer apagado, pois SREs não são atribuídos a

dispositivos de saída (seção 3.1.3.1 Atribuição de motores de reconhecimento de fala). Durante a execução

do sketch, os LEDs TX e RX do Arduino deverão piscar em sequência a cada 2 segundos. Isso indica que o

Arduino está fazendo uma requisição de estado ao servidor e está recebendo uma resposta.

8.2 Reconhecimento de fala

Este exemplo demonstra como implementar reconhecimento de fala utilizando um microfone

conectado a um dos pinos analógicos do Arduino. Neste exemplo, o modelo de obtenção de estado do

servidor demonstrado na seção anterior também é utilizado. No entanto, um LED é adicionado para fornecer

uma dica visual de que o período ativado por palavra de ativação se iniciou ou encerrou (seção 3.1.3.2

Filtros de validação).

8.2.1 Materiais necessários

Servidor executando o BitVoicer Server 1.0

1 licença para dispositivo de entrada (seção 2.4 Licenciamento)

Placa Arduino (qualquer modelo)

SparkFun Electret Microphone Breakout (BOB-09964)

Cabo USB para o Arduino

4 LEDs

4 resistências (se você não possui as especificações do LED, use resistências de no mínimo

200 ohms)

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 126

Breadboard

Jogo de cabos (jumpers) para breadboard

8.2.2 Passo-a-passo

1) Monte os quatro LEDs e resistências na breadboard e conecte o microfone e a breadboard ao

Arduino conforme exibido na figura abaixo:

2) Abra o ambiente de desenvolvimento do Arduino (IDE) e abra o sketch de exemplo

SpeechRecognition (File Examples BVSMic Examples SpeechRecognition). O código

deste sketch é exibido na figura abaixo:

#include <BVSP.h> #include <BVSMic.h> // Defines the Arduino pins that will be used to control // the LEDs and capture audio #define BVS_RUNNING 3 #define BVS_SRE 5 #define BVS_DATA_FWD 4 #define BVS_ACT_PERIOD 6 #define BVSM_AUDIO_INPUT 0 // Defines the constants that will be passed as parameters to // the BVSP.begin function

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 127

const unsigned long STATUS_REQUEST_INTERVAL = 2000; const unsigned long STATUS_REQUEST_TIMEOUT = 1000; // Defines the size of the audio buffer const int AUDIO_BUFFER_SIZE = 64; // Defines the size of the string buffer const int STRING_BUFFER_SIZE = 64; // Initializes a new global instance of the BVSP class BVSP bvsp = BVSP(); // Initializes a new global instance of the BVSMic class BVSMic bvsm = BVSMic(); // Creates a buffer that will be used to read recorded samples // from the BVSMic class byte audioBuffer[AUDIO_BUFFER_SIZE]; // Creates a string buffer (char array) to retrieve strings // sent from BitVoicer Server char stringBuffer[STRING_BUFFER_SIZE]; void setup() { // Starts serial communication at 115200 bps Serial.begin(115200); // Sets the Arduino pin modes pinMode(BVS_RUNNING, OUTPUT); pinMode(BVS_SRE, OUTPUT); pinMode(BVS_DATA_FWD, OUTPUT); pinMode(BVS_ACT_PERIOD, OUTPUT); // Sets the Arduino serial port that will be used for // communication, how long it will take before a status request // times out and how often status requests should be sent to // BitVoicer Server bvsp.begin(Serial, STATUS_REQUEST_TIMEOUT, STATUS_REQUEST_INTERVAL); // Defines the function that will handle the frameReceived // event bvsp.frameReceived = BVSP_frameReceived; // Prepares the BVSMic class timer bvsm.begin(); } void loop() { // Checks if the status request interval has elapsed and if it // has, sends a status request to BitVoicer Server bvsp.keepAlive(); // Checks if there is data available at the serial port buffer // and processes its content according to the specifications // of the BitVoicer Server Protocol bvsp.receive(); // Gets the respective status from the BVSP class and sets

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 128

// the LEDs on or off digitalWrite(BVS_RUNNING, bvsp.isBVSRunning()); digitalWrite(BVS_DATA_FWD, bvsp.isDataFwdRunning()); // Checks if there is a SRE assigned to the Arduino if (bvsp.isSREAvailable()) { // Turns on the SRE available LED digitalWrite(BVS_SRE, HIGH); // If the BVSMic class is not recording, sets up the audio // input and starts recording if (!bvsm.isRecording) { bvsm.setAudioInput(BVSM_AUDIO_INPUT, EXTERNAL); bvsm.startRecording(); } // Checks if the BVSMic class has available samples if (bvsm.available) { // Makes sure the inbound mode is STREAM_MODE before // transmitting the stream if (bvsp.inboundMode == FRAMED_MODE) bvsp.setInboundMode(STREAM_MODE); // Reads the audio samples from the BVSMic class int bytesRead = bvsm.read(audioBuffer, AUDIO_BUFFER_SIZE); // Sends the audio stream to BitVoicer Server bvsp.sendStream(audioBuffer, bytesRead); } } else { // There is no SRE available // Turns off the SRE and ACT_PERIOD LEDs digitalWrite(BVS_SRE, LOW); digitalWrite(BVS_ACT_PERIOD, LOW); // If the BVSMic class is recording, stops it if (bvsm.isRecording) bvsm.stopRecording(); } } // Handles the frameReceived event void BVSP_frameReceived(byte dataType, int payloadSize) { // Performs the appropriate actions based on the frame // data type switch (dataType) { case DATA_TYPE_BYTE: // Turns the ACT_PERIOD LED on or off depending on the // the value of the received byte digitalWrite(BVS_ACT_PERIOD, bvsp.getReceivedByte()); break; case DATA_TYPE_STRING: // Performs further actions only if characters are retrieved // from the frame

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 129

if (bvsp.getReceivedString(stringBuffer, STRING_BUFFER_SIZE) != 0); { // If the received string is equal to blink, turns // all LEDs off and on 3 times if (strcmp(stringBuffer, "blink") == 0) { AllLEDsOff(); delay(100); AllLEDsOn(); delay(100); AllLEDsOff(); delay(100); AllLEDsOn(); delay(100); AllLEDsOff(); delay(100); AllLEDsOn(); } } break; } } // Turns all LEDs on void AllLEDsOn() { digitalWrite(BVS_RUNNING, HIGH); digitalWrite(BVS_SRE, HIGH); digitalWrite(BVS_DATA_FWD, HIGH); digitalWrite(BVS_ACT_PERIOD, HIGH); } // Turns all LEDs off void AllLEDsOff() { digitalWrite(BVS_RUNNING, LOW); digitalWrite(BVS_SRE, LOW); digitalWrite(BVS_DATA_FWD, LOW); digitalWrite(BVS_ACT_PERIOD, LOW); }

3) Conecte o Arduino ao PC e faça o upload do código para o Arduino.

4) Abra o BitVoicer Server Manager e crie a localização (seção 4.1.1 Localizações) que será atribuída

ao dispositivo. Se a localização já existir, pule para o próximo passo.

5) Crie um dispositivo misto (Mixed), atribua um número de série, especifique a localização e configure

a interface de comunicação (seção 4.1.2 Dispositivos). Salve o dispositivo.

6) Na guia Cues (pistas) do dispositivo, ative as pistas de inicio e fim do período de ativação.

7) Crie as pistas abaixo na guia Cues e salve o dispositivo:

a. defina o Target Device (dispositivo alvo) para o próprio dispositivo:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 130

8) Crie um esquema de voz (seção 4.1.4 Esquemas de voz) e defina a palavra de ativação como

“Arduino”.

9) Na guia Input Devices (dispositivos de entrada), adicione o dispositivo recém criado como

dispositivo de entrada.

10) Na guia Sentences (sentenças), adicione o texto “blink all leds” à sentença.

11) Na guia Anagrams/Commands (anagramas/comandos), adicione o comando abaixo ao anagrama

recém criado:

12) Salve o esquema de voz.

Alguns instantes após o esquema de voz ser salvo, os LEDs conectados aos pinos 3, 4 e 5 deverão

acender. O LED conectado ao pino 6 deverá permanecer apagado até que a palavra de ativação (“Arduino”)

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 131

seja identificada. Ao término do período ativado por palavra de ativação (seção 4.1.2.1 Geral), o LED

conectado ao pino 6 apagará novamente.

No comando criado no passo 11, foi definido que a string “blink” deve ser enviada ao dispositivo alvo

quando o anagrama “blink all leds” for reconhecido. O sketch em execução no Arduino irá identificar essa

string e piscar todos os LEDs do dispositivo 3 vezes em intervalos de 100 milissegundos.

É possível monitorar o estado do SRE atribuído ao dispositivo e os reconhecimentos realizados por

ele através da ferramenta Monitor do servidor.

8.3 Reconhecimento de fala e síntese de voz

Este exemplo usa um Arduino DUE para realizar reconhecimento de fala e síntese de voz através

do mesmo dispositivo. Atualmente, o Arduino DUE é a única placa Arduino a possuir DACs (digital-to-analog

converter) capazes de converter fluxos de áudio digital em sinal analógico. Outras placas Arduino

necessitam de um DAC externo. A biblioteca BVSSpeaker usada neste exemplo só é suportada pelo

Arduino DUE.

Para demostrar como acessar os serviços do BitVoicer Server usando uma interface de

comunicação TCP/IP, este exemplo usa um adaptador de rede WiFi. Este adaptador pode ser usado em

todos os outros exemplos apresentados.

8.3.1 Materiais necessários

Servidor executando o BitVoicer Server 1.0

1 licença para dispositivo de entrada (seção 2.4 Licenciamento)

Placa Arduino DUE

SparkFun XBee Shield (WRL-12847)

Módulo WiFi RN171VX

Rede local WiFi com autenticação WPA

SparkFun Electret Microphone Breakout (BOB-09964)

SparkFun Mono Audio Amp Breakout (BOB-11044)

Alto-falante de 8-Ohm

Cabo USB para o Arduino

4 LEDs

4 resistências (se você não possui as especificações do LED, use resistências de no mínimo

200 ohms)

Breadboard

Jogo de cabos (jumpers) para breadboard

8.3.2 Passo-a-passo

A primeira etapa deste exemplo consiste em configurar o módulo WiFi RN171VX para acessar a

rede local, se comunicar com o Arduino e o BitVoicer Server. Para isso, siga os passos descritos a seguir:

1) Abra o ambiente de desenvolvimento do Arduino (IDE) e crie um novo sketch usando o código

abaixo:

void setup() { Serial.begin(9600); pinMode(13, OUTPUT); delay(5000); Serial.print("$$$"); delay(1000); Serial.println("set wlan auth 4");

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 132

delay(1000); Serial.println("set wlan phrase XXXXXX"); delay(1000); Serial.println("set wlan ssid XXXXXX"); delay(1000); Serial.println("set wlan channel 0"); delay(1000); Serial.println("set wlan join 1"); delay(1000); Serial.println("set wlan tx 0"); delay(1000); Serial.println("set ip dhcp 0"); delay(1000); Serial.println("set ip address 192.168.0.200"); delay(1000); Serial.println("set comm remote 0"); delay(1000); Serial.println("set comm close 0"); delay(1000); Serial.println("set comm open 0"); delay(1000); Serial.println("set comm size 500"); delay(1000); Serial.println("set comm time 50"); delay(1000); Serial.println("set uart baud 115200"); delay(1000); Serial.println("set uart flow 0"); delay(1000); Serial.println("save"); delay(1000); Serial.println("exit"); delay(1000); digitalWrite(13, LOW); } void loop() { }

2) Altere a seção “XXXXXX” do comando “set wlan phrase” com a senha da rede WiFi.

3) Altere a seção “XXXXXX” do comando “set wlan ssid” com o nome da rede WiFi.

4) No comando “set ip address” atribua o IP fixo do módulo WiFi.

5) Conecte o Arduino ao PC e faça o upload do código para o Arduino.

6) Desconecte o Arduino do PC.

7) Acople o módulo WiFi ao shield para XBee da Sparkfun.

8) Certifique-se que a chave seletora no shield está na posição “UART”.

9) Acople o shield ao Arduino DUE e reconecte o Arduino ao PC.

10) Aguarde cerca de 30 segundos para que o processo de configuração seja concluído. Durante esse

processo os LEDs DIN e DOUT do shield irão piscar quando houver troca de dados entre o Arduino

e o módulo WiFi.

11) Após o término do processo de configuração, desconecte o Arduino do PC e posicione a chave

seletora na posição “DLINE”. Reconecte o Arduino ao PC.

12) Aguarde alguns segundos e faça um teste de ping usando o prompt de comando (Iniciar Todos

os programas Acessórios Prompt de comando). Use o comando ping seguido do endereço IP

atribuído ao dispositivo (ex. ping 192.168.0.200). Se não houver resposta do módulo, refaça os

passos anteriores ou consulte a documentação do módulo.

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 133

Neste ponto o módulo WiFi está preparado para se comunicar com o BitVoicer Server e o Arduino.

Os passos a seguir descrevem como conectar os demais componentes ao Arduino, implementar as classes

BVSP, BVSMic e BVSSpeaker e preparar a solução do BitVoicer Server para atender ao dispositivo:

1) Monte os quatro LEDs e resistências na breadboard e conecte o microfone, o amplificador e a

breadboard ao Arduino conforme exibido na figura abaixo:

2) Abra o ambiente de desenvolvimento do Arduino (IDE) e abra o sketch de exemplo FullSpeech (File

Examples BVSSpeaker Examples FullSpeech). O código deste sketch é exibido na

figura abaixo:

#include <DAC.h> #include <BVSP.h> #include <BVSMic.h> #include <BVSSpeaker.h> // Defines the Arduino pins that will be used to control // LEDs and capture audio #define BVS_RUNNING 3 #define BVS_SRE 5 #define BVS_DATA_FWD 4 #define BVS_ACT_PERIOD 6 #define BVSM_AUDIO_INPUT 0 // Defines the constants that will be passed as parameters to // the BVSP.begin function const unsigned long STATUS_REQUEST_INTERVAL = 4000; const unsigned long STATUS_REQUEST_TIMEOUT = 2000; // Defines the size of the mic buffer

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 134

const int MIC_BUFFER_SIZE = 64; // Defines the size of the speaker buffer const int SPEAKER_BUFFER_SIZE = 128; // Initializes a new global instance of the BVSP class BVSP bvsp = BVSP(); // Initializes a new global instance of the BVSMic class BVSMic bvsm = BVSMic(); // Initializes a new global instance of the BVSSpeaker class BVSSpeaker bvss = BVSSpeaker(); // Creates a buffer that will be used to read recorded samples // from the BVSMic class byte micBuffer[MIC_BUFFER_SIZE]; // Creates a buffer that will be used to write audio samples // into the BVSSpeaker class byte speakerBuffer[SPEAKER_BUFFER_SIZE]; // Creates a global variable that indicates whether the // Arduino is connected to BitVoicer Server boolean connected = false; void setup() { // Starts serial communication at 115200 bps Serial.begin(115200); // Sets the Arduino pin modes and turns all leds off pinMode(BVS_RUNNING, OUTPUT); pinMode(BVS_SRE, OUTPUT); pinMode(BVS_DATA_FWD, OUTPUT); pinMode(BVS_ACT_PERIOD, OUTPUT); AllLEDsOff(); // Sets the Arduino serial port that will be used for // communication, how long it will take before a status request // times out and how often status requests should be sent to // BitVoicer Server bvsp.begin(Serial, STATUS_REQUEST_TIMEOUT, STATUS_REQUEST_INTERVAL); // Sets the function that will handle the frameReceived // event bvsp.frameReceived = BVSP_frameReceived; // Sets the function that will handle the modeChanged // event bvsp.modeChanged = BVSP_modeChanged; // Sets the function that will handle the streamReceived // event bvsp.streamReceived = BVSP_streamReceived; // Prepares the BVSMic class timer bvsm.begin(); // Sets the DAC that will be used by the BVSSpeaker class

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 135

bvss.begin(DAC); } void loop() { // If it is not connected to the server, opens a TCP/IP // connection, sets connected to true and resets the BVSP // class if (!connected) { Connect(Serial); connected = true; bvsp.reset(); } // Checks if the status request interval has elapsed and if it // has, sends a status request to BitVoicer Server bvsp.keepAlive(); // Checks if there is data available at the serial port buffer // and processes its content according to the specifications // of the BitVoicer Server Protocol bvsp.receive(); // Gets the respective status from the BVSP class and sets // the LEDs on or off digitalWrite(BVS_RUNNING, bvsp.isBVSRunning()); digitalWrite(BVS_DATA_FWD, bvsp.isDataFwdRunning()); // Checks if there is a SRE assigned to the Arduino if (bvsp.isSREAvailable()) { // Turns on the SRE available LED digitalWrite(BVS_SRE, HIGH); // If the BVSMic class is not recording, sets up the audio // input and starts recording if (!bvsm.isRecording) { bvsm.setAudioInput(BVSM_AUDIO_INPUT, DEFAULT); bvsm.startRecording(); } // Checks if the BVSMic class has available samples if (bvsm.available) { // Makes sure the inbound mode is STREAM_MODE before // transmitting the stream if (bvsp.inboundMode == FRAMED_MODE) bvsp.setInboundMode(STREAM_MODE); // Reads the audio samples from the BVSMic class int bytesRead = bvsm.read(micBuffer, MIC_BUFFER_SIZE); // Sends the audio stream to BitVoicer Server bvsp.sendStream(micBuffer, bytesRead); } } else { // There is no SRE available

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 136

// Turns off the SRE and ACT_PERIOD LEDs digitalWrite(BVS_SRE, LOW); digitalWrite(BVS_ACT_PERIOD, LOW); // If the BVSMic class is recording, stops it if (bvsm.isRecording) bvsm.stopRecording(); } // Plays the audio samples available in the internal buffer bvss.play(); // If the status has timed out, the connection is considered // lost if (bvsp.hasStatusTimedOut()) { // If the BVSMic is recording, stops it if (bvsm.isRecording) bvsm.stopRecording(); // Closes the TCP/IP connection Disconnect(Serial); AllLEDsOff(); connected = false; } } // Handles the modeChanged event void BVSP_modeChanged() { // If the outboundMode (Server --> Device) has turned to // FRAMED_MODE, no audio stream is supposed to be received. // Tells the BVSSpeaker class to finish playing when its // internal buffer become empty. if (bvsp.outboundMode == FRAMED_MODE) bvss.finishPlaying(); } // Handles the streamReceived event void BVSP_streamReceived(int size) { // Gets the received stream from the BVSP class int bytesRead = bvsp.getReceivedStream(speakerBuffer, SPEAKER_BUFFER_SIZE); // Enqueues the received stream for reproduction bvss.enqueue(speakerBuffer, bytesRead); } // Handles the frameReceived event void BVSP_frameReceived(byte dataType, int payloadSize) { // Performs the appropriate actions based on the frame // data type switch (dataType) { case DATA_TYPE_BYTE: // Turns the ACT_PERIOD LED on or off based on the // the value of the received byte digitalWrite(BVS_ACT_PERIOD, bvsp.getReceivedByte());

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 137

break; } } // Opens a TCP/IP connection with the BitVoicer Server void Connect(HardwareSerial &serialPort) { serialPort.print("$$$"); delay(500); // Use the IP address of the server and the TCP port set // in the server properties serialPort.println("open 192.168.0.117 4194"); delay(1000); serialPort.println("exit"); delay(500); } // Closes the TCP/IP connection with the BitVoicer Server void Disconnect(HardwareSerial &serialPort) { serialPort.print("$$$"); delay(500); serialPort.println("close"); delay(1000); serialPort.println("exit"); delay(500); } // Turns all LEDs off void AllLEDsOff() { digitalWrite(BVS_RUNNING, LOW); digitalWrite(BVS_SRE, LOW); digitalWrite(BVS_DATA_FWD, LOW); digitalWrite(BVS_ACT_PERIOD, LOW); }

3) Altere o endereço IP do servidor na função Connect do scketch acima usando o endereço IP do

BitVoicer Server.

4) Conecte o Arduino ao PC e faça o upload do código para o Arduino.

5) Mude a chave seletora no shield para a posição “UART”.

6) Abra o BitVoicer Server Manager e crie a localização (seção 4.1.1 Localizações) que será atribuída

ao dispositivo. Se a localização já existir, pule para o próximo passo.

7) Crie um dispositivo misto (Mixed), atribua um número de série, especifique a localização e configure

a interface de comunicação usando o endereço IP atribuído ao módulo WiFi (seção 4.1.2

Dispositivos). Salve o dispositivo.

8) Na guia Cues (pistas) do dispositivo, ative as pistas de início e fim do período de ativação.

9) Crie as pistas abaixo na guia Cues e salve o dispositivo:

a. defina o Target Device (dispositivo alvo) para o próprio dispositivo:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 138

10) Crie um esquema de voz (seção 4.1.4 Esquemas de voz) e defina a palavra de ativação como

“Arduino”.

11) Na guia Input Devices (dispositivos de entrada), adicione o dispositivo recém criado como

dispositivo de entrada.

12) Na guia Sentences (sentenças), adicione o texto “are you there” à sentença.

13) Na guia Anagrams/Commands (anagramas/comandos), adicione o comando abaixo ao anagrama

recém criado:

14) Salve o esquema de voz.

Alguns instantes após o esquema de voz ser salvo, os LEDs conectados aos pinos 3, 4 e 5 deverão

acender. O LED conectado ao pino 6 deverá permanecer apagado até que a palavra de ativação (“Arduino”)

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 139

seja identificada. Ao término do período ativado por palavra de ativação (seção 4.1.2.1 Geral), o LED

conectado ao pino 6 apagará novamente.

No comando criado no passo 12, foi definido que um fluxo de áudio sintetizado será enviado ao

dispositivo alvo quando o anagrama “are you there” for reconhecido. O sketch em execução no Arduino irá

receber e reproduzir esse fluxo usando o DAC interno do Arduino.

É possível monitorar o estado do SRE atribuído ao dispositivo e os reconhecimentos realizados por

ele através da ferramenta Monitor do servidor.

Em função dos picos de consumo de energia do adaptador WiFi durante a transmissão de pacotes,

é recomendado o uso de uma fonte externa de energia (7 a 12 volts).

8.4 Encaminhamento de dados

Este exemplo demonstra como implementar as funcionalidades disponíveis no módulo Data

Forwarding usando microcontroladores da plataforma Arduino. A troca de dados entre aplicações externas e

o BitVoicer Server não é abordada neste exemplo. Para maiores informações a este respeito consulte a

seção 7.1.1 BitSophia.BitVoicerServer.Integration.

Neste exemplo, a ferramenta Monitor do servidor (guia Data Forwarding) será usada para enviar

dados ao BitVoicer Server que, por sua vez, irá encaminhar estes dados ao dispositivo cliente. O dispositivo

cliente irá retransmitir essa informação de volta ao BitVoicer Server que a encaminhará a ferramenta

Monitor do servidor para que ela seja exibida em tela (“viagem de ida e volta”).

8.4.1 Materiais necessários

Servidor executando o BitVoicer Server 1.0

Placa Arduino (qualquer modelo)

Cabo USB para o Arduino

8.4.2 Passo-a-passo

1) Abra o ambiente de desenvolvimento do Arduino (IDE) e abra o sketch de exemplo DataForwarding

(File Examples BVSP Examples DataForwarding). O código deste sketch é exibido na

figura abaixo:

#include <BVSP.h> // Defines the constants that will be passed as parameters to // the BVSP.begin function const unsigned long STATUS_REQUEST_INTERVAL = 2000; const unsigned long STATUS_REQUEST_TIMEOUT = 1000; // Initializes a new global instance of the BVSP class BVSP bvsp = BVSP(); void setup() { // Starts serial communication at 115200 bps Serial.begin(115200); // Sets the Arduino serial port that will be used for // communication, how long it will take before a status request // times out and how often status requests should be sent to // BitVoicer Server bvsp.begin(Serial, STATUS_REQUEST_TIMEOUT, STATUS_REQUEST_INTERVAL);

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 140

// Sets the function that will handle the frameReceived // event bvsp.frameReceived = BVSP_frameReceived; } void loop() { // Checkes if there is data available at the serial port buffer // and processes its content according to the specifications // of the BitVoicer Server Protocol bvsp.receive(); } // Handles the frameReceived event void BVSP_frameReceived(byte dataType, int payloadSize) { int bytesRead = 0; // Performs the appropriate actions based on the frame // data type switch (dataType) { case DATA_TYPE_BYTE: // Gets the received byte and sends it back to // BitVoicer Server bvsp.send(bvsp.getReceivedByte()); break; case DATA_TYPE_INT16: // Gets the received int16 and sends it back to // BitVoicer Server bvsp.send(bvsp.getReceivedInt16()); break; case DATA_TYPE_INT32: // Gets the received int32 and sends it back to // BitVoicer Server bvsp.send(bvsp.getReceivedInt32()); break; case DATA_TYPE_BINARY: byte byteBuffer[64]; // Retrieves the binary data from the frame bytesRead = bvsp.getReceivedBytes(byteBuffer, 64); // Sends the binary data back to BitVoicer Server bvsp.send(byteBuffer, 0, bytesRead); break; case DATA_TYPE_STRING: char charBuffer[64]; // Retrieves the string from the frame bvsp.getReceivedString(charBuffer, 64); // Sends the string back to BitVoicer Server bvsp.send(charBuffer); break;

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 141

} }

2) Conecte o Arduino ao PC e faça o upload do código para o Arduino.

3) Abra o BitVoicer Server Manager e crie a localização (seção 4.1.1 Localizações) que será atribuída

ao dispositivo. Se a localização já existir, pule para o próximo passo.

4) Crie um dispositivo de saída (Output), atribua um número de série, especifique a localização e

configure a interface de comunicação (seção 4.1.2 Dispositivos).

5) Abra a ferramenta Monitor do servidor e clique na guia Data Forwarding (encaminhamento de

dados).

6) Selecione o dispositivo criado no passo 4 na caixa de listagem e clique em Bind (vincular).

7) Selecione o tipo de dados a ser enviado na área denominada Send (enviar), digite os dados na

caixa de texto logo abaixo e clique em Send.

Os dados enviados na área Send irão aparecer na área Received (recebido) na mesma ordem que

foram enviados. Isso significa que os dados realizaram o circuito completo de encaminhamento: Monitor do

servidor BitVoicer Server Dispositivo BitVoicer Server Monitor do servidor.

Logo que o botão Send é clicado, os LED RX e TX do Arduino devem piscar rapidamente e em

sequência.

8.5 Usando o adaptador de áudio do servidor

Este exemplo usa apenas o adaptador de áudio do servidor para realizar reconhecimento de fala e

síntese de voz. Embora este exemplo use apenas o adaptador de áudio do servidor para ambas as

operações, é possível criar soluções que usam qualquer combinação de dispositivo e adaptador para

realizar reconhecimento de fala e síntese de voz: dispositivo/dispositivo; dispositivo/adaptador;

adaptador/dispositivo; e adaptador/adaptador.

O esquema de voz (seção 4.1.4 Esquemas de voz) usado neste exemplo cria um padrão

pergunta/resposta em que é estabelecido um pequeno diálogo direcionado. Estes diálogos podem conduzir

à execução de comandos específicos e aumentar a sensação de interatividade.

8.5.1 Materiais necessários

Servidor executando o BitVoicer Server 1.0

1 licença para dispositivo de entrada (seção 2.4 Licenciamento)

1 microfone conectado ao adaptador de áudio do servidor

Alto-falantes conectados ao adaptador de áudio do servidor

8.5.2 Passo-a-passo

1) Abra o BitVoicer Server Manager e crie a localização (seção 4.1.1 Localizações) que será atribuída

aos dispositivos de entrada e saída. Se a localização já existir, pule para o próximo passo.

2) Crie um dispositivo do tipo SystemSpeaker, especifique a sua localização e salve o dispositivo.

3) Crie um dispositivo do tipo SystemMic e especifique a sua localização.

4) Na guia Cues (pistas) do dispositivo, ative a pista de início do período de ativação.

5) Crie a pista abaixo na guia Cues e salve o dispositivo:

a. defina o Target Device (dispositivo alvo) para o dispositivo SystemSpeaker recém criado.

b. O caminho completo do arquivo (File Path) usado na figura abaixo é:

C:\Windows\Media\notify.wav

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 142

6) Crie um esquema de voz e defina a palavra de ativação como “Computer”.

7) Na guia Input Devices (dispositivos de entrada), adicione o dispositivo do tipo SystemMic como

dispositivo de entrada.

8) Na guia Sentences (sentenças), adicione as sentenças abaixo:

a. “are you there”

b. “let me know when you are done”

9) Na guia Anagrams/Commands (anagramas/comandos), adicione o comando abaixo ao anagrama

“are you there”:

a. defina o Target Device (dispositivo alvo) para o dispositivo do tipo SystemSpeaker:

BitSophia - www.bitsophia.com BitVoicer Server 1.0 – Manual do Usuário - Português

Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados. 143

10) Adicione o comando abaixo ao anagrama “let me know when you are done”:

a. defina o Target Device (dispositivo alvo) para o dispositivo do tipo SystemSpeaker:

11) Salve o esquema de voz.

Depois que o esquema de voz estiver salvo, é possível conduzir o seguinte diálogo com o BitVoicer

Server:

Usuário: "computer”.

BitVoicer Server: um som de notificação deve ser reproduzido para informar que o período ativado

por palavra de ativação iniciou.

Usuário: “are you there”.

BitVoicer Server: “no sir, I am doing the dishes”.

Usuário: “let me know when you are done”.

BitVoicer Server: “of course sir”.