-         

Ergebnis 1 bis 2 von 2

Thema: Sprache (SAPI) mit Borland C++ Builder

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.09.2005
    Beiträge
    225

    Sprache (SAPI) mit Borland C++ Builder

    Anzeige

    Hallo,

    ich würde gerne eine Sprachausgabe mit einbauen. Ich programmiere auf dem PC mit dem Borland C++ Builder 6.0 und würde für die Sprachausgabe gerne das SAPI SDK von Micrsoft benutzen. Für Visual C++ habe ich schon etliche Beispiele gefunden, aber ich bekomme es mit Borland nicht zum laufen hat jmd von euch Erfahrung damit?

    Vielen Dank schonmal
    Gruß und frohe Ostern Philipp

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    43
    Beiträge
    1.517
    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 ?

    Code:
    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.
    Kapsel Klasse

    Code:
    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;
    
    ....
    Das Comobjekt

    Vielliecht hilf es ja.

    Gruß
    Home
    P: Meine Tochter (06.11.07) und Link
    M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •