[fpc-pascal] Microsoft SAPI on Freepascal

James Richters james.richters at productionautomation.net
Sun Jun 25 14:51:51 CEST 2023


I am trying to get Microsoft speech synthesis to work with Freepascal.  I am
trying to follow the guide here:
 
 
I don't know what I am doing wrong.  SAPI is working on my system, because
the TTSApp Demo that comes with the 
Microsoft Speech SDK works fine.
 
Here is my test program:
 
{$mode objfpc}
 
uses
CRT, Windows, SysUtils, ComObj, Variants, OLEServer,  Classes,  ActiveX,
ShellApi;
 
var
  SavedCW: Word;
  SpVoice: Variant;
  MyWideString: WideString;
begin
  CoInitialize(nil);
  SpVoice := CreateOleObject('SAPI.SpVoice');
  // Change FPU interrupt mask to avoid SIGFPE exceptions
  MyWideString := WideString('Hello, the time is ' + TimeToStr(Now));
  Writeln(MyWideString);
  SavedCW := Get8087CW;
  try
    Set8087CW(SavedCW or $4);
    SpVoice.Speak(MyWideString, 0);
  finally
    // Restore FPU mask
    Set8087CW(SavedCW);
  end;
  Writeln('Press Any Key');
  ReadKey;
  CoUninitialize;
end.
 
Whenever my program gets to:
SpVoice.Speak(MyWideString, 0);
 
Even if I hardcode something like:
SpVoice.Speak('Hello', 0);
 
I always get:
Running "i:\programming\TTS.exe "
Hello, the time is 8:41:27
An unhandled exception occurred at $0041FC90:
EOleError: Variant does not reference an automation object
  $0041FC90
  $00424DAD
  $0040BB31
  $00401A8A  main,  line 21 of i:\programming\TTS.pas
 
I don't really understand what this means, and I can't find a complete
sample program that I can just compile and run.   I feel I must be missing
something but I don't know what it is.
 
Any help is greatly appreciated!
 
James
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20230625/9fb424a5/attachment-0001.htm>


More information about the fpc-pascal mailing list