Search code examples
delphiwindows-vistatext-to-speech

Text to speech in Vista


I did it by creating OLE object with Delphi in 2000/NT/XP as following:

Voice := CreateOLEObject('SAPI.SpVoice');
Voice.speak(...)

But this does not work in Vista, how can I make my program simply speak some text in Vista?


Solution

  • I just tried (D2009 on Vista Home Premium) with the following code and it works!

    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComObj;
    
    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: Variant;
    begin
      Voice := CreateOLEObject('SAPI.SpVoice');
      Voice.speak('Hello World');
    end;
    
    end.
    

    FYI, there is a nice paper on using speech in Delphi programming by Brian Long...


    (Very) Late Update:

    For why it might not work in Vista and give an EZeroDivide exception outside the IDE, see this other SO question: Delphi SAPI Text-To-Speech