Seu Curso

  • Full Screen
  • Wide Screen
  • Narrow Screen
  • Increase font size
  • Default font size
  • Decrease font size

Faça seu programa em Delphi falar com o usuário

Imprimir
Avaliação do Usuário: / 16
PiorMelhor 

  

Em uma aplicação interface com o usuário é tudo! Os botões, menus e formulários podem levar um bom projeto ao fracasso ou à aclamação. Fazê-los ao mesmo tempo atraentes e fáceis de entender pode tornar uma aplicação um sucesso.

 

Agora imagine as inúmeras possibilidades se pudermos colocar voz para descrever funcionalidades, campos, texto e etc. ao usuário!

 

Construindo:

 

1. Inicie um novo projeto;

 

2. No novo formulário adicione um campo de texto (TEdit) e um botão (TButton);

 

 

 

 

3. No código fonte do seu projeto, na cláusula USES insira ComOBJ;

 

 

 

 

4. Para o evento onClick do botão (clique duas vezes sobre ele para abrir o código já com o evento criado) vamos colocar o seguinte código:

 

Declare a variável voz, como abaixo.

 

var voz : OLEVariant;

 

Agora o código para o corpo do evento.

 

 voz := CreateOLEObject('SAPI.SpVoice');
 voz.Speak(Edit1.Text,0);

 

Entendendo o código:

 

Primeiro importamos a biblioteca ComOBJ que contém os tipos OLE desejados para o uso da API de fala da Microsoft (SAPI – Speech API).

 

Criamos a variável voz do tipo OLEVariant, ou seja, poderá receber qualquer objeto OLE independente do tipo que seja.

 

Em voz := CreateOLEObject('SAPI.SpVoice'); criamos o objeto voz como sendo do tipo SAPI.SpVoice, ou seja, da classe da Speech API.

 

Com voz.Speak(Edit1.Text,0); solicitamos que seja falado o conteúdo do campo de texto de forma síncrona (valor de parâmetro zero), ou seja, o programa só continua depois de falar. Caso deseje que ele fale de forma assíncrona troque o valor por 1 (um), dessa forma o programa continuará a execução dos comandos seguintes enquanto fala.

 

 

Executando:

 

Digite alguma coisa no campo de texto e clique no botão, seu programa “falará” o que você digitou:

 

 

 

 

Mas note que ele falou de um jeito muito estranho, só fala corretamente caso escreva algo em inglês. Parece óbvia a resposta, e é: isso acontece porque a API de texto-para-voz disponível por padrão no Windows está na língua inglesa.

 

Isso pode ser resolvido encontrando-se e baixando pacotes de texto-para-fala (text-to-speech) para língua portuguesa.

 

Vamos alterar um pouco nosso projeto para que seja possível selecionar a voz desejada.

 

No formulário insira uma caixa de combinação (TComboBox) e um segundo botão (TButton):

 

 

 

 

Para esse segundo botão, no evento onClick declare as seguintes variáveis:

 

var voz, vozes : OLEVariant;
i : Integer;

 

 

 

 

Agora, para o segundo botão ainda no evento onClick, insira o seguinte código:

 

voz := CreateOLEObject('SAPI.SpVoice');
vozes := voz.getVoices;
ComboBox1.Clear;
for i := 0 to vozes.Count - 1 do
ComboBox1.Items.Add(vozes.item(i).GetDescription);

 

Com isso, ao clicar no segundo botão serão carregadas todas as vozes disponíveis no sistema:

 

 

 

 

Volte ao evento onClick do primeiro botão e altere o código como demonstrado abaixo:

 

voz := CreateOLEObject('SAPI.SpVoice');
voz.Voice := voz.GetVoices.Item(combobox1.ItemIndex);
voz.Speak(Edit1.Text,0);

 

Com a linha voz.Voice := voz.GetVoices.Item(combobox1.ItemIndex); selecionamos a voz com a qual desejamos que o texto seja lido conforme seleção na caixa de seleção (ComboBox).

Comentários  

 
0 #3 ExcelenteEder Ademilton de So 01-10-2016 16:01
Muito boa dica. Funcionou belezinha. Parabens pela dica.
Por um caso você sabe salvar e abrir arquivos PDF em banco de dados pelo delphi? preciso muito disso!!!
Citar
 
 
0 #2 ErroFernando Bryan Frizzarin 13-09-2016 22:52
Só funciona até o XP.

Citando Aurino:
apresenta o erro ao executar:

floating point division by zero

o que pode ser?!
Citar
 
 
0 #1 Erro ao executarAurino 13-09-2016 21:30
apresenta o erro ao executar:

floating point division by zero

o que pode ser?!
Citar
 

Adicionar comentário


Código de segurança
Atualizar

You are here: