Sprachausgabe mit SAPI
-
Hi,
bin auf der Suche nach Beispielcode für eine Beispiel TTS ENGINE.
Ich bin mir bewußt das man seine eigene Engine nich so ohne weiteres schreibt!
Es geht nur um die prinzipielle vorgehensweise bzw. die Weitergabe der SAPI befehle an die bereits fertige Sprachausgabe(20 wörter). Das Sprechen und Stoppen klappt ja auch nur Pause, Resume, setvolume setrate funktionieren noch nicht. Ich weiß nicht an welcher Stelle ich diese im Code abgreifen kann.STDMETHODIMP Engine::Speak( DWORD dwSpeakFlags, REFGUID rguidFormatId, const WAVEFORMATEX * pWaveFormatEx, const SPVTEXTFRAG* pTextFragList, ISpTTSEngineSite* pOutputSite ) { //SPDBG_FUNC( "Engine::Speak" ); //char* buffer;// Vektor zur Aufnahme der Daten HRESULT hr = S_OK; //--- Check args if( SP_IS_BAD_INTERFACE_PTR( pOutputSite ) || (SP_IS_BAD_READ_PTR( pTextFragList ))) { return E_INVALIDARG; } else { // OLLI Stimme wird initialisiert OLLI.newSession(); OLLI.newInstance(); OLLI.newVoice(); OLLI.setAudio(); m_pCurrFrag = pTextFragList; m_pNextChar = m_pCurrFrag->pTextStart; m_pEndChar = m_pNextChar + m_pCurrFrag->ulTextLen; m_ullAudioOff = 0; buffer = new char[(long)m_pEndChar * sizeof(char)+1]; if(buffer ==NULL) { return E_FAIL; } ConvertToMultiByte(m_pNextChar,buffer,(long)m_pEndChar); OLLI.readSlice(buffer); while(SUCCEEDED (hr) && !(pOutputSite->GetActions() &SPVES_ABORT)) { if ((pOutputSite->GetActions()& SPVES_ABORT)|| (!OLLI.done())) { OLLI.read(" ");//<<----HACKXX //OLLI.stop(); break; } hr= OLLI.readSlice(); if ((pOutputSite->GetActions() & SPVES_VOLUME)) { USHORT volume; // GetVolume(&volume); } } //end OLLI.deleteVoice(); delete buffer; buffer =0; if(hr==S_FALSE) {
Ich denke das ich die Virtuellen methoden einfach überschreiben muss ( so wie in Speak) oder liege ich damit falsch??
Wäre nett wenn mir jemand helfen könnte.
vielen Dank
olli