/** Parse MRCP prosody-volume value */ static apt_bool_t mrcp_prosody_param_volume_parse(mrcp_prosody_volume_t *prosody_volume, const apt_str_t *value, apr_pool_t *pool) { if(!value->length) { return FALSE; } /** For the volume attribute, relative changes are a number preceded by "+" or "-" (w3c ssml)*/ if(value->buf[0]=='+' || value->buf[0]=='-') { prosody_volume->type = PROSODY_VOLUME_TYPE_RELATIVE_CHANGE; } else if('0'<=value->buf[0] && value->buf[0]<='9') { prosody_volume->type = PROSODY_VOLUME_TYPE_NUMERIC; } else { prosody_volume->type = PROSODY_VOLUME_TYPE_LABEL; } if(prosody_volume->type == PROSODY_VOLUME_TYPE_RELATIVE_CHANGE) { prosody_volume->value.relative = apt_float_value_parse(value); } else if(prosody_volume->type == PROSODY_VOLUME_TYPE_NUMERIC) { prosody_volume->value.numeric = apt_float_value_parse(value); } else { prosody_volume->value.label = apt_string_table_value_parse(prosody_volume_string_table,PROSODY_VOLUME_COUNT,value); } return TRUE; }
/** Parse MRCPv2 recognizer header */ static apt_bool_t mrcp_v2_recog_header_parse(mrcp_header_accessor_t *accessor, apr_size_t id, const apt_str_t *value, apr_pool_t *pool) { mrcp_recog_header_t *recog_header = accessor->data; if(id == RECOGNIZER_HEADER_CONFIDENCE_THRESHOLD) { recog_header->confidence_threshold = apt_float_value_parse(value); return TRUE; } else if(id == RECOGNIZER_HEADER_SENSITIVITY_LEVEL) { recog_header->sensitivity_level = apt_float_value_parse(value); return TRUE; } else if(id == RECOGNIZER_HEADER_SPEED_VS_ACCURACY) { recog_header->speed_vs_accuracy = apt_float_value_parse(value); return TRUE; } return mrcp_recog_header_parse(recog_header,id,value,pool); }
/** Parse MRCP recorder header */ static apt_bool_t mrcp_recorder_header_parse(mrcp_header_accessor_t *accessor, apr_size_t id, const apt_str_t *value, apr_pool_t *pool) { apt_bool_t status = TRUE; mrcp_recorder_header_t *recorder_header = accessor->data; switch(id) { case RECORDER_HEADER_SENSITIVITY_LEVEL: recorder_header->sensitivity_level = apt_float_value_parse(value); break; case RECORDER_HEADER_NO_INPUT_TIMEOUT: recorder_header->no_input_timeout = apt_size_value_parse(value); break; case RECORDER_HEADER_COMPLETION_CAUSE: recorder_header->completion_cause = apt_size_value_parse(value); break; case RECORDER_HEADER_COMPLETION_REASON: recorder_header->completion_reason = *value; break; case RECORDER_HEADER_FAILED_URI: recorder_header->failed_uri = *value; break; case RECORDER_HEADER_FAILED_URI_CAUSE: recorder_header->failed_uri_cause = *value; break; case RECORDER_HEADER_RECORD_URI: recorder_header->record_uri = *value; break; case RECORDER_HEADER_MEDIA_TYPE: recorder_header->media_type = *value; break; case RECORDER_HEADER_MAX_TIME: recorder_header->max_time = apt_size_value_parse(value); break; case RECORDER_HEADER_TRIM_LENGTH: recorder_header->trim_length = apt_size_value_parse(value); break; case RECORDER_HEADER_FINAL_SILENCE: recorder_header->final_silence = apt_size_value_parse(value); break; case RECORDER_HEADER_CAPTURE_ON_SPEECH: apt_boolean_value_parse(value,&recorder_header->capture_on_speech); break; case RECORDER_HEADER_VER_BUFFER_UTTERANCE: apt_boolean_value_parse(value,&recorder_header->ver_buffer_utterance); break; case RECORDER_HEADER_START_INPUT_TIMERS: apt_boolean_value_parse(value,&recorder_header->start_input_timers); break; case RECORDER_HEADER_NEW_AUDIO_CHANNEL: apt_boolean_value_parse(value,&recorder_header->new_audio_channel); break; default: status = FALSE; } return status; }
/** Parse MRCP prosody-rate value */ static apt_bool_t mrcp_prosody_param_rate_parse(mrcp_prosody_rate_t *prosody_rate, const apt_str_t *value, apr_pool_t *pool) { if(!value->length) { return FALSE; } /** For the rate attribute, relative changes are a number. (not preceded by a "+" or "-")(w3c ssml)*/ if('0'<=value->buf[0] && value->buf[0]<='9') { prosody_rate->type = PROSODY_RATE_TYPE_RELATIVE_CHANGE; } else { prosody_rate->type = PROSODY_RATE_TYPE_LABEL; } if(prosody_rate->type == PROSODY_RATE_TYPE_RELATIVE_CHANGE) { prosody_rate->value.relative = apt_float_value_parse(value); } else { prosody_rate->value.label = apt_string_table_value_parse(prosody_rate_string_table,PROSODY_RATE_COUNT,value); } return TRUE; }
/** Parse MRCP recognizer header */ static apt_bool_t mrcp_recog_header_parse(mrcp_recog_header_t *recog_header, apr_size_t id, const apt_str_t *value, apr_pool_t *pool) { apt_bool_t status = TRUE; switch(id) { case RECOGNIZER_HEADER_N_BEST_LIST_LENGTH: recog_header->n_best_list_length = apt_size_value_parse(value); break; case RECOGNIZER_HEADER_NO_INPUT_TIMEOUT: recog_header->no_input_timeout = apt_size_value_parse(value); break; case RECOGNIZER_HEADER_RECOGNITION_TIMEOUT: recog_header->recognition_timeout = apt_size_value_parse(value); break; case RECOGNIZER_HEADER_WAVEFORM_URI: recog_header->waveform_uri = *value; break; case RECOGNIZER_HEADER_COMPLETION_CAUSE: recog_header->completion_cause = apt_size_value_parse(value); break; case RECOGNIZER_HEADER_RECOGNIZER_CONTEXT_BLOCK: recog_header->recognizer_context_block = *value; break; case RECOGNIZER_HEADER_START_INPUT_TIMERS: apt_boolean_value_parse(value,&recog_header->start_input_timers); break; case RECOGNIZER_HEADER_SPEECH_COMPLETE_TIMEOUT: recog_header->speech_complete_timeout = apt_size_value_parse(value); break; case RECOGNIZER_HEADER_SPEECH_INCOMPLETE_TIMEOUT: recog_header->speech_incomplete_timeout = apt_size_value_parse(value); break; case RECOGNIZER_HEADER_DTMF_INTERDIGIT_TIMEOUT: recog_header->dtmf_interdigit_timeout = apt_size_value_parse(value); break; case RECOGNIZER_HEADER_DTMF_TERM_TIMEOUT: recog_header->dtmf_term_timeout = apt_size_value_parse(value); break; case RECOGNIZER_HEADER_DTMF_TERM_CHAR: recog_header->dtmf_term_char = *value->buf; break; case RECOGNIZER_HEADER_FAILED_URI: recog_header->failed_uri = *value; break; case RECOGNIZER_HEADER_FAILED_URI_CAUSE: recog_header->failed_uri_cause = *value; break; case RECOGNIZER_HEADER_SAVE_WAVEFORM: apt_boolean_value_parse(value,&recog_header->save_waveform); break; case RECOGNIZER_HEADER_NEW_AUDIO_CHANNEL: apt_boolean_value_parse(value,&recog_header->new_audio_channel); break; case RECOGNIZER_HEADER_SPEECH_LANGUAGE: recog_header->speech_language = *value; break; case RECOGNIZER_HEADER_INPUT_TYPE: recog_header->input_type = *value; break; case RECOGNIZER_HEADER_MEDIA_TYPE: recog_header->media_type = *value; break; case RECOGNIZER_HEADER_INPUT_WAVEFORM_URI: recog_header->input_waveform_uri = *value; break; case RECOGNIZER_HEADER_COMPLETION_REASON: recog_header->completion_reason = *value; break; case RECOGNIZER_HEADER_VER_BUFFER_UTTERANCE: apt_boolean_value_parse(value,&recog_header->ver_buffer_utterance); break; case RECOGNIZER_HEADER_RECOGNITION_MODE: recog_header->recognition_mode = *value; break; case RECOGNIZER_HEADER_CANCEL_IF_QUEUE: apt_boolean_value_parse(value,&recog_header->cancel_if_queue); break; case RECOGNIZER_HEADER_HOTWORD_MAX_DURATION: recog_header->hotword_max_duration = apt_size_value_parse(value); break; case RECOGNIZER_HEADER_HOTWORD_MIN_DURATION: recog_header->hotword_min_duration = apt_size_value_parse(value); break; case RECOGNIZER_HEADER_INTERPRET_TEXT: recog_header->interpret_text = *value; break; case RECOGNIZER_HEADER_DTMF_BUFFER_TIME: recog_header->dtmf_buffer_time = apt_size_value_parse(value); break; case RECOGNIZER_HEADER_CLEAR_DTMF_BUFFER: apt_boolean_value_parse(value,&recog_header->clear_dtmf_buffer); break; case RECOGNIZER_HEADER_EARLY_NO_MATCH: apt_boolean_value_parse(value,&recog_header->early_no_match); break; case RECOGNIZER_HEADER_NUM_MIN_CONSISTENT_PRONUNCIATIONS: recog_header->num_min_consistent_pronunciations = apt_size_value_parse(value); break; case RECOGNIZER_HEADER_CONSISTENCY_THRESHOLD: recog_header->consistency_threshold = apt_float_value_parse(value); break; case RECOGNIZER_HEADER_CLASH_THRESHOLD: recog_header->clash_threshold = apt_float_value_parse(value); break; case RECOGNIZER_HEADER_PERSONAL_GRAMMAR_URI: recog_header->personal_grammar_uri = *value; break; case RECOGNIZER_HEADER_ENROLL_UTTERANCE: apt_boolean_value_parse(value,&recog_header->enroll_utterance); break; case RECOGNIZER_HEADER_PHRASE_ID: recog_header->phrase_id = *value; break; case RECOGNIZER_HEADER_PHRASE_NL: recog_header->phrase_nl = *value; break; case RECOGNIZER_HEADER_WEIGHT: recog_header->weight = apt_float_value_parse(value); break; case RECOGNIZER_HEADER_SAVE_BEST_WAVEFORM: apt_boolean_value_parse(value,&recog_header->save_best_waveform); break; case RECOGNIZER_HEADER_NEW_PHRASE_ID: recog_header->new_phrase_id = *value; break; case RECOGNIZER_HEADER_CONFUSABLE_PHRASES_URI: recog_header->confusable_phrases_uri = *value; break; case RECOGNIZER_HEADER_ABORT_PHRASE_ENROLLMENT: apt_boolean_value_parse(value,&recog_header->abort_phrase_enrollment); break; default: status = FALSE; } return status; }