Speech SDK
Bruce Weimar asked recently about calling the Microsoft Speech API from within Lispworks for Windows. I can't make it work and here is what I found: There is a web demo in the Speech SDK. The crucial parts seem to be: <SCRIPT LANGUAGE="JavaScript"> // Create the Sapi SpVoice object var VoiceObj = new ActiveXObject("Sapi.SpVoice"); .... // Speak the string in the edit box try { VoiceObj.Speak( idTextBox.value, 1 ); } catch(exception) { alert("Speak error"); } </SCRIPT> <SCRIPT FOR="window" EVENT="OnQuit()" LANGUAGE="JavaScript"> // Clean up voice object delete VoiceObj; </SCRIPT> Doesn't seem like a whole lot, does it? Heh. I go to the LWW COM manual and... (require "com") <many messages> (com:midl "sapi.idl") <many messages and then...> Error: [c:\cygwin\home\owner\temp\sapi.idl:971]: Unexpected symbol "struct" Skipping rest of statement. Line 971 and following is: [hidden] struct SPPHRASERULE { const WCHAR * pszName; I comment out the structs that begin with [hidden] but then I get in trouble with sapiaut.idl (I did not specifically request sapiaut.idl, it is used in spapi.idl): Error: [c:\cygwin\home\owner\temp\sapiaut.idl:13]: Unexpected symbol "import" Skipping rest of statement. Line 13 is the first import below: // Includes import "oaidl.idl"; import "ocidl.idl"; If I try sapiaut.idl by itself: (com:midl "sapiaut.idl") I get: Error: [c:\cygwin\home\owner\temp\sapiaut.idl:99]: Unexpected symbol "HKEY_CURRENT_USER" Skipping rest of statement. I don't think that approach is giving results so I try automation. We have to have a type library (tlb), which doesn't seem to come with the SDK, so I: $ midl /proxy nul /header nul /iid nujl /dlldata nul /win32 sapiaut.idl and get sapiaut.tlb, which I copy to the appropriate directory. I create a system file containing: (defpackage "speech" (:use "COMMON-LISP") (:export "SAY")) (defsystem speech-system (:default-pathname "c:/my/lisp/projects/" :default-type :lisp-file) :members (("sapi.lib" :type :midl-type-library-file) "speech")) and in the listener I try: (require "com") (require "automation") (load "speech.system") <goes OK> (compile-system 'speech-system) ;;; Compiling type library c:\my\lisp\projects\sapi.tlb. **++++ Error between functions: #<function COM::MAKE-COCLASS-DESCRIPTOR 21CCE53A> is called with unknown keyword :RESTRICTED amoung the arguments (:NAME SP-NOTIFY-TRANSLATOR :INTERFACES ((:INTERFACE I-SP-NOTIFY-TRANSLATOR (:DEFAULT T))) :TYPE-LIBRARY SPEECH-LIB :HELPSTRING "SpNotify" :HELPCONTEXT 0 :UUID "E2AE5372-5D40-11D2-960E-00C04F8EE628" :FOREIGN-NAME "SpNotifyTranslator" :HIDDEN T :RESTRICTED T) which is not one of (:NAME :FOREIGN-NAME :TYPE-LIBRARY :INTERFACES :APPOBJECT :HELPSTRING :HELPCONTEXT :LICENSED :VERSION :CONTROL :HIDDEN :UUID :NONCREATABLE :AGGREGATABLE). ; *** 1 error detected, no fasl file produced. I'll appreciate any tips. Thanks, Jeff __________________________________ Do you Yahoo!? Yahoo! Calendar - Free online calendar with sync to Outlook(TM). http://calendar.yahoo.com