Quantcast
Channel: Embarcadero Community - Embarcadero Community
Viewing all articles
Browse latest Browse all 3212

Speech input via SAPI 5.4 and TSpInProcRecoContext Problem

$
0
0

Hello there,

I am trying to use the SAPI 5.4 language input.
I have integrated SAPI 5.4 into the IDE and try to receive TSpInProcRecoContext input via the Micro.
According to MS I have to drag the micro or audio in via token and connect to SpInProcRecoContext. I fail at the handover, but why?
Can someone help me?

..

 SpInProcRecoContext1: TSpInProcRecoContext;
    SpObjectToken1: TSpObjectToken;

...

     SpVoice: Variant;
     objAudioTokenCategory : TSpObjectTokenCategory ;
     objAudioToken,
     objEngineToken,
     objProfileToken : ISpeechObjectToken;
     function startVoice: Integer;
     function stopVoice: Integer;
...


//------------------------------------------------------------------------------
// start voice
function TDM_Voice.startVoice: Integer;
var
  MyTokenCategory: WideString;
begin
  try
    SpInProcRecoContext1.EventInterests := SREAllEvents;


    MyTokenCategory := 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\AudioInput'; // SpeechCategoryAudioIn

    objAudioTokenCategory := TSpObjectTokenCategory.Create(Nil) ;
    objAudioTokenCategory.SetId(MyTokenCategory , false);

    objAudioToken := ISpeechObjectToken(objAudioTokenCategory.DefaultInterface);
    objAudioToken.SetId(objAudioTokenCategory.Default, MyTokenCategory, false);

    try
      MyTokenCategory := 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Recognizers'; // SpeechCategoryRecognizers
      objAudioTokenCategory.SetId(MyTokenCategory , false);
    except
      on E: Exception do begin // OLE-Fehler 80045002 > schon vorhanden also kein Fehler
        Logdatent_Schreiben('Fehler in StartVoice Fehler:' +E.Message);
      end;
    end;
    objEngineToken := ISpeechObjectToken(objAudioTokenCategory.DefaultInterface);
    objEngineToken.SetId(objAudioTokenCategory.Default, MyTokenCategory, false);

    try
      MyTokenCategory := 'HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\RecoProfiles'; // SpeechCategoryRecoProfiles
      objAudioTokenCategory.SetId(MyTokenCategory , false);
    except
      on E: Exception do begin // OLE-Fehler 80045002 > already exists so no error
        Logdatent_Schreiben('Fehler in StartVoice Fehler:' +E.Message);
      end;
    end;
    objProfileToken := ISpeechObjectToken(objAudioTokenCategory.DefaultInterface);
    objProfileToken.SetId(objAudioTokenCategory.Default, MyTokenCategory, false);

    SpInProcRecoContext1.Recognizer.AudioInput := objAudioToken; // Error wrong Parameter Whey ????
    SpInProcRecoContext1.Recognizer.Profile := objProfileToken;
    SpInProcRecoContext1.Recognizer.CreateRecoContext;

    SpInProcRecoContext1.Connect;

    Logdatent_Schreiben('Starte Voice');
  except
    on E: Exception do begin
      Logdatent_Schreiben('Fehler in StartVoice Fehler:' +E.Message);
    end;
  end;
end;

 

I still found this:

https://msdn.microsoft.com/en-us/library/ee125184(v=vs.85).aspx

How do I implement it in Pascal?


Viewing all articles
Browse latest Browse all 3212

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>