; English forum:
; Author: DANILO
; Date: 21. January 2003
; OS: Windows
; Demo: No


; an userlibrary is needed for CallCOM(), look at PureArea.net

#CLSCTX_INPROC_SERVER  = $1
#CLSCTX_INPROC_HANDLER = $2
#CLSCTX_LOCAL_SERVER   = $4
#CLSCTX_REMOTE_SERVER  = $10
#CLSCTX_ALL = (#CLSCTX_INPROC_SERVER|#CLSCTX_INPROC_HANDLER|#CLSCTX_LOCAL_SERVER|#CLSCTX_REMOTE_SERVER)

Procedure InitSPEECH()
   Shared VoiceObject
   CoInitialize_(0)
   If CoCreateInstance_(?CLSID_SpVoice, 0, #CLSCTX_ALL, ?IID_ISpVoice, @VoiceObject) = 0
      ProcedureReturn 1
   Else
      ProcedureReturn 0
   EndIf
        DataSection
          CLSID_SpVoice:
            ;96749377-3391-11D2-9EE3-00C04F797396
            Data.l $96749377
            Data.w $3391,$11D2
            Data.b $9E,$E3,$00,$C0,$4F,$79,$73,$96
          IID_ISpVoice:
            ;6C44DF74-72B9-4992-A1EC-EF996E0422D4
            Data.l $6C44DF74
            Data.w $72B9,$4992
            Data.b $A1,$EC,$EF,$99,$6E,$04,$22,$D4
        EndDataSection
EndProcedure

Procedure Speak(String.s)
   Shared VoiceObject
   length = Len(String)*2+10
   ;*mem = AllocateMemory(1,length,0); old PB-version
   *mem = AllocateMemory(length)     ; changed by Falko
   MultiByteToWideChar_(#CP_ACP ,0,String,-1,*mem,length)
   CallCOM(80,VoiceObject,*mem,0,0)
EndProcedure

Procedure CloseSPEECH()
   Shared VoiceObject
   CallCOM(08,VoiceObject)
   CoUninitialize_()
EndProcedure


; start code
If InitSPEECH()
   Speak("Hello e b s!")               : Delay(300)
   Speak("Iam your speaking computer") : Delay(100)
   Speak("Welcome to a new world!")    : Delay(100)
   Speak("Lets dance")                 : Delay(1000)
   Speak("Greetings... DANILO")
   CloseSPEECH()
Else
   MessageRequester("ERROR","MS SPEECH API not installed",0)
EndIf
; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -