static int l_SoundPlay(lua_State * lState) { Sound ** sound = toSound(lState, 1); if(*sound) playGenericSound((*sound)->data, (*sound)->size); return 0; }
Bottle SpeechRecognizerModule::waitNextRecognition(int timeout) { yInfo() <<"Recognition: blocking mode on" ; Bottle bOutGrammar; bool gotSomething = false; double endTime = Time::now() + timeout/1000.0; interruptRecognition = false; cout << endl ; yInfo() << "=========== GO Waiting for recog! ===========" ; while(Time::now()<endTime && !gotSomething && !interruptRecognition) { //std::cout<<"."; const float ConfidenceThreshold = 0.3f; SPEVENT curEvent; ULONG fetched = 0; HRESULT hr = S_OK; m_cpRecoCtxt->GetEvents(1, &curEvent, &fetched); while (fetched > 0) { yInfo() << " received something in waitNextRecognition" ; gotSomething = true; ISpRecoResult* result = reinterpret_cast<ISpRecoResult*>(curEvent.lParam); CSpDynamicString dstrText; result->GetText(SP_GETWHOLEPHRASE, SP_GETWHOLEPHRASE, TRUE, &dstrText, NULL); string fullSentence = ws2s(dstrText); yInfo() <<fullSentence ; if (m_useTalkBack) say(fullSentence); bOutGrammar.addString(fullSentence); SPPHRASE* pPhrase = NULL; result->GetPhrase(&pPhrase); bOutGrammar.addList() = toBottle(pPhrase,&pPhrase->Rule); yInfo() <<"Sending semantic bottle : "<<bOutGrammar.toString() ; m_cpRecoCtxt->GetEvents(1, &curEvent, &fetched); if (m_forwardSound) { yarp::sig::Sound& rawSnd = m_portSound.prepare(); rawSnd = toSound(result); m_portSound.write(); } } } if(interruptRecognition) { yDebug() << "interrupted speech recognizer!"; } yInfo() <<"Recognition: blocking mode off"; return bOutGrammar; }
static int l_SoundRelease(lua_State * lState) { Sound ** sound = toSound(lState, 1); if(*sound) { free(*sound); *sound = NULL; } return 0; }
bool SpeechRecognizerModule::updateModule() { cout<<"."; USES_CONVERSION; CSpEvent event; // Process all of the recognition events while (event.GetFrom(m_cpRecoCtxt) == S_OK) { switch (event.eEventId) { case SPEI_SOUND_START: { m_bInSound = TRUE; yInfo() << "Sound in..."; break; } case SPEI_SOUND_END: if (m_bInSound) { m_bInSound = FALSE; if (!m_bGotReco) { // The sound has started and ended, // but the engine has not succeeded in recognizing anything yWarning() << "Chunk of sound detected: Recognition is null"; } m_bGotReco = FALSE; } break; case SPEI_RECOGNITION: // There may be multiple recognition results, so get all of them { m_bGotReco = TRUE; static const WCHAR wszUnrecognized[] = L"<Unrecognized>"; CSpDynamicString dstrText; if (SUCCEEDED(event.RecoResult()->GetText(SP_GETWHOLEPHRASE, SP_GETWHOLEPHRASE, TRUE, &dstrText, NULL))) { SPPHRASE* pPhrase = NULL; bool successGetPhrase = SUCCEEDED(event.RecoResult()->GetPhrase(&pPhrase)); int confidence=pPhrase->Rule.Confidence; string fullSentence = ws2s(dstrText); yInfo() <<"Recognized "<<fullSentence<<" with confidence "<<confidence ; //Send over yarp Bottle bOut; bOut.addString(fullSentence.c_str()); bOut.addInt(confidence); m_portContinuousRecognition.write(bOut); //Treat the semantic if (successGetPhrase) { //Send sound if (m_forwardSound) { yarp::sig::Sound& rawSnd = m_portSound.prepare(); rawSnd = toSound(event.RecoResult()); m_portSound.write(); } //--------------------------------------------------- 1. 1st subBottle : raw Sentence -----------------------------------------------// int wordCount = pPhrase->Rule.ulCountOfElements; string rawPhrase = ""; for(int i=0; i< wordCount; i++){ rawPhrase += ws2s(pPhrase->pElements[i].pszDisplayText) + " "; yDebug() << "word : " << ws2s(pPhrase->pElements[i].pszDisplayText) ; } yInfo() <<"Raw sentence: "<<rawPhrase ; if (&pPhrase->Rule == NULL) { yError() <<"Cannot parse the sentence!"; return true; } //--------------------------------------------------- 2. 2nd subottle : Word/Role ---------------------------------------------------// Bottle bOutGrammar; bOutGrammar.addString(rawPhrase.c_str()); bOutGrammar.addList()=toBottle(pPhrase,&pPhrase->Rule); yInfo() << "Sending semantic bottle : " << bOutGrammar.toString().c_str() ; m_portContinuousRecognitionGrammar.write(bOutGrammar); ::CoTaskMemFree(pPhrase); } if (m_useTalkBack) say(fullSentence); } } break; } } return true; }