5

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?

Jeff Atwood
  • 63,320
  • 48
  • 150
  • 153
  • thanks François. It works with the component in a the paper you suggested (http://www.blong.com/Conferences/DCon2002/Speech/SAPI51/SAPI51.htm) –  Oct 27 '08 at 08:45

1 Answers1

4

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

Community
  • 1
  • 1
Francesca
  • 21,452
  • 4
  • 49
  • 90
  • Thanks for the paper. But, running the code you showed, in Vista, I get the error "Floating point division by zero". Did you test it in Vista? (I built it with BDS2006 in Windows XP and ran the executable in Vista) –  Oct 16 '08 at 09:32
  • I did build and test in Vista (on the same machine) – Francesca Oct 16 '08 at 17:53
  • thanks François. It works with the component in a the paper you suggested (http://www.blong.com/Conferences/DCon2002/Speech/SAPI51/SAPI51.htm) –  Oct 27 '08 at 08:45