// start = 1: speaking status changed to start, start = 0: status changed to stop void cSemaineUserinfoSender::sendSpeakingStatus( cComponentMessage *_msg, int start ) { const char *strtmp = "stop"; if (start) strtmp = "start"; std::string statusStr(strtmp); char strtmp2[50]; sprintf(strtmp2,"%ld",smileTimeToSemaineTime(_msg->userTime1)); std::string startTm(strtmp2); // Create and fill a simple EMMA EmotionML document XERCESC_NS::DOMDocument * document = XMLTool::newDocument(EMMA::E_EMMA, EMMA::namespaceURI, EMMA::version); XMLTool::setPrefix(document->getDocumentElement(), "emma"); XERCESC_NS::DOMElement * interpretation = XMLTool::appendChildElement(document->getDocumentElement(), EMMA::E_INTERPRETATION); XMLTool::setAttribute(interpretation, EMMA::A_OFFSET_TO_START, startTm); XMLTool::setAttribute(interpretation, EMMA::A_DURATION, "0"); XMLTool::setPrefix(interpretation, "emma"); XERCESC_NS::DOMElement * speaking = XMLTool::appendChildElement(interpretation, SemaineML::E_SPEAKING, SemaineML::namespaceURI); XMLTool::setAttribute(speaking, SemaineML::A_STATUS_CHANGE, strtmp); XMLTool::setPrefix(speaking, "semaine"); // Now send it sendDocument(document); }
// start = 1: speaking status changed to start, start = 0: status changed to stop void cSemaineUserinfoSender::sendOffTalk( cComponentMessage *msg ) { char strtmp[CMSG_textLen]; sprintf(strtmp,"%ld", smileTimeToSemaineTime(msg->userTime1)); std::string startTm(strtmp); std::string talk_dir = "unknown"; if (msg->msgtext != NULL) { if (msg->msgtext[0] == 'o') { talk_dir = "on"; } else if (msg->msgtext[0] == 'n') { talk_dir = "off"; } } // Create and fill a simple EMMA EmotionML document XERCESC_NS::DOMDocument * document = XMLTool::newDocument(EMMA::E_EMMA, EMMA::namespaceURI, EMMA::version); XMLTool::setPrefix(document->getDocumentElement(), "emma"); XERCESC_NS::DOMElement * interpretation = XMLTool::appendChildElement(document->getDocumentElement(), EMMA::E_INTERPRETATION); XMLTool::setAttribute(interpretation, EMMA::A_OFFSET_TO_START, startTm); XMLTool::setAttribute(interpretation, EMMA::A_DURATION, "0"); XMLTool::setPrefix(interpretation, "emma"); XERCESC_NS::DOMElement * offtalk = XMLTool::appendChildElement(interpretation, SemaineML::E_OFFTALK, SemaineML::namespaceURI); XMLTool::setAttribute(offtalk, SemaineML::A_DIRECTION, talk_dir); XMLTool::setPrefix(offtalk, "semaine"); // Now send it sendDocument(document); }
void cSemaineEmmaSender::sendSingleEmotionDim( cComponentMessage *_msg, const char * set, std::string dim ) { char strtmp[50]; sprintf(strtmp,"%.2f",_msg->floatData[0]); std::string valStr(strtmp); sprintf(strtmp,"%ld",smileTimeToSemaineTime(_msg->userTime1)); std::string startTm(strtmp); sprintf(strtmp,"%ld",(long long)round((_msg->userTime2 - _msg->userTime1)*1000.0)); std::string duration(strtmp); // Create and fill a simple EMMA EmotionML document XERCESC_NS::DOMDocument * document = XMLTool::newDocument(EMMA::E_EMMA, EMMA::namespaceURI, EMMA::version); XERCESC_NS::DOMElement * interpretation = XMLTool::appendChildElement(document->getDocumentElement(), EMMA::E_INTERPRETATION); XMLTool::setAttribute(interpretation, EMMA::A_OFFSET_TO_START, startTm); XMLTool::setAttribute(interpretation, EMMA::A_DURATION, duration); XMLTool::setPrefix(interpretation, "emma"); XERCESC_NS::DOMElement * emotion = XMLTool::appendChildElement(interpretation, EmotionML::E_EMOTION, EmotionML::namespaceURI); XMLTool::setPrefix(emotion, "emotion"); XERCESC_NS::DOMElement * dimensions = XMLTool::appendChildElement(emotion, EmotionML::E_DIMENSIONS, EmotionML::namespaceURI); XMLTool::setAttribute(dimensions, EmotionML::A_SET, set); XMLTool::setPrefix(dimensions, "emotion"); XERCESC_NS::DOMElement * dimension = XMLTool::appendChildElement(dimensions, dim, EmotionML::namespaceURI); XMLTool::setAttribute(dimension, EmotionML::A_VALUE, valStr); XMLTool::setPrefix(dimension, "emotion"); // Now send it sendDocument(document); }
void cSemaineEmmaSender::sendPitchDirection( cComponentMessage *_msg ) { /* <emma:emma version="1.0" xmlns:emma="http://www.w3.org/2003/04/emma"> <emma:interpretation emma:offset-to-start="12345" emma:duration="444" emma:confidence="0.3"> <semaine:pitch xmlns:semaine="http://www.semaine-project.eu/semaineml" direction="rise"/> </emma:interpretation> </emma:emma> */ const char *strtmp = "rise"; // _msg->intData[0] == 0 if (_msg->intData[0] == 1) strtmp = "fall"; else if (_msg->intData[0] == 2) strtmp = "rise-fall"; else if (_msg->intData[0] == 3) strtmp = "fall-rise"; std::string pitchStr(strtmp); char strtmp2[50]; sprintf(strtmp2,"%ld",smileTimeToSemaineTime(_msg->userTime1)); std::string startTm(strtmp2); // Create and fill a simple EMMA EmotionML document XERCESC_NS::DOMDocument * document = XMLTool::newDocument(EMMA::E_EMMA, EMMA::namespaceURI, EMMA::version); XERCESC_NS::DOMElement * interpretation = XMLTool::appendChildElement(document->getDocumentElement(), EMMA::E_INTERPRETATION); XMLTool::setAttribute(interpretation, EMMA::A_OFFSET_TO_START, startTm); XMLTool::setAttribute(interpretation, EMMA::A_DURATION, "0"); XMLTool::setPrefix(interpretation, "emma"); XERCESC_NS::DOMElement * pitchDir = XMLTool::appendChildElement(interpretation, SemaineML::E_PITCH, SemaineML::namespaceURI); XMLTool::setAttribute(pitchDir, SemaineML::A_DIRECTION, strtmp); XMLTool::setPrefix(pitchDir, "semaine"); // Now send it sendDocument(document); }
void cSemaineUserinfoSender::sendGender( cComponentMessage *_msg ) { /* <emma:emma version="1.0" xmlns:emma="http://www.w3.org/2003/04/emma"> <emma:interpretation emma:offset-to-start="12345" emma:confidence="0.3"> <semaine:gender name="female" xmlns:semaine="http://www.semaine-project.eu/semaineml"/> </emma:interpretation> </emma:emma> */ const char *strtmp = "female"; // manage gender result history buffer if (_msg->msgtext[0] == 'M') { gender[gPtr] = GENDER_M; } else { gender[gPtr] = GENDER_F; } gPtr++; if (gPtr >= N_GENDER_HISTORY) gPtr = 0; // count # male/female in gender result history int m=0,f=0; int i; for (i=0; i<N_GENDER_HISTORY; i++) { if (gender[i] == GENDER_M) m++; else if (gender[i] == GENDER_F) f++; } // majority vote on gender if (m>f) { strtmp = "male"; } // fill XML document std::string genderStr(strtmp); char strtmp2[50]; sprintf(strtmp2,"%ld",smileTimeToSemaineTime(_msg->userTime1)); std::string startTm(strtmp2); // Create and fill a simple EMMA EmotionML document XERCESC_NS::DOMDocument * document = XMLTool::newDocument(EMMA::E_EMMA, EMMA::namespaceURI, EMMA::version); XMLTool::setPrefix(document->getDocumentElement(), "emma"); XERCESC_NS::DOMElement * interpretation = XMLTool::appendChildElement(document->getDocumentElement(), EMMA::E_INTERPRETATION); XMLTool::setAttribute(interpretation, EMMA::A_OFFSET_TO_START, startTm); XMLTool::setAttribute(interpretation, EMMA::A_DURATION, "0"); XMLTool::setPrefix(interpretation, "emma"); XERCESC_NS::DOMElement * gender = XMLTool::appendChildElement(interpretation, SemaineML::E_GENDER, SemaineML::namespaceURI); XMLTool::setAttribute(gender, SemaineML::A_NAME, strtmp); XMLTool::setPrefix(gender, "semaine"); // Now send it sendDocument(document); }
void sendSingle(void) { sendText(); if (estgbconf.imgfile) sendPicture(estgbconf.imgfile); if (estgbconf.videofile) sendVideo(estgbconf.videofile); if (estgbconf.audiofile) sendAudio(estgbconf.audiofile); if (estgbconf.docfile) sendDocument(estgbconf.docfile); }
void cSemaineUserinfoSender::sendSpeakerId( cComponentMessage *msg ) { /* <emma:emma version="1.0" xmlns:emma="http://www.w3.org/2003/04/emma"> <emma:interpretation emma:offset-to-start="12345" emma:confidence="0.3"> <semaine:speakerid id="1" name="spkA" modality="" xmlns:semaine="http://www.semaine-project.eu/semaineml"/> </emma:interpretation> </emma:emma> */ // fill XML document std::string idStr = "unknown"; std::string idStrInt = "0"; char strtmp2[50]; if (msg->msgtext != NULL) { idStr = msg->msgtext; } sprintf(strtmp2, "%ld", msg->intData[0]); idStrInt = strtmp2; sprintf(strtmp2,"%ld",smileTimeToSemaineTime(msg->userTime1)); std::string startTm(strtmp2); // Create and fill a simple EMMA EmotionML document XERCESC_NS::DOMDocument * document = XMLTool::newDocument(EMMA::E_EMMA, EMMA::namespaceURI, EMMA::version); XMLTool::setPrefix(document->getDocumentElement(), "emma"); XERCESC_NS::DOMElement * interpretation = XMLTool::appendChildElement(document->getDocumentElement(), EMMA::E_INTERPRETATION); XMLTool::setAttribute(interpretation, EMMA::A_OFFSET_TO_START, startTm); XMLTool::setAttribute(interpretation, EMMA::A_DURATION, "0"); XMLTool::setPrefix(interpretation, "emma"); XERCESC_NS::DOMElement * id = XMLTool::appendChildElement(interpretation, SemaineML::E_SPEAKER, SemaineML::namespaceURI); XMLTool::setAttribute(id, SemaineML::A_NAME, idStr); XMLTool::setAttribute(id, SemaineML::A_VALUE, idStrInt); if (msg->msgname[0] == 'a') { // audio XMLTool::setAttribute(id, SemaineML::A_MODALITY, "audio"); } else if (msg->msgname[0] == 'v') { // video XMLTool::setAttribute(id, SemaineML::A_MODALITY, "video"); } XMLTool::setPrefix(id, "semaine"); // Now send it sendDocument(document); }
void cSemaineEmotionSender::sendDimension( cComponentMessage *_msg, std::string dimensionStr, std::string dimensionVoc ) { // range check: if (_msg->floatData[0] < 0) _msg->floatData[0] = 0.0; if (_msg->floatData[0] > 1) _msg->floatData[0] = 1.0; //-- char strtmp[50]; sprintf(strtmp,"%.2f",_msg->floatData[0]); std::string dimVal(strtmp); sprintf(strtmp,"%ld",smileTimeToSemaineTime(_msg->userTime1)); std::string startTm(strtmp); sprintf(strtmp,"%ld",(long long)round((_msg->userTime2 - _msg->userTime1)*1000.0)); std::string duration(strtmp); sprintf(strtmp,"%s",(const char *)(_msg->custData2)); std::string codername(strtmp); // Create and fill a simple EMMA EmotionML document XERCESC_NS::DOMDocument * document = XMLTool::newDocument(EMMA::E_EMMA, EMMA::namespaceURI, EMMA::version); XMLTool::setPrefix(document->getDocumentElement(), "emma"); XERCESC_NS::DOMElement * interpretation = XMLTool::appendChildElement(document->getDocumentElement(), EMMA::E_INTERPRETATION); XMLTool::setAttribute(interpretation, EMMA::A_OFFSET_TO_START, startTm); XMLTool::setAttribute(interpretation, EMMA::A_DURATION, duration); XMLTool::setAttribute(interpretation, EMMA::A_CONFIDENCE, "1.0"); XMLTool::setPrefix(interpretation, "emma"); XERCESC_NS::DOMElement * emotion = XMLTool::appendChildElement(interpretation, EmotionML::E_EMOTION, EmotionML::namespaceURI); XMLTool::setAttribute(emotion, EmotionML::A_DIMENSION_VOCABULARY, dimensionVoc); XMLTool::setPrefix(emotion, "emotion"); XERCESC_NS::DOMElement * dimension = XMLTool::appendChildElement(emotion, EmotionML::E_DIMENSION, EmotionML::namespaceURI); XMLTool::setAttribute(dimension, EmotionML::A_NAME, dimensionStr); XMLTool::setAttribute(dimension, EmotionML::A_VALUE, dimVal); XMLTool::setPrefix(dimension, "emotion"); XERCESC_NS::DOMElement * info = XMLTool::appendChildElement(emotion, EmotionML::E_INFO); XERCESC_NS::DOMElement * coder = XMLTool::appendChildElement(info, "predictor"); XMLTool::setAttribute(coder, "value", codername); XMLTool::setPrefix(coder, "emotion"); XMLTool::setPrefix(info, "emotion"); sendDocument(document); }
void cSemaineWordSender::sendKeywords( cComponentMessage *_msg ) { int i; juliusResult *k = (juliusResult *)(_msg->custData); if (k==NULL) return; int nW = 0; for (i=0; i<k->numW; i++) { // check for non-verbals.... and remove them, only preceed if words are left if (k->word[i][0] != '*') nW++; } if (nW == 0) return; char strtmp[150]; sprintf(strtmp,"%.2f",_msg->floatData[0]); std::string valStr(strtmp); long long startTime = smileTimeToSemaineTime(_msg->userTime1); sprintf(strtmp,"%ld",startTime); std::string startTm(strtmp); sprintf(strtmp,"%ld",(long long)round((_msg->userTime2 - _msg->userTime1)*1000.0)); std::string duration(strtmp); // Create and fill a simple EMMA document XERCESC_NS::DOMDocument * document = XMLTool::newDocument(EMMA::E_EMMA, EMMA::namespaceURI, EMMA::version); XMLTool::setPrefix(document->getDocumentElement(), "emma"); XERCESC_NS::DOMElement * sequence = XMLTool::appendChildElement(document->getDocumentElement(), EMMA::E_SEQUENCE); XMLTool::setAttribute(sequence, EMMA::A_OFFSET_TO_START, startTm); XMLTool::setAttribute(sequence, EMMA::A_DURATION, duration); XMLTool::setPrefix(sequence, "emma"); for (i=0; i<k->numW; i++) { // split combined keywords (TALK_TO_POPPY) etc. at the special character "_" and put them in individual tags /* char * tr = strdup(k->word[i]); char * tmp = tr; char * x = NULL; do { x = (char *)strchr(tmp, '_'); // separate at '_' if (x!=NULL) { *x = 0; } // remove spaces //while (*tmp==' ') { tmp++; } //size_t l = strlen(tmp); //while (tmp[l-1] == ' ') { tmp[l-1] = 0; l--; } // append an xml keyword tag XERCESC_NS::DOMElement * interpretation = XMLTool::appendChildElement(sequence, EMMA::E_INTERPRETATION); sprintf(strtmp,"%ld",startTime + (long long)round((k->start[i])*1000.0)); std::string offs(strtmp); sprintf(strtmp,"%s",tmp); std::string keyword(strtmp); sprintf(strtmp,"%.3f",k->conf[i]); std::string confidence(strtmp); XMLTool::setAttribute(interpretation, EMMA::A_OFFSET_TO_START, offs); XMLTool::setAttribute(interpretation, EMMA::A_TOKENS, keyword); XMLTool::setAttribute(interpretation, EMMA::A_CONFIDENCE, confidence); XMLTool::setPrefix(interpretation, "emma"); // analyse next part of string, if present if (x != NULL) { tmp = x+1; } } while (x != NULL); free(tr); */ // one word: if (k->word[i][0] != '*') { XERCESC_NS::DOMElement * interpretation = XMLTool::appendChildElement(sequence, EMMA::E_INTERPRETATION); sprintf(strtmp,"%ld",startTime + (long long)round((k->start[i])*1000.0)); std::string offs(strtmp); sprintf(strtmp,"%s",k->word[i]); std::string keyword(strtmp); sprintf(strtmp,"%.3f",k->conf[i]); std::string confidence(strtmp); XMLTool::setAttribute(interpretation, EMMA::A_OFFSET_TO_START, offs); XMLTool::setAttribute(interpretation, EMMA::A_TOKENS, keyword); XMLTool::setAttribute(interpretation, EMMA::A_CONFIDENCE, confidence); XMLTool::setPrefix(interpretation, "emma"); } } // Now send it sendDocument(document); }
void cSemaineEmmaSender::sendInterestC( cComponentMessage *_msg ) { char strtmp[50]; sprintf(strtmp,"%.2f",_msg->floatData[0]); std::string interestStr(strtmp); // Create and fill a simple EMMA EmotionML document XERCESC_NS::DOMDocument * document = XMLTool::newDocument(EMMA::E_EMMA, EMMA::namespaceURI, EMMA::version); sprintf(strtmp,"%ld",smileTimeToSemaineTime(_msg->userTime1)); std::string startTm(strtmp); sprintf(strtmp,"%ld",(long long)round((_msg->userTime2 - _msg->userTime1)*1000.0)); std::string duration(strtmp); XERCESC_NS::DOMElement * oneof = XMLTool::appendChildElement(document->getDocumentElement(), EMMA::E_ONEOF); XMLTool::setAttribute(oneof, EMMA::A_OFFSET_TO_START, startTm); XMLTool::setAttribute(oneof, EMMA::A_DURATION, duration); XMLTool::setPrefix(oneof, "emma"); XERCESC_NS::DOMElement * interpretation0 = XMLTool::appendChildElement(oneof, EMMA::E_INTERPRETATION); sprintf(strtmp,"%.3f",((double*)(_msg->custData))[0]); std::string conf0(strtmp); XMLTool::setAttribute(interpretation0, EMMA::A_CONFIDENCE, conf0); XMLTool::setPrefix(interpretation0, "emma"); XERCESC_NS::DOMElement * emotion0 = XMLTool::appendChildElement(interpretation0, EmotionML::E_EMOTION, EmotionML::namespaceURI); XMLTool::setPrefix(emotion0, "emotion"); XERCESC_NS::DOMElement * category0 = XMLTool::appendChildElement(emotion0, EmotionML::E_CATEGORY, EmotionML::namespaceURI); XMLTool::setAttribute(category0, EmotionML::A_SET, "interestLevels"); XMLTool::setAttribute(category0, EmotionML::A_NAME, "bored"); XMLTool::setPrefix(category0, "emotion"); XERCESC_NS::DOMElement * interpretation1 = XMLTool::appendChildElement(oneof, EMMA::E_INTERPRETATION); sprintf(strtmp,"%.3f",((double*)(_msg->custData))[1]); std::string conf1(strtmp); XMLTool::setAttribute(interpretation1, EMMA::A_CONFIDENCE, conf1); XMLTool::setPrefix(interpretation1, "emma"); XERCESC_NS::DOMElement * emotion1 = XMLTool::appendChildElement(interpretation1, EmotionML::E_EMOTION, EmotionML::namespaceURI); XMLTool::setPrefix(emotion1, "emotion"); XERCESC_NS::DOMElement * category1 = XMLTool::appendChildElement(emotion1, EmotionML::E_CATEGORY, EmotionML::namespaceURI); XMLTool::setAttribute(category1, EmotionML::A_SET, "interestLevels"); XMLTool::setAttribute(category1, EmotionML::A_NAME, "neutral"); XMLTool::setPrefix(category1, "emotion"); XERCESC_NS::DOMElement * interpretation2 = XMLTool::appendChildElement(oneof, EMMA::E_INTERPRETATION); sprintf(strtmp,"%.3f",((double*)(_msg->custData))[2]); std::string conf2(strtmp); XMLTool::setAttribute(interpretation2, EMMA::A_CONFIDENCE, conf2); XMLTool::setPrefix(interpretation2, "emma"); XERCESC_NS::DOMElement * emotion2 = XMLTool::appendChildElement(interpretation2, EmotionML::E_EMOTION, EmotionML::namespaceURI); XMLTool::setPrefix(emotion2, "emotion"); XERCESC_NS::DOMElement * category2 = XMLTool::appendChildElement(emotion2, EmotionML::E_CATEGORY, EmotionML::namespaceURI); XMLTool::setAttribute(category2, EmotionML::A_SET, "interestLevels"); XMLTool::setAttribute(category2, EmotionML::A_NAME, "interested"); XMLTool::setPrefix(category2, "emotion"); // Now send it sendDocument(document); }
void cSemaineEmotionSender::sendInterestC( cComponentMessage *_msg ) { char strtmp[50]; sprintf(strtmp,"%.2f",_msg->floatData[0]); std::string interestStr(strtmp); // Create and fill a simple EMMA EmotionML document XERCESC_NS::DOMDocument * document = XMLTool::newDocument(EMMA::E_EMMA, EMMA::namespaceURI, EMMA::version); XMLTool::setPrefix(document->getDocumentElement(), "emma"); sprintf(strtmp,"%ld",smileTimeToSemaineTime(_msg->userTime1)); std::string startTm(strtmp); sprintf(strtmp,"%ld",(long long)round((_msg->userTime2 - _msg->userTime1)*1000.0)); std::string duration(strtmp); XERCESC_NS::DOMElement * oneof = XMLTool::appendChildElement(document->getDocumentElement(), EMMA::E_ONEOF); XMLTool::setAttribute(oneof, EMMA::A_OFFSET_TO_START, startTm); XMLTool::setAttribute(oneof, EMMA::A_DURATION, duration); XMLTool::setPrefix(oneof, "emma"); double v = 0.0; //TODO: update this to new classification result message! check that probEstim is not NULL....! XERCESC_NS::DOMElement * interpretation0 = XMLTool::appendChildElement(oneof, EMMA::E_INTERPRETATION); if (_msg->custData != NULL) v = ((double*)(_msg->custData))[0]; sprintf(strtmp,"%.3f",v); std::string conf0(strtmp); XMLTool::setAttribute(interpretation0, EMMA::A_CONFIDENCE, conf0); XMLTool::setPrefix(interpretation0, "emma"); XERCESC_NS::DOMElement * emotion0 = XMLTool::appendChildElement(interpretation0, EmotionML::E_EMOTION, EmotionML::namespaceURI); XMLTool::setAttribute(emotion0, EmotionML::A_CATEGORY_VOCABULARY , EmotionML::VOC_SEMAINE_INTEREST_CATEGORY_DEFINITION); XMLTool::setPrefix(emotion0, "emotion"); XERCESC_NS::DOMElement * category0 = XMLTool::appendChildElement(emotion0, EmotionML::E_CATEGORY, EmotionML::namespaceURI); XMLTool::setAttribute(category0, EmotionML::A_NAME, "bored"); XMLTool::setPrefix(category0, "emotion"); XERCESC_NS::DOMElement * interpretation1 = XMLTool::appendChildElement(oneof, EMMA::E_INTERPRETATION); if (_msg->custData != NULL) v = ((double*)(_msg->custData))[1]; else v = 0; sprintf(strtmp,"%.3f",v); std::string conf1(strtmp); XMLTool::setAttribute(interpretation1, EMMA::A_CONFIDENCE, conf1); XMLTool::setPrefix(interpretation1, "emma"); XERCESC_NS::DOMElement * emotion1 = XMLTool::appendChildElement(interpretation1, EmotionML::E_EMOTION, EmotionML::namespaceURI); XMLTool::setAttribute(emotion1, EmotionML::A_CATEGORY_VOCABULARY , EmotionML::VOC_SEMAINE_INTEREST_CATEGORY_DEFINITION); XMLTool::setPrefix(emotion1, "emotion"); XERCESC_NS::DOMElement * category1 = XMLTool::appendChildElement(emotion1, EmotionML::E_CATEGORY, EmotionML::namespaceURI); XMLTool::setAttribute(category1, EmotionML::A_NAME, "neutral"); XMLTool::setPrefix(category1, "emotion"); XERCESC_NS::DOMElement * interpretation2 = XMLTool::appendChildElement(oneof, EMMA::E_INTERPRETATION); if (_msg->custData != NULL) v = ((double*)(_msg->custData))[2]; else v = 0; sprintf(strtmp,"%.3f",v); std::string conf2(strtmp); XMLTool::setAttribute(interpretation2, EMMA::A_CONFIDENCE, conf2); XMLTool::setPrefix(interpretation2, "emma"); XERCESC_NS::DOMElement * emotion2 = XMLTool::appendChildElement(interpretation2, EmotionML::E_EMOTION, EmotionML::namespaceURI); XMLTool::setAttribute(emotion2, EmotionML::A_CATEGORY_VOCABULARY , EmotionML::VOC_SEMAINE_INTEREST_CATEGORY_DEFINITION); XMLTool::setPrefix(emotion2, "emotion"); XERCESC_NS::DOMElement * category2 = XMLTool::appendChildElement(emotion2, EmotionML::E_CATEGORY, EmotionML::namespaceURI); XMLTool::setAttribute(category2, EmotionML::A_NAME, "interested"); XMLTool::setPrefix(category2, "emotion"); // Now send it sendDocument(document); }
void cSemaineEmotionSender::sendDimensionsFSRE_I( cComponentMessage *_msg ) { // range check: //if (_msg->floatData[0] < 0) _msg->floatData[0] = 0.0; //if (_msg->floatData[0] > 1) _msg->floatData[0] = 1.0; //-- char strtmp[50]; sprintf(strtmp,"%.2f",_msg->floatData[0]); std::string dimVal(strtmp); sprintf(strtmp,"%ld",smileTimeToSemaineTime(_msg->userTime1)); std::string startTm(strtmp); sprintf(strtmp,"%ld",(long long)round((_msg->userTime2 - _msg->userTime1)*1000.0)); std::string duration(strtmp); sprintf(strtmp,"%s",(const char *)(_msg->msgname)); std::string codername(strtmp); // Create and fill a simple EMMA EmotionML document XERCESC_NS::DOMDocument * document = XMLTool::newDocument(EMMA::E_EMMA, EMMA::namespaceURI, EMMA::version); XMLTool::setPrefix(document->getDocumentElement(), "emma"); XERCESC_NS::DOMElement * interpretation = XMLTool::appendChildElement(document->getDocumentElement(), EMMA::E_INTERPRETATION); XMLTool::setAttribute(interpretation, EMMA::A_OFFSET_TO_START, startTm); XMLTool::setAttribute(interpretation, EMMA::A_DURATION, duration); XMLTool::setAttribute(interpretation, EMMA::A_CONFIDENCE, "1.0"); XMLTool::setPrefix(interpretation, "emma"); XERCESC_NS::DOMElement * emotion = XMLTool::appendChildElement(interpretation, EmotionML::E_EMOTION, EmotionML::namespaceURI); XMLTool::setAttribute(emotion, EmotionML::A_DIMENSION_VOCABULARY, EmotionML::VOC_FSRE_DIMENSION_DEFINITION); XMLTool::setAttribute(emotion, EmotionML::A_MODALITY, "voice"); XMLTool::setPrefix(emotion, "emotion"); int i; int intIdx = -1; sClassifierResults * re = ((sClassifierResults*)(_msg->custData)); for (i=0; i<re->nFilled; i++) { if (!strcmp(re->resnameA[i],intensityStr)) { intIdx = i; continue; } char strtmp[50]; if (!strcmp(re->resnameA[i],unpredictabilityStr)) { re->res[i] = (1.0 - re->res[i])/2.0; //// not nice hack... } else { re->res[i] = (re->res[i] + 1.0)/2.0; } if (re->res[i] < 0.0) re->res[i] = 0.0; if (re->res[i] > 1.0) re->res[i] = 1.0; sprintf(strtmp,"%.2f",re->res[i]); std::string dimVal(strtmp); sprintf(strtmp,"%s",re->resnameA[i]); std::string dimStr(strtmp); XERCESC_NS::DOMElement * dimension = XMLTool::appendChildElement(emotion, EmotionML::E_DIMENSION, EmotionML::namespaceURI); XMLTool::setAttribute(dimension, EmotionML::A_NAME, dimStr); // dimensionStr XMLTool::setAttribute(dimension, EmotionML::A_VALUE, dimVal); XMLTool::setPrefix(dimension, "emotion"); } XERCESC_NS::DOMElement * info = XMLTool::appendChildElement(emotion, EmotionML::E_INFO); XERCESC_NS::DOMElement * coder = XMLTool::appendChildElement(info, "predictor"); XMLTool::setAttribute(coder, "value", codername); XMLTool::setPrefix(coder, "emotion"); XMLTool::setPrefix(info, "emotion"); if (intIdx >= 0) { XERCESC_NS::DOMElement * intensity = XMLTool::appendChildElement(interpretation, EmotionML::E_EMOTION, EmotionML::namespaceURI); XMLTool::setAttribute(intensity, EmotionML::A_DIMENSION_VOCABULARY, EmotionML::VOC_SEMAINE_INTENSITY_DIMENSION_DEFINITON); XMLTool::setAttribute(intensity, EmotionML::A_MODALITY, "voice"); XMLTool::setPrefix(emotion, "emotion"); sprintf(strtmp,"%.2f",re->res[intIdx]); std::string dimVal(strtmp); sprintf(strtmp,"%s",re->resnameA[intIdx]); std::string dimStr(strtmp); XERCESC_NS::DOMElement * idim = XMLTool::appendChildElement(intensity, EmotionML::E_DIMENSION, EmotionML::namespaceURI); XMLTool::setAttribute(idim, EmotionML::A_NAME, dimStr); // dimensionStr XMLTool::setAttribute(idim, EmotionML::A_VALUE, dimVal); XMLTool::setPrefix(idim, "emotion"); XERCESC_NS::DOMElement * iinfo = XMLTool::appendChildElement(intensity, EmotionML::E_INFO); XERCESC_NS::DOMElement * icoder = XMLTool::appendChildElement(iinfo, "predictor"); XMLTool::setAttribute(icoder, "value", codername); XMLTool::setPrefix(icoder, "emotion"); XMLTool::setPrefix(iinfo, "emotion"); } sendDocument(document); }