.NET

1 jul, 2010

VB .NET – Usando os recursos do Microsoft .NET Speech

Publicidade

Veremos aqui um pouco mais
sobre a
tecnologia Text-to-Speech (recurso que sintetiza voz a partir
de um
texto). Esse recurso estava presente desde as primeiras versões do
Visual
Basic e existem diversas bibliotecas de terceiros no mercado que podem
ser
usadas para tratar o recurso de texto para voz e também o do
reconhecimento de
voz.

  • Text-To-Speech: Sintetiza voz a partir de um texto.
  • Speech recognization: Converte a fala humana em
    um texto.
  • Microsoft Speech Server (MSS): Um servidor com
    suporte a recursos de voz.

  • SALT – Speech Application Language Tags: Padrão
    aberto baseado na linguagem XML usado em páginas HTML/XHTML para
    incluir
    recursos de reconhecimento de voz em aplicações web.

Quero apresentar neste artigo a nova classe System.Speech, que passou a vir
incorporada com a plataforma .NET a partir da versão 3.0. Agora você tem
ao seu
dispor uma classe com recursos de reconhecimento e síntese de voz que,
quando
usada em conjunto com o

Microsoft Speech SDK 5.1
, permite a criação de aplicações muito
interessantes.

Na primeira parte deste artigo, eu vou
mostrar como
usar a camada de Speech da plataforma .NET
para sintetizar voz a partir de
textos e depois tratarei do reconhecimento de voz.

O recursos necessários para acompanhar este
artigo
são:

  • Plataforma .NET (a
    partir da
    versão 3.0);
  • Microsoft Speech SDK 5.1;
  • Visual Basic 2010
    Express
    Edition (Pode usar a versão 2008 também).

Usando a classe

System.Speech para síntese de voz

Abra o VB 2010
Express Edition e crie um novo
projeto do tipo WIndows Forms Application
com o nome sintetizandoVoz_Speech.

A próxima tarefa é incluir uma referência à
classe
System.Speech. Para isso, clique com o botão sobre o nome do projeto e
selecione
Add Reference.

A seguir, na janela Add Reference,
abra a aba .NET
e selecione System.Speech clicando no botão
OK.

Feito isso, abra o formulário padrão form1.vb
e
inclua os seguintes namespaces no início do formulário:

  • Imports
    System.Speech
  • Imports System.Speech.Synthesis
  • Imports System.IO

Em seguida, vamos criar uma interface bem
simples,
que nos permita digitar um texto em uma caixa de texto, controlar o
volume e a
velocidade, exportar o texto como um arquivo padrão .WAV e falar
o texto
digitado. Para isso, vamos usar os seguintes controles a partir da ToolBox:

  • TextBox – txtTexto; Multiline; ScrollBars
  • TextBox – txtExportar
  • TrackBar – trkbVolume e
    trkbVelocidade
  • SaveFileDialog – svfdlg1
  • 4 Buttons – btnFalar,
    btnExportar, btnSair e btnProcurar

Veja abaixo como ficou o leiaute da
interface
criada:

Vamos agora definir o código usando os
recursos da
classe System.Speech.

A primeira que vamos fazer é declarar, no
início do
formulário form1.vb, uma instância do objeto Speech, chamado
aqui de
speaker.

Dim speaker As New SpeechSynthesizer()

A classe System.Speech.Synthesis.Speechsynthesizer

possui propriedades e método que permitem sintetizar em voz humana
uma
string, usando a linguagem padrão e a voz do sistema operacional. No meu
caso,
estou usando o Windows 7 e a voz padrão é a voz da Microsoft Ana. Se
estiver
usando o Windows XP, a voz usada será a Microsoft Sam.

Para sintetizar a voz do texto digitado,
usamos o
seguinte código no evento Click do botão – Falar:

 Private Sub btnFalar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFalar.Click

If Not txtTexto.Text = String.Empty Then
speaker.Rate = Convert.ToInt32(trkbVelocidade.Value)
speaker.Volume = Convert.ToInt32(trkbVolume.Value)
speaker.SpeakAsync(txtTexto.Text)
Else
MsgBox("Informe um texto para sintetizar.")
End If

End Sub

Esse código usa as propriedades Rate,
Volume para definir a velocidade e o volume da voz e o método
SpeakAsync
da classe Speechsynthesizer para

reproduzir o texto digitado usando a voz padrão Microsoft Ana.

Os valores para a velocidade e volume são
obtidos a
partir dos controles TrackBar, que têm os seus valores iniciais
definidos no evento Load do formulário:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
trkbVelocidade.Value = 0
trkbVolume.Value = 70
End Sub

Para gerar um arquivo padrão .wav
exportando para o
sistema de arquivos, basta informar o nome e o local onde o arquivo
deverá ser
gerado e clicar no botão Exportar. O código que realiza essa operação
está no
evento Click deste botão:

 Private Sub btnExportar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExportar.Click
If txtExportar.Text = String.Empty Then
MessageBox.Show("Informe um local para salvar o arquivo .WAV", "Arquivo não definido", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
Try
speaker.Rate = Convert.ToInt32(trkbVelocidade.Value)
speaker.Volume = Convert.ToInt32(trkbVolume.Value)
speaker.SetOutputToWaveFile(txtExportar.Text)
speaker.Speak(txtTexto.Text)
speaker.SetOutputToDefaultAudioDevice()
MessageBox.Show("Arquivo gerado com sucesso.", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch ex As Exception
MessageBox.Show("Erro ao gravar o arquivo." & vbNewLine & ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End If
End Sub

Esse código novamente usa as propriedades Rate
e
Volume da classe Speechsynthesizer para definir a velocidade
e
o volume da voz gravada.

O método
SetOutputToWaveFile() é que vai gerar o arquivo .wav com o
nome e o local
indicados usando o padrão do seu dispositivo de áudio.

A seguir temos um exemplo da execução da
opção para
gerar e exportar um arquivo .wav gerado a partir do texto
digitado:

Pegue o jogo completo aqui:

sintetizandoVoz_Speech.zip

Eu sei, é penas VB .NET, mas eu
gosto…