Dev (Back & Front)ARTIGO

Faça seu software falar com .Net!

Olá amigos! Neste artigo vou contar um pouco sobre a tecnologia de voz, e mostrar como fazer a sua aplicação falar.

Programa que vamos fazerPrograma que vamos fazer

Clique aqui para dar download no código fonte.

Conhecendo um pouco do Speech.

Fazer uma aplicação falar não é algo tão recente. Lembro que minhas primeiras linhas com o Delphi (há uns bons anos atrás) já tinham um recurso de texto para voz, com uma biblioteca, ainda na versão alfa. A fala era muito estranha, e precisava ser em inglês para sair algo razoável. Tinha ainda um recurso de comando por voz, em que era necessário gastar por volta de 45 minutos repetindo frases exibidas na tela, para o computador poder “mapear” a sua fala, e depois executar os comandos que você programou.

Hoje em dia esta tecnologia melhorou bastante, mas ainda, a meu ver, não atingiu seu potencial. Há inúmeras bibliotecas que permite recursos de texto para voz (text-to-speech) e comando de voz, como por exemplo, o Speech SDK da Microsoft. O Framework do .NET, a partir da versão 3.0, ganhou uma camada de Speech. Hoje já é possível ter recursos de voz com PDAs, Celulares, Tablet PCs, Carros, Casas, Robôs e muito mais.

Assim como o XHTML, a W3C (órgão de padronização web) criou padrões para as TAGs suportadas por sistemas de Speech de mais de 70 fabricantes, incluindo a Microsoft, como o SALT, uma extensão do HMTL. O VXML (VoiceXML), um XML dedicado a sistemas que tratam aplicações de voz. Como exemplo, abaixo vemos um código HMTL, e outro VXHML

Exemplo de HTML:

<html>

<body>

<img src=”imasters.jpg”/>

</body>

</html>

Exemplo de VXHML:

<vxml version=”2.0″>

<form>

<block>

<prompt> Imasters </prompt>

</block>

</form>

</vxml>

Existem também servidores dedicados a operações voz, utilizado muito em atendimento ao consumidor. A Microsoft têm, por exemplo, o Microsoft Speech Server 2004 R2.

Exemplo e vantagens de aplicações que podem usar voz.

  • Auxílio para deficientes visual
  • E-learning
  • Leitor de Texto em Geral
  • Suporte para aplicativos móbiles
  • Segurança
  • Suporte
  • Call Center
  • Integração com PDAs
  • Reconhecimento de comandos via voz
  • Suporte a disléxicos.
  • Controle de equipamentos a longa distância, em campo.
  • Operações cirúrgicas
  • Aplicações cujo acesso é via telefone
  • Muito outros…

Conhecendo o System.Speech.Recognition, do .net Framework

Este namespace possuí algoritmos que reconhecem palavras e frases em uma entrada de áudio, e suporta padrões como o SRGS (W3C Speech Recognition Grammar Specification). Vamos supor que você queira desenvolver um programa que, via comando de voz, abra outras aplicações como o MS-Word, ou até o site do imasters.

Para que seja possível, é iniciado um processo de reconhecimento de voz, que te retornando a gramática que foi reconhecida. Esta gramática então é comparada com as frases já cadastradas e pode executar o comando correto para abrir a aplicação desejada. A SRGS possibilita o uso de duas sintaxes, uma baseada no XML, e outra, menos utilizada, o Backus-Naur form (BNF).

Vamos analizar um exemplo de código, ele não faz parte do código disponível para download, mas achei interessante colocar, para entendermos um pouco do funcionamento do System.Speech.Recognition.



''' <summary>
    ''' Função que verifica minha lista de programas, e 
    ''' </summary>
    ''' <param name="dsProgramas">
    ''' Data Set, de lista de programas, que pode vir de um XML, banco de dados...
    ''' </param>
    ''' <param name="info"></param>
    ''' <returns></returns>
    ''' <remarks>
    ''' Por exemplo, quando alguém fala "Abrir programa [nome do programa]"
    ''' O "Abrir programa" é Fixo, e [nome do programa] varia.
    ''' </remarks>
    Private Function abrirPrograma(ByVal dsProgramas As System.Data.DataSet(), ByVal ParamArray info As Integer()) As Grammar
        ' Lista que contem todos meus programas cadastrados (onde você quiser, XML, banco de cados...)
        Dim listaDePrograma As New Choices()
        Dim drPrograma As Data.DataRow

        For Each drPrograma In dsProgramas.table(0).rows
            ' Adiciono o programa, como uma opção
            listaDePrograma.Add(drPrograma("Programa"))
        Next

        ' Aqui eu compilo minha fala "FIXA" com o que o usuário quer falar.
        Dim oMinhaFala As New GrammarBuilder("Abrir programa")
        oMinhaFala.Append(listaDePrograma)

        Dim oFala As New Grammar(builder1)
        oFala.Name = "Abrir programa" ' nome da fala

        If info.Length >= 1 Then
            oFala.Priority = info(0)
        End If

        ' Retorno a minha fala.
        Return oFala
    End Function

Pré-requisitos

Este artigo foi montado nas configurações abaixo. Não foi testado em outros ambientes.

  • Framework 3.5 com VB.net
  • Visual Studio 2005.

Mãos a obra

Clique aqui para dar download no projeto de exemplo.

Para iniciarmos, abra o Visual Studio, e crie um projeto Desktop.

Adicione os controles, conforme as figura.

Clique com o botão direito em cima da aplicação em seguida em 'add reference'Clique com o botão direito em cima da aplicação em seguida em ‘add reference’

Depois adicione o objeto microsoft speech object libraryDepois adicione o objeto ‘Microsoft Speech Object Library’

Monte a tela conforme imagem abaixo

Agora, no evento do botão “falar”, adicione o código.



  ''' <summary>
    ''' Click do botão salvar
    ''' </summary>
    Private Sub btnFalar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFalar.Click

        Dim oSpeech As New SpeechLib.SpVoice
        Dim oVoz As New SpeechLib.SpObjectTokenCategory
        Dim sMensagem As String = String.Empty

        ' Recebo a mensagem
        sMensagem = txtMensagem.Text

        ' Trato minha mensagem
        If String.IsNullOrEmpty(sMensagem) Then
            txtMensagem.Text = "Olaaa! Tudo bem?"
        End If

        ' Determino a velocidade
        oSpeech.Rate = Velocidade.Value

        ' Determino o volume
        oSpeech.Volume = Volume.Value

        ' Falo
        oSpeech.Speak(sMensagem, SpeechLib.SpeechVoiceSpeakFlags.SVSFDefault)

        ' Espero acabar
        oSpeech.WaitUntilDone(oSpeech.SynchronousSpeakTimeout)

    End Sub

Links

Speech Technologies

http://www.microsoft.com/speech/speech2007/default.mspx

System.Speech

http://msdn2.microsoft.com/en-us/library/system.speech.recognition.aspx

VXML

http://www.vxml.org/

Norma (Speech Recognition Grammar Specification Version 1.0)

http://www.w3.org/TR/speech-grammar/

Considerações finais

O poder da voz com os sistemas não atingiu ainda sua potencialidade, e cada vez mais ganha mais espaço e novos recursos. Ao fazer um sistema, foque em todas as pessoas que possam utilizá-lo, a usabilidade é um fator que deve estar presente em todos os sistemas, e a voz pode ser um grande auxílio.

Cabe a todos nós descobrir novos usos para esta poderosa ferramenta.

Clique aqui para dar download no código fonte.

Espero que tenha gostado! Forte Abraço.

é engenheiro eletrônico com ênfase em telecomunicações. Residiu por mais de dois anos nos Estados Unidos e é líder de projetos da T4W. Com mais de 12 anos de experiência, participa de projetos para empresas dos mais diversos segmentos. A T4W (www.t4w.com.br) é uma empresa de tecnologia, que além de produtos voltados aos mercados de turismo e imobiliário, possui uma área de desenvolvimento que vem atendendo empresas de médio e grande porte em projetos corporativos e especiais. Thomas A. Semple também escreve periodicamente para as revistas .Net Magazine e Web Mobile. Twitter: @tomalexsemple

Ver perfil