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