bool SynthSession::OnChannelAdd(mrcp_channel_t* pMrcpChannel, mrcp_sig_status_code_e status) { if(!UmcSession::OnChannelAdd(pMrcpChannel,status)) return false; const mpf_codec_descriptor_t* pDescriptor = mrcp_application_sink_descriptor_get(pMrcpChannel); if(!pDescriptor) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Get Media Sink Descriptor"); return Terminate(); } SynthChannel* pSynthChannel = (SynthChannel*) mrcp_application_channel_object_get(pMrcpChannel); if(status != MRCP_SIG_STATUS_CODE_SUCCESS) { /* error case, just terminate the demo */ return Terminate(); } /* create MRCP message */ mrcp_message_t* pMrcpMessage = CreateSpeakRequest(pMrcpChannel); if(pMrcpMessage) { SendMrcpRequest(pSynthChannel->m_pMrcpChannel,pMrcpMessage); } pSynthChannel->m_pAudioOut = GetAudioOut(pDescriptor,GetSessionPool()); return true; }
bool SynthSession::Stop() { if(!UmcSession::Stop()) return false; if(!m_pSynthChannel) return false; mrcp_message_t* pStopMessage = CreateMrcpMessage(m_pSynthChannel->m_pMrcpChannel,SYNTHESIZER_STOP); if(!pStopMessage) return false; if(m_pSynthChannel->m_pSpeakRequest) { mrcp_generic_header_t* pGenericHeader; /* get/allocate generic header */ pGenericHeader = (mrcp_generic_header_t*) mrcp_generic_header_prepare(pStopMessage); if(pGenericHeader) { pGenericHeader->active_request_id_list.count = 1; pGenericHeader->active_request_id_list.ids[0] = m_pSynthChannel->m_pSpeakRequest->start_line.request_id; mrcp_generic_header_property_add(pStopMessage,GENERIC_HEADER_ACTIVE_REQUEST_ID_LIST); } m_pSynthChannel->m_pSpeakRequest = NULL; } return SendMrcpRequest(m_pSynthChannel->m_pMrcpChannel,pStopMessage); }
bool VerifierSession::StartVerification(mrcp_channel_t* pMrcpChannel) { const mpf_codec_descriptor_t* pDescriptor = mrcp_application_source_descriptor_get(pMrcpChannel); if(!pDescriptor) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Get Media Source Descriptor"); return Terminate(); } VerifierChannel* pVerifierChannel = (VerifierChannel*) mrcp_application_channel_object_get(pMrcpChannel); /* create and send Verification request */ mrcp_message_t* pMrcpMessage = CreateStartSessionRequest(pMrcpChannel); if(pMrcpMessage) { SendMrcpRequest(pVerifierChannel->m_pMrcpChannel,pMrcpMessage); } pVerifierChannel->m_pAudioIn = GetAudioIn(pDescriptor,GetSessionPool()); if(!pVerifierChannel->m_pAudioIn) { /* no audio input availble, set some estimated time to complete instead */ pVerifierChannel->m_TimeToComplete = 5000; // 5 sec } return true; }
bool DtmfSession::StartRecognition(mrcp_channel_t* pMrcpChannel) { RecogChannel* pRecogChannel = (RecogChannel*) mrcp_application_channel_object_get(pMrcpChannel); /* create and send RECOGNIZE request */ mrcp_message_t* pMrcpMessage = CreateRecognizeRequest(pMrcpChannel); if(pMrcpMessage) { SendMrcpRequest(pRecogChannel->m_pMrcpChannel,pMrcpMessage); } return true; }
bool RecorderSession::StartRecorder(mrcp_channel_t* pMrcpChannel) { RecorderChannel* pRecorderChannel = (RecorderChannel*) mrcp_application_channel_object_get(pMrcpChannel); /* create and send RECORD request */ mrcp_message_t* pMrcpMessage = CreateRecordRequest(pMrcpChannel); if(pMrcpMessage) { SendMrcpRequest(pRecorderChannel->m_pMrcpChannel,pMrcpMessage); } const mpf_codec_descriptor_t* pDescriptor = mrcp_application_source_descriptor_get(pMrcpChannel); pRecorderChannel->m_pAudioIn = GetAudioIn(pDescriptor,GetSessionPool()); return true; }
bool VerifierSession::Stop() { if(!UmcSession::Stop()) return false; if(!m_pVerifierChannel) return false; mrcp_message_t* pStopMessage = CreateMrcpMessage(m_pVerifierChannel->m_pMrcpChannel,VERIFIER_STOP); if(!pStopMessage) return false; return SendMrcpRequest(m_pVerifierChannel->m_pMrcpChannel,pStopMessage); }
bool SetParamSession::ProcessNextRequest(mrcp_channel_t* pMrcpChannel) { if(m_CurrentRequest >= m_RequestQueue->nelts) { return Terminate(); } mrcp_message_t* pMrcpMessage = APR_ARRAY_IDX(m_RequestQueue,m_CurrentRequest,mrcp_message_t*); if(!pMrcpMessage) { return Terminate(); } return SendMrcpRequest(pMrcpChannel,pMrcpMessage); }
bool RecogSession::StartRecognition(mrcp_channel_t* pMrcpChannel) { RecogChannel* pRecogChannel = (RecogChannel*) mrcp_application_channel_object_get(pMrcpChannel); /* create and send RECOGNIZE request */ mrcp_message_t* pMrcpMessage = CreateRecognizeRequest(pMrcpChannel); if(pMrcpMessage) { SendMrcpRequest(pRecogChannel->m_pMrcpChannel,pMrcpMessage); } const mpf_codec_descriptor_t* pDescriptor = mrcp_application_source_descriptor_get(pMrcpChannel); pRecogChannel->m_pAudioIn = GetAudioIn(pDescriptor,GetSessionPool()); if(!pRecogChannel->m_pAudioIn) { /* no audio input availble, set some estimated time to complete instead */ pRecogChannel->m_TimeToComplete = 5000; // 5 sec } return true; }
bool RecorderSession::StartRecorder(mrcp_channel_t* pMrcpChannel) { const mpf_codec_descriptor_t* pDescriptor = mrcp_application_source_descriptor_get(pMrcpChannel); if(!pDescriptor) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Get Media Source Descriptor"); return Terminate(); } RecorderChannel* pRecorderChannel = (RecorderChannel*) mrcp_application_channel_object_get(pMrcpChannel); /* create and send RECORD request */ mrcp_message_t* pMrcpMessage = CreateRecordRequest(pMrcpChannel); if(pMrcpMessage) { SendMrcpRequest(pRecorderChannel->m_pMrcpChannel,pMrcpMessage); } pRecorderChannel->m_pAudioIn = GetAudioIn(pDescriptor,GetSessionPool()); return true; }
bool RecogSession::OnChannelAdd(mrcp_channel_t* pMrcpChannel, mrcp_sig_status_code_e status) { if(!UmcSession::OnChannelAdd(pMrcpChannel,status)) return false; if(status != MRCP_SIG_STATUS_CODE_SUCCESS) { /* error case, just terminate the demo */ return Terminate(); } if(GetScenario()->IsDefineGrammarEnabled()) { mrcp_message_t* pMrcpMessage = CreateDefineGrammarRequest(pMrcpChannel); if(pMrcpMessage) SendMrcpRequest(pMrcpChannel,pMrcpMessage); return true; } return StartRecognition(pMrcpChannel); }
bool VerifierSession::OnMessageReceive(mrcp_channel_t* pMrcpChannel, mrcp_message_t* pMrcpMessage) { if(!UmcSession::OnMessageReceive(pMrcpChannel,pMrcpMessage)) return false; VerifierChannel* pVerifierChannel = (VerifierChannel*) mrcp_application_channel_object_get(pMrcpChannel); if(pMrcpMessage->start_line.message_type == MRCP_MESSAGE_TYPE_RESPONSE) { /* received MRCP response */ if(pMrcpMessage->start_line.method_id == VERIFIER_START_SESSION) { /* received the response to START-SESSION request */ /* create and send VERIFY request */ mrcp_message_t* pMrcpMessage = CreateVerificationRequest(pMrcpChannel); if(pMrcpMessage) { SendMrcpRequest(pVerifierChannel->m_pMrcpChannel,pMrcpMessage); } } else if(pMrcpMessage->start_line.method_id == VERIFIER_END_SESSION) { /* received the response to END-SESSION request */ Terminate(); } else if(pMrcpMessage->start_line.method_id == VERIFIER_VERIFY) { /* received the response to VERIFY request */ if(pMrcpMessage->start_line.request_state == MRCP_REQUEST_STATE_INPROGRESS) { VerifierChannel* pVerifierChannel = (VerifierChannel*) mrcp_application_channel_object_get(pMrcpChannel); if(pVerifierChannel) pVerifierChannel->m_pVerificationRequest = GetMrcpMessage(); /* start to stream the speech to Verify */ if(pVerifierChannel) pVerifierChannel->m_Streaming = true; } else { /* create and send END-SESSION request */ mrcp_message_t* pMrcpMessage = CreateEndSessionRequest(pMrcpChannel); if(pMrcpMessage) { SendMrcpRequest(pVerifierChannel->m_pMrcpChannel,pMrcpMessage); } } } else { /* received unexpected response */ } } else if(pMrcpMessage->start_line.message_type == MRCP_MESSAGE_TYPE_EVENT) { if(pMrcpMessage->start_line.method_id == VERIFIER_VERIFICATION_COMPLETE) { if(pVerifierChannel) pVerifierChannel->m_Streaming = false; VerifierChannel* pVerifierChannel = (VerifierChannel*) mrcp_application_channel_object_get(pMrcpChannel); if(pVerifierChannel) pVerifierChannel->m_pVerificationRequest = NULL; /* create and send END-SESSION request */ mrcp_message_t* pMrcpMessage = CreateEndSessionRequest(pMrcpChannel); if(pVerifierChannel && pMrcpMessage) { SendMrcpRequest(pVerifierChannel->m_pMrcpChannel,pMrcpMessage); } } else if(pMrcpMessage->start_line.method_id == VERIFIER_START_OF_INPUT) { /* received start-of-input, do whatever you need here */ } } return true; }