Thursday, 13 August 2009

Speech SDK con Delphi

Hoy os traigo un componente muy interesante, Speech SDK (Microsoft Speech Object Library), una API de windows que permite dictar texto por los altavoces del ordenador. Ésta idea me vino el otro día mientras miraba una película dónde uno de los testigos no quería que su voz se viera involucrada en la declaración. Para ello, utilizaron un ordenador, un software para la transcripción y unos altavoces. De ésta manera el testigo, escribía todo lo que quería decir y la voz del ordenador decía todas esas palabras y frases. Pues bien, después de investigar un poco y consultar las diferentes API's de las que dispone nuestro SO, ya sea Windows XP o vista, he encontrado la API Speech SDK que me permite hacer esta pijada.
  • Cómo lo instalo en Delphi?
He encontrado varios ejemplos de la instalación del componente pero solo para Delphi 6 y 7, y la verdad es que para Delphi 2007 o 2009, la cosa ha cambiado bastante. Pues bien, después de interminables pruebas, he conseguido realizar una mini aplicación que es capaz de decir lo que entro en un Edit box, y la verdad es que una vez lo tenemos todo instalado, solo es insertar el componente necesario y ejecutar uno de sus métodos.

Primeros pasos:

Una vez tengo abierto el delphi, creo un nuevo package (File -> New -> Package - Delhpi for win32), que en este caso voy a llamar TSpeechSDK50, ya que utilizaré la Microsoft Speech Object Library 5.0. Podría utilizar la 5.1, pero es la que me viene con el windows. En uno de los enlaces anteriores os he dejado la página de la descarga de ésta API.


Ahora viene la parte importante, tengo que importar la librería que necesito. Por lo tanto, vamos a Component -> Import Component, y dentro del asistente, selecciono Import a type Library. Ahora continuo con el asistente y selecciono la librería que me interesa:

Ahora en el siguiente paso, tenemos que seleccionar en que paleta queremos los componentes y sobretodo marcar la casilla "Generate Component Wrappers".


Ahora, para finalizar, importamos éste componente a nuestro package:

El proyecto quedará de la siguiente manera:

Ahora, tenemos en nuestro proyecto el fichero SpeechLib_TLB.pas:

Ahora que ya lo tenemos todo, viene la parte más importante, hacemos un Compile, un Build y un Install, y nos tiene que aparecer el siguiente mensaje indicando que se han instalado todos los componentes correctamente:

Bien, si ahora nos fijamos en nuestra paleta de componentes, veremos como han aparecido todos éstos componentes:



  • Creando la aplicación Thundax Speech Dictator
Ahora, solo tenemos que crear una pequeña aplicación donde utilizaremos éstos componentes. Aquí os dejo mi aplicación Thundax Speech Dictator, que tiene un TMemo el cual todas las palabras que contengan serán reproducidas por el altavoz. El idioma predefinido es el inglés, por lo tanto lo voy a dejar así. Si quisiéramos otros idiomas o voces, solo hay que descargarlos de la web de microsoft.

La nueva aplicación, también debe contener el fichero SpeechLib_TLB.pas ya que las declaraciones de diversas variables están contenidas dentro de ésta librería. Por lo tanto mi ejemplo tiene la siguiente forma:

El código fuente de la aplicación es aún más sencillo, solo tenemos que emplastar el componente TSPVoice y ejecutar su método Speak.

unit Unit3;

interface

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, SpeechLib_TLB, OleServer;

type
    TForm3 = class(TForm)
        Button1: TButton;
        SpVoice1: TSpVoice;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
    private
        { Private declarations }
    public
        { Public declarations }
    end;

var
    Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
var
    iSpeechFlags: Integer;
begin
    if Memo1.Text = '' then
        exit;
    iSpeechFlags := SVSFlagsAsync or SVSFPurgeBeforeSpeak or SVSFIsXML;
    SpVoice1.Speak(Memo1.Text, iSpeechFlags);
end;

end.


Ahora, una vez tenemos la aplicación en funcionamiento, y le damos al Play, escucharemos el texto escrito en el TMemo:


En mi opinión, es una buena API, disponemos de muchas funcionalidades ya sea reproducir un texto o reconocer incluso las palabras que nosotros decimos. Solo hay que explorar un poco más la potencia de ésta API, incluyendo diferentes idiomas e incluso añadiendo diferentes voces. Todo ésto y más en Microsoft. Si probáis la aplicación en Windows XP o en Windows Vista, encontraréis bastante diferéncia, ya que la voz que podemos oir en windows vista, es de una mujer y se entiende mucho mejor.
  • Enlaces de interés:
Installing the Microsoft SAPI Speech SDK.
Text To Speech.
Speech Syntesis and Speech Recognition with Speech SDK.
Speech SDK 5.1.
Speaking some text.

0 comments:

Post a Comment