Živě.cz o počítačích a internetu

Tipy a triky v Delphi, díl 122. - mluvící aplikace

Jan Šindelář - 7.1.2004

Přidat do našich aplikací schopnost mluvit je snadnější, než se může na první pohled zdát. Vše má totiž na starosti Microsoft Speech API, kterého využijeme pomocí OLE. Celá problematika je poměrně rozsáhlá, takže zájemce o hlubší znalosti odkáži na web Microsoftu. Technologie rozpoznávání hlasu či jeho generování je velmi zajímavá a jistě má budoucnost. Již dnes se dá slušně použít a například pro uživatele s poruchou zraku je určitě velmi užitečným přínosem a pomocí. Pozadí této technologie (nemluvím teď o programování, ale přímo o rozpoznávání hlasu jako takovém) je poměrně složitá záležitost, je pochopitelně závislá na použitém jazyku a dalších parametrech. S angličtinou tedy prozatím dosáhneme nejlepších výsledků. Pro další informace či pokročilé formy použití v programech vás ještě jednou odkazuji na web Microsoftu a v našem dnešním příkladu si ukážeme ten opravdu nejjednodušší příklad, kdy prakticky pomocí dvou řádků zdrojového kódu přinutíme počítač mluvit.

Použitý hlas a jeho parametry lze nastavit přímo v systému přes Ovládací panely. Ve Windows XP vybereme v Ovládacích panelech položku Program Speech. Zde můžeme v jednoduchém dialogu nastavit několik základních parametrů jako je rychlost řeči, použitý hlas, zvukový výstup a podobně. Zde asi bude hodně záležet na vaší verzi operačního systému či nainstalovaném software. na víceméně čisté instalaci Windows XP Professional mám k dispozici pouze "Microsoft Sam". Nastavení provedená ve zmiňovaném dialogu pak budou mít pochopitelně vliv i na naší aplikaci.

Náš zdrojový kód pak už bude velmi jednoduchý a kratičký. Použijeme knihovnu ComObj, na prázdný formulář přidáme tlačítko a jeho událost OnClick bude obsahovat dva jednoduché řádky. Prvním vytvoříme příslušný objekt a ve druhém řádku pak pomocí metody Speak přinutíme počítač mluvit.

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  voice: OLEVariant;
begin
  voice := CreateOLEObject(`SAPI.SpVoice`);
  voice.Speak(`Happy new year`, 0);
end;

end.

Pro hlubší zájemce o problematiku musím opět připomenout stránky Microsoftu. Celé Microsoft Speech API, kterého existuje více verzí, umožňuje kromě tohoto velmi primitivního použití daleko složitější "vychytávky", takže pro "vážnou práci" bude určitě dobré tématiku do hloubky prostudovat přímo u zdroje.