2015-09-13 54 views
0

我有一個問題,這個COM函數我不知道什麼是正確的參數。 我得到不好的通知,從2013年VS計劃 :speakBoard什麼是成功使用的正確SAPI輸入參數?

 WAVEFORMATEX waveFORMATEX = new WAVEFORMATEX(); 
     waveFORMATEX.wFormatTag = 1; 
     waveFORMATEX.nChannels = 1; 
     waveFORMATEX.nSamplesPerSec = 44100; 
     waveFORMATEX.wBitsPerSample = 16; 
     waveFORMATEX.nBlockAlign = 4; 
     waveFORMATEX.cbSize = 0;   

     SPVTEXTFRAG SPVtextFRAG = new SPVTEXTFRAG(); 
     SPVtextFRAG.pTextStart = "one"; 
     SPVtextFRAG.ulTextLen = 100; 
     SPVtextFRAG.ulTextSrcOffset = 0; 



     SpeakBoard1.STTTSEngine se; 
     Guid rguid = new Guid("ggg"); 
     SpeakBoard1.ISpTTSEngineSite es; 
     se.Speak(255, ref rguid, ref waveFORMATEX, ref SPVtextFRAG, es); 
+0

下面是關於...的圖片 http://postimg.org/image/yndqax4b7/ – SK94

+0

直接使用SAPI沒有意義,它被System.Speech命名空間包裝得很好。如果您想說話,請使用SpeechSynthesizer類。 –

+0

使用起來很薄弱。 我想使用更好的程序,它有COM輸入,但我不能使用它。 :( – SK94

回答

-1

我面對類似的問題在C++。這是我的填充主體結構代碼:

SPVTEXTFRAG fillSPVTEXTFRAG(){ 

    SPVTEXTFRAG spvTextFrag; 
    spvTextFrag.pNext = NULL; 

    spvTextFrag.State.eAction = SPVA_Speak; 
    spvTextFrag.State.LangID = 3; 
    spvTextFrag.State.wReserved = 3; 
    spvTextFrag.State.EmphAdj = 3; 
    spvTextFrag.State.RateAdj = 3; 
    spvTextFrag.State.Volume = 100; 

    spvTextFrag.State.PitchAdj.MiddleAdj = 0; 
    spvTextFrag.State.PitchAdj.RangeAdj = 0; 

    spvTextFrag.State.SilenceMSecs = 0; 
    //spvTextFrag.State.pPhoneIds = ; 

    spvTextFrag.State.ePartOfSpeech = SPPS_Unknown;// SPPARTOFSPEECH.SPPS_Unknown; 

    spvTextFrag.State.Context.pCategory; 
    spvTextFrag.State.Context.pBefore; 
    spvTextFrag.State.Context.pAfter; 

    spvTextFrag.pTextStart = L"one"; 
    spvTextFrag.ulTextLen = 100; 
    spvTextFrag.ulTextSrcOffset = 0; 

    return spvTextFrag; 
} 

此代碼填充的呼叫ISpTTSEngine的說話方法五個參數之一。但是你也需要爲這種調用實現ISpTTSEngineSite接口。

+0

會你介意解釋代碼以備將來參考?我真的不知道這是否真的解決了問題,或者它只是當前狀態的轉儲 –

相關問題