Leider nicht mit Borland C++ aber mit delphi habe ich das schon gemacht ist in meinen Roboter programmen drin. ist ein normales Com objekt also sollte es da eingendlich keine Probs geben wo ist das Problem bei dir ?
Kapsel KlasseCode:unit Speech; interface uses Windows,Sysutils,forms,olectnrs,ComObj,olectrls,AxCtrls, ActiveX,Messages,SpeechLib_TLB,classes; Type TMNSpeech = Class private MySpeak : SpVoice; m_speakFlags : SpeechVoiceSpeakFlags; MySpeaklist : TStringlist; Running : Boolean; Public Function IsRunning:Boolean; Procedure DoNext; Procedure Speak(Text:String); Constructor Init(Var Result :Integer); end; Var MNSpeech : TMNSpeech; implementation Uses Main; Var MyNotify : ISpNotifySource; Procedure NOTIFYCALLBACK(Param1:wParam;Param2:lParam);stdcall; Export; Var EventSource :ISpEventSource; Elemente,Bekommen,I : Cardinal; ElemnentListe : Array[0..9] of SPEVENT; begin MyNotify.QueryInterface(ISpEventSource,EventSource); if EventSource <> nil then begin Elemente := 10; EventSource.GetEvents(Elemente,ElemnentListe[0],Bekommen); //MainForm.Debug('Events Bekommen '+IntToStr(Bekommen)); if Bekommen > 0 then begin For I:=0 to Bekommen do begin case ElemnentListe[I].eEventId of SPEI_START_INPUT_STREAM: Begin MainForm.Debug('Stream gestartet'); MNSpeech.Running := True; end; SPEI_END_INPUT_STREAM: Begin MainForm.Debug('Stream Beendet'); MNSpeech.Running := False; MNSpeech.DoNext; end; SPEI_VOICE_CHANGE: Begin MainForm.Debug('Stimme wurde geändert'); end; SPEI_SOUND_START: Begin MainForm.Debug('Ausgabe an'); end; SPEI_SOUND_END: Begin MainForm.Debug('Ausgabe aus'); end; end; end; { SPEI_TTS_BOOKMARK = $00000004; SPEI_WORD_BOUNDARY = $00000005; SPEI_PHONEME = $00000006; SPEI_SENTENCE_BOUNDARY = $00000007; SPEI_VISEME = $00000008; SPEI_TTS_AUDIO_LEVEL = $00000009; SPEI_TTS_PRIVATE = $0000000F; SPEI_MIN_TTS = $00000001; SPEI_MAX_TTS = $0000000F; SPEI_END_SR_STREAM = $00000022; SPEI_SOUND_START = $00000023; SPEI_SOUND_END = $00000024; SPEI_PHRASE_START = $00000025; SPEI_RECOGNITION = $00000026; SPEI_HYPOTHESIS = $00000027; SPEI_SR_BOOKMARK = $00000028; SPEI_PROPERTY_NUM_CHANGE = $00000029; SPEI_PROPERTY_STRING_CHANGE = $0000002A; SPEI_FALSE_RECOGNITION = $0000002B; SPEI_INTERFERENCE = $0000002C; SPEI_REQUEST_UI = $0000002D; SPEI_RECO_STATE_CHANGE = $0000002E; SPEI_ADAPTATION = $0000002F; SPEI_START_SR_STREAM = $00000030; SPEI_RECO_OTHER_CONTEXT = $00000031; SPEI_SR_AUDIO_LEVEL = $00000032; SPEI_SR_PRIVATE = $00000034; SPEI_MIN_SR = $00000022; SPEI_MAX_SR = $00000034; SPEI_RESERVED1 = $0000001E; SPEI_RESERVED2 = $00000021; SPEI_RESERVED3 = $0000003F;} end; end; //Message Resived end; Constructor TMNSpeech.Init(Var Result :Integer); begin MySpeak := CoSpVoice.Create(); m_speakFlags := SVSFlagsAsync Or SVSFPurgeBeforeSpeak Or SVSFIsXML; MySpeak.QueryInterface(ISpNotifySource,MyNotify); MySpeak.EventInterests := SVEAllEvents; MyNotify.SetNotifyCallbackFunction(@NOTIFYCALLBACK,0,0); MySpeaklist := TStringlist.Create(); Running := false; end; Procedure TMNSpeech.Speak(Text:String); begin MySpeaklist.Add(Text); if not Running then begin Running := True; MySpeak.Speak(MySpeaklist.Strings[0],m_speakFlags); end; end; Procedure TMNSpeech.DoNext; begin if MySpeaklist.Count >0 then begin MySpeaklist.Delete(0); if MySpeaklist.Count >0 then begin MySpeak.Speak(MySpeaklist.Strings[0],m_speakFlags); end; end; end; Function TMNSpeech.IsRunning:Boolean; begin if MySpeaklist.Count = 0 then begin Result := Running; end else begin Result := True; end; end; end.
Das ComobjektCode:unit SpeechLib_TLB; // ************************************************************************ // // WARNUNG // // ------- // // Die Typen, die in dieser Datei deklariert sind, sind Daten einer Typbibliothek. // Wenn diese Typbibliothek explizit oder indirekt (via Verweis) // // re-importiert wird oder die Anweisung 'Aktualisieren' im Editor // // für Typbibliotheken beim Bearbeiten der Typbibliothek aktiviert ist // // wird der Inhalt dieser Datei neu generiert und alle // // manuellen Änderungen gehen verloren. // // ************************************************************************ // // PASTLWTR : $Revision: 1.11.1.75 $ // Datei generiert aus 16.11.2003 23:02:44 aus der unten beschriebenen Typbibliothek. // ************************************************************************ // // Typbibl.: C:\Programme\Gemeinsame Dateien\Microsoft Shared\Speech\sapi.dll // IID\LCID: {C866CA3A-32F7-11D2-9602-00C04F8EE628}\0 // Hilfedatei: // HilfsString: Microsoft Speech Object Library // Version: 5.1 // ************************************************************************ // interface uses Windows, ActiveX, Classes, Graphics, OleCtrls, StdVCL; ....
Vielliecht hilf es ja.
Gruß







Zitieren

Lesezeichen