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.
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:
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.
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.
Text To Speech.
Speech Syntesis and Speech Recognition with Speech SDK.
Speech SDK 5.1.
Speaking some text.
- Cómo lo instalo en Delphi?
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
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:
Text To Speech.
Speech Syntesis and Speech Recognition with Speech SDK.
Speech SDK 5.1.
Speaking some text.
dictar texto no puedo encontrar como, tendrás un ejemplo?
ReplyDelete