BitVoicer Server 1.0

Transcrição

BitVoicer Server 1.0
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
BitVoicer Server 1.0
Manual do Usuário
Português
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
1
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
Sumário
1
2
3
Introdução............................................................................................................................................. 5
1.1
Requisitos mínimos ...................................................................................................................... 5
1.2
Instalação ..................................................................................................................................... 5
1.3
Aviso de segurança ...................................................................................................................... 5
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
Detalhes do BitVoicer Server ...............................................................................................................10
3.1
4
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
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
2
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
6.4.1
TCP/IP.....................................................................................................................................63
6.4.2
Porta serial ..............................................................................................................................63
6.5
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.1
Estrutura do frame do BitVoicer Server Protocol ..........................................................................65
Elementos do frame.................................................................................................................66
6.7
Notas...........................................................................................................................................67
6.8
Especificação aberta ...................................................................................................................68
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
8
Descrição operacional .................................................................................................................64
6.5.1
6.6
7
Interfaces de comunicação ..........................................................................................................62
Bibliotecas para Arduino ............................................................................................................106
7.2.1
BVSP.....................................................................................................................................106
7.2.2
BVSMic .................................................................................................................................117
7.2.3
BVSSpeaker ..........................................................................................................................120
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
3
BitSophia - www.bitsophia.com
8.2
BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
4
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
5
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
6
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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#.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
7
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
8
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
9
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
Intel Core i5 2.4GHz / 4GB RAM / Windows 7 64-bits
Intel Core i3 2.1GHz / 4GB RAM / Windows 7 64-bits
Intel Atom 1.66GHz / 1GB RAM / Windows 7 32-bits
Uso Médio CPU (%)
2,55
3,60
7,07
Uso Médio RAM (MB)
116
104
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).
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
10
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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 viceversa;
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
11
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
12
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
13
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
14
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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#.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
15
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
16
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
17
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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 (
Locations do Object Explorer.
) da barra de ferramentas; e através do menu de contexto da categoria
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
18
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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 (
do Object Explorer.
) da barra de ferramentas; e através do menu de contexto da categoria Devices
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
19
BitSophia - www.bitsophia.com





BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
20
BitSophia - www.bitsophia.com





BitVoicer Server 1.0 – Manual do Usuário - Português
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émadicionada 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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
21
BitSophia - www.bitsophia.com






BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
22
BitSophia - www.bitsophia.com






BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
23
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
24
BitSophia - www.bitsophia.com


BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
25
BitSophia - www.bitsophia.com


BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
26
BitSophia - www.bitsophia.com




BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
27
BitSophia - www.bitsophia.com



BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
28
BitVoicer Server 1.0 – Manual do Usuário - Português
BitSophia - www.bitsophia.com
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:
Item
Block
Block
Block
Block
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
29
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
30
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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).
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
31
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
32
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
33
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
34
BitSophia - www.bitsophia.com




BitVoicer Server 1.0 – Manual do Usuário - Português
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,
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
35
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
36
BitSophia - www.bitsophia.com

BitVoicer Server 1.0 – Manual do Usuário - Português
(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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
37
BitSophia - www.bitsophia.com





BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
38
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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 (
ferramentas. A figura abaixo exibe a ferramenta de visualização de log:
) disponível na barra de
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)
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
39
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
40
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
41
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
42
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
43
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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).
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
44
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
45
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
46
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
47
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
48
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
49
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
50
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
51
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
52
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
53
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
54
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
55
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
56
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
Para acessar a ferramenta de teste de síntese de voz (figura abaixo) clique em Tools  Try Speech
Synthesis no menu principal:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
57
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
58
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
59
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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).
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
60
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
61
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
62
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
63
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
64
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
65
BitVoicer Server 1.0 – Manual do Usuário - Português
BitSophia - www.bitsophia.com
Byte
Bit
Campo
0
7a0
INÍCIO DE FRAME
1
TIPO DE FRAME
0
3
1
2
TIPO DE DADO
1
0
9
Bytes
transmitidos de
cima para baixo
8
7
6
5
2
TAMANHO DA CARGA
4
3
2
1
0
3aN
---
CARGA
N+1
7a0
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
66
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
String
0x08
Status
0x0F
Array de bytes de comprimento variável. Comprimento máximo: 1023 bytes.
String de caracteres (ISO 8859-1) de comprimento variável. Comprimento máximo: 1023
bytes.
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
7a3
2
1
0
Descrição
(Reservados)
Encaminhamento de dados ativo: indica se o serviço
de encaminhamento de dados do servidor está em
funcionamento.
SRE disponível: indica se há um SRE alocado para o
dispositivo.
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
67
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
68
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
69
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
70
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
71
BitVoicer Server 1.0 – Manual do Usuário - Português
BitSophia - www.bitsophia.com
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
ReceiveAll(): recebe todos os frames disponíveis no serviço WCF
ForwardedData[]
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
72
BitVoicer Server 1.0 – Manual do Usuário - Português
BitSophia - www.bitsophia.com
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
bool: verdadeiro se o dado for enviado com sucesso. Caso contrário, falso.
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
73
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
74
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
75
BitVoicer Server 1.0 – Manual do Usuário - Português
BitSophia - www.bitsophia.com
DESCRIÇÃO:
Fornece
métodos
de
BitSophia.BitVoicerServer.Integration.
extensão
para
classes
do
espaço
de
nome
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
76
BitVoicer Server 1.0 – Manual do Usuário - Português
BitSophia - www.bitsophia.com
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
77
BitVoicer Server 1.0 – Manual do Usuário - Português
BitSophia - www.bitsophia.com
Parâmetros:

BVSRecognitionResult
recognitionResult:
um objeto do tipo
.Integration.SpeechInterfaceService.BVSRecognitionResult
contendo
BitSophia.BitVoicerServer
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
78
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
79
BitVoicer Server 1.0 – Manual do Usuário - Português
BitSophia - www.bitsophia.com
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
80
BitVoicer Server 1.0 – Manual do Usuário - Português
BitSophia - www.bitsophia.com
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
81
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
82
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
83
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
84
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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).
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
85
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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).
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
86
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
87
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
88
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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).
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
89
BitVoicer Server 1.0 – Manual do Usuário - Português
BitSophia - www.bitsophia.com
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).
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
90
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
91
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
92
BitVoicer Server 1.0 – Manual do Usuário - Português
BitSophia - www.bitsophia.com
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
93
BitVoicer Server 1.0 – Manual do Usuário - Português
BitSophia - www.bitsophia.com
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
94
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
95
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
96
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
97
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
98
BitVoicer Server 1.0 – Manual do Usuário - Português
BitSophia - www.bitsophia.com
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
99
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
100
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
101
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
102
BitVoicer Server 1.0 – Manual do Usuário - Português
BitSophia - www.bitsophia.com
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
103
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
104
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
105
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
106
BitVoicer Server 1.0 – Manual do Usuário - Português
BitSophia - www.bitsophia.com
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
107
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
108
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
109
BitVoicer Server 1.0 – Manual do Usuário - Português
BitSophia - www.bitsophia.com
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
110
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
111
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
112
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
113
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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).
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
114
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
115
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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).
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
116
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
117
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
118
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
119
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
120
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
121
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
122
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
123
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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);
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
124
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
// 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)
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
125
BitSophia - www.bitsophia.com


BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
126
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
127
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
// 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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
128
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
129
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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”)
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
130
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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");
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
131
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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() { }
Altere a seção “XXXXXX” do comando “set wlan phrase” com a senha da rede WiFi.
Altere a seção “XXXXXX” do comando “set wlan ssid” com o nome da rede WiFi.
No comando “set ip address” atribua o IP fixo do módulo WiFi.
Conecte o Arduino ao PC e faça o upload do código para o Arduino.
Desconecte o Arduino do PC.
Acople o módulo WiFi ao shield para XBee da Sparkfun.
Certifique-se que a chave seletora no shield está na posição “UART”.
Acople o shield ao Arduino DUE e reconecte o Arduino ao PC.
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.
2)
3)
4)
5)
6)
7)
8)
9)
10)
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
132
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
#include
#include
#include
<DAC.h>
<BVSP.h>
<BVSMic.h>
<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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
133
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
134
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
135
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
// 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());
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
136
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
137
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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”)
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
138
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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);
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
139
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
// 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;
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
140
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
}
}
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
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
141
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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:
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
142
BitSophia - www.bitsophia.com
BitVoicer Server 1.0 – Manual do Usuário - Português
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”.
Copyright © 2015 BitSophia Tecnologia Ltda - ME. Todos os direitos reservados.
143