14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------* 24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * RecognizerImpl.c * 34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Copyright 2007, 2008 Nuance Communciations, Inc. * 54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the 'License'); * 74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * you may not use this file except in compliance with the License. * 84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * You may obtain a copy of the License at * 104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 * 114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software * 134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * distributed under the License is distributed on an 'AS IS' BASIS, * 144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * See the License for the specific language governing permissions and * 164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * limitations under the License. * 174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/ 194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ESR_Session.h" 224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ESR_SessionTypeImpl.h" 234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "IntArrayList.h" 244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "LCHAR.h" 254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "passert.h" 264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "plog.h" 274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pstdio.h" 284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pmemory.h" 294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ptimestamp.h" 304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_AcousticModelsImpl.h" 314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_AcousticStateImpl.h" 324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_GrammarImpl.h" 334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_SemprocDefinitions.h" 344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_SemanticResult.h" 354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_SemanticResultImpl.h" 364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Recognizer.h" 374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_RecognizerImpl.h" 384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_RecognizerResultImpl.h" 394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_SemanticResultImpl.h" 404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_EventLog.h" 414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "srec.h" 424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MTAG NULL 444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define FILTER_NBEST_BY_SEM_RESULT 1 454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define AUDIO_CIRC_BUFFER_SIZE 20000 464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define SEMPROC_ACTIVE 1 474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define SAMPLE_SIZE (16 / CHAR_BIT) /* 16-bits / sample */ 484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* milliseconds per FRAME = 1/FRAMERATE * 1000 */ 504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* We multiple by 2 because we skip even frames */ 514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MSEC_PER_FRAME (2000/FRAMERATE) 524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_ENTRY_LENGTH 512 534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define PREFIX_WORD "-pau-" 544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define PREFIX_WORD_LEN 5 554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define SUFFIX_WORD "-pau2-" 564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define SUFFIX_WORD_LEN 6 574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic ESR_ReturnCode SR_Recognizer_Reset_Buffers ( SR_RecognizerImpl *impl ); 604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Initializes recognizer properties to default values. 634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Replaces setup_recognition_parameters() 654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerToSessionImpl() 674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Old comment: remember to keep "ca_rip.h" up to date with these parameters... */ 714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.max_acoustic_models", 2)); */ 734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetBoolIfEmpty("CREC.Recognizer.partial_results", ESR_FALSE)); 744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.NBest", 1)); 754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.eou_threshold", 100)); 764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.max_altword_tokens", 400)); 774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.max_frames", 1000)); 784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.max_fsm_arcs", 3000)); 794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.max_fsm_nodes", 3000)); 804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.max_fsmnode_tokens", 1000)); 814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.max_hmm_tokens", 1000)); 824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.max_model_states", 1000)); 834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.max_searches", 2)); 844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.max_word_tokens", 1000)); 854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.non_terminal_timeout", 50)); 864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.num_wordends_per_frame", 10)); 874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.often", 10)); 884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.optional_terminal_timeout", 30)); 894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.reject", 500)); 904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.terminal_timeout", 10)); 914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.viterbi_prune_thresh", 5000)); 924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Recognizer.wordpen", 0)); 934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetSize_tIfEmpty("SREC.Recognizer.utterance_timeout", 400)); 954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetBoolIfEmpty("enableGetWaveform", ESR_FALSE)); 974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Initializes frontend properties to default values. 1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Replaces load_up_parameter_list() 1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerFrontendToSessionImpl() 1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project IntArrayList* intList = NULL; 1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL exists; 1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t i; 1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Old comment: Remember to keep "ca_pip.h" up to date with these parameters... */ 1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.mel_dim", 12)); 1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetSize_tIfEmpty("CREC.Frontend.samplerate", 8000)); 1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetFloatIfEmpty("CREC.Frontend.premel", 0.98f)); 1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.lowcut", 260)); /* Hz */ 1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.highcut", 4000)); /* Hz */ 1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetFloatIfEmpty("CREC.Frontend.window_factor", 2.0)); /* times the frame size */ 1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetBoolIfEmpty("CREC.Frontend.do_skip_even_frames", ESR_FALSE)); /* 10/20 ms rate */ 1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetFloatIfEmpty("CREC.Frontend.offset", 0)); /* additional */ 1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetBoolIfEmpty("CREC.Frontend.ddmel", ESR_FALSE)); /* delta-delta mel pars */ 1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.forgetfactor", 40)); 1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.sv6_margin", 10)); 1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetBoolIfEmpty("CREC.Frontend.rasta", ESR_FALSE)); 1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetBoolIfEmpty("CREC.Frontend.rastac0", ESR_FALSE)); 1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetBoolIfEmpty("CREC.Frontend.spectral_subtraction", ESR_FALSE)); 1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.spec_sub_dur", 0)); 1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetFloatIfEmpty("CREC.Frontend.spec_sub_scale", 1.0)); 1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetBoolIfEmpty("CREC.Frontend.do_filterbank_dump", ESR_FALSE)); /* Output is filterbank (30 floats) */ 1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetBoolIfEmpty("CREC.Frontend.do_filterbank_input", ESR_FALSE)); /* Input is filterbank (30 floats) in place of audio samples */ 1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetBoolIfEmpty("CREC.Frontend.do_smooth_c0", ESR_TRUE)); 1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetBoolIfEmpty("CREC.Frontend.plp", ESR_FALSE)); /* Do PLP instead of MEL */ 1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.lpcorder", 12)); /* order of lpc analysis in plp processing */ 1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetFloatIfEmpty("CREC.Frontend.warp_scale", 1.0)); 1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetFloatIfEmpty("CREC.Frontend.piecewise_start", 1.0)); 1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetFloatIfEmpty("CREC.Frontend.peakdecayup", -1.0)); /* If +ve, decay factor on peakpicker (low to high) */ 1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetFloatIfEmpty("CREC.Frontend.peakdecaydown", -1.0)); /* If +ve, decay factor on peakpicker (high to low) */ 1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetBoolIfEmpty("CREC.Frontend.cuberoot", ESR_FALSE)); /* Use cube root instead of log */ 1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionContains("CREC.Frontend.mel_offset", &exists)); 1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!exists) 1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListCreate(&intList)); 1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < 32; ++i) 1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, 0)); 1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetProperty("CREC.Frontend.mel_offset", intList, TYPES_INTARRAYLIST)); 1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project intList = NULL; 1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionContains("CREC.Frontend.mel_loop", &exists)); 1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!exists) 1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListCreate(&intList)); 1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < 32; ++i) 1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, 1)); 1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetProperty("CREC.Frontend.mel_loop", intList, TYPES_INTARRAYLIST)); 1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project intList = NULL; 1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionContains("CREC.Frontend.melA", &exists)); 1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!exists) 1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListCreate(&intList)); 1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 13.2911)); 1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 47.2229)); 1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 79.2485)); 1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 92.1967)); 1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 136.3855)); 1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 152.2896)); 1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 183.3601)); 1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 197.4200)); 1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 217.8278)); 1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 225.6556)); 1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 263.3073)); 1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 277.193)); 1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetProperty("CREC.Frontend.melA", intList, TYPES_INTARRAYLIST)); 1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project intList = NULL; 1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionContains("CREC.Frontend.melB", &exists)); 1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!exists) 1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListCreate(&intList)); 1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 37.0847)); 1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 91.3289)); 1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 113.9995)); 1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 123.0336)); 1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 131.2704)); 1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 128.9942)); 1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 120.5267)); 1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 132.0079)); 1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 129.8076)); 1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 126.5029)); 1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 121.8519)); 1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetProperty("CREC.Frontend.melB", intList, TYPES_INTARRAYLIST)); 2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project intList = NULL; 2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionContains("CREC.Frontend.dmelA", &exists)); 2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!exists) 2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListCreate(&intList)); 2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 91.6305)); 2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 358.3790)); 2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 527.5946)); 2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 536.3163)); 2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 731.2385)); 2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 757.8382)); 2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 939.4460)); 2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 1028.4136)); 2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 1071.3193)); 2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 1183.7922)); 2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 1303.1014)); 2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 1447.7766)); 2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetProperty("CREC.Frontend.dmelA", intList, TYPES_INTARRAYLIST)); 2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project intList = NULL; 2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionContains("CREC.Frontend.dmelB", &exists)); 2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!exists) 2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListCreate(&intList)); 2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.4785)); 2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.3878)); 2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.4029)); 2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.3182)); 2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.3706)); 2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.5394)); 2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.5150)); 2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.4270)); 2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.4871)); 2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.4088)); 2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.4361)); 2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.5449)); 2394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetProperty("CREC.Frontend.dmelB", intList, TYPES_INTARRAYLIST)); 2404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project intList = NULL; 2414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionContains("CREC.Frontend.ddmelA", &exists)); 2444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!exists) 2454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListCreate(&intList)); 2474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 10.7381)); 2484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 32.6775)); 2494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 46.2301)); 2504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 51.5438)); 2514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 57.6636)); 2524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 57.0581)); 2534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 65.3696)); 2544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 70.1910)); 2554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 71.6751)); 2564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 78.2364)); 2574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 83.2440)); 2584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 89.6261)); 2594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetProperty("CREC.Frontend.ddmelA", intList, TYPES_INTARRAYLIST)); 2604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project intList = NULL; 2614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionContains("CREC.Frontend.ddmelB", &exists)); 2644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!exists) 2654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListCreate(&intList)); 2674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.5274)); 2684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.5098)); 2694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.5333)); 2704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.5963)); 2714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.5132)); 2724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.5282)); 2734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.5530)); 2744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.5682)); 2754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.4662)); 2764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.4342)); 2774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.5235)); 2784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.4061)); 2794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetProperty("CREC.Frontend.ddmelB", intList, TYPES_INTARRAYLIST)); 2804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project intList = NULL; 2814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionContains("CREC.Frontend.rastaA", &exists)); 2844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!exists) 2854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListCreate(&intList)); 2874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 7.80)); 2884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 37.0)); 2894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 54.0)); 2904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 57.0)); 2914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 84.0)); 2924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 86.5)); 2934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 98.1)); 2944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 127.0)); 2954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 153.0)); 2964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 160.0)); 2974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 188.0)); 2984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, (int) 199.0)); 2994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetProperty("CREC.Frontend.rastaA", intList, TYPES_INTARRAYLIST)); 3004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project intList = NULL; 3014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionContains("CREC.Frontend.rastaB", &exists)); 3044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!exists) 3054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListCreate(&intList)); 3074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, 117)); 3084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, 121)); 3094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, 114)); 3104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, 111)); 3114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, 113)); 3124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, 126)); 3134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, 134)); 3144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, 130)); 3154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, 135)); 3164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, 129)); 3174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, 139)); 3184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListAdd(intList, 138)); 3194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetProperty("CREC.Frontend.rastaB", intList, TYPES_INTARRAYLIST)); 3204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project intList = NULL; 3214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.speech_detect", 18)); 3244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.speech_above", 18)); 3254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.ambient_within", 12)); 3264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.start_windback", 50)); 3274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.utterance_allowance", 40)); 3284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.speech_duration", 6)); 3294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.quiet_duration", 20)); 3304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.high_clip", 32767)); 3324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.low_clip", -32768)); 3334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.max_per10000_clip", 10)); 3344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.max_dc_offset", 1000)); 3354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.high_noise_level_bit", 11)); 3364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.low_speech_level_bit", 11)); 3374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Frontend.min_samples", 10000)); 3384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionContains("CREC.Frontend.spectrum_filter_freq", &exists)); 3404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!exists) 3414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListCreate(&intList)); 3434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetProperty("CREC.Frontend.spectrum_filter_freq", intList, TYPES_INTARRAYLIST)); 3444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project intList = NULL; 3454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionContains("CREC.Frontend.spectrum_filter_spread", &exists)); 3474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!exists) 3484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListCreate(&intList)); 3504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetProperty("CREC.Frontend.spectrum_filter_spread", intList, TYPES_INTARRAYLIST)); 3514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project intList = NULL; 3524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 3544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 3554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (intList != NULL) 3564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project intList->destroy(intList); 3574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 3584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 3614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Generate legacy frontend parameter structure from ESR_Session. 3624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 3634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param impl SR_RecognizerImpl handle 3644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param params Resulting structure 3654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 3664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerGetFrontendLegacyParametersImpl(CA_FrontendInputParams* params) 3674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 3684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 3694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project IntArrayList* intList; 3704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t size, i, size_tValue; 3714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int iValue; 3724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(params != NULL); 3744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project params->is_loaded = ESR_FALSE; 3754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.mel_dim", ¶ms->mel_dim)); 3764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetSize_t("CREC.Frontend.samplerate", &size_tValue)); 3774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project params->samplerate = (int) size_tValue; 3784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetFloat("CREC.Frontend.premel", ¶ms->pre_mel)); 3794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.lowcut", ¶ms->low_cut)); 3804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.highcut", ¶ms->high_cut)); 3814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetFloat("CREC.Frontend.window_factor", ¶ms->window_factor)); 3824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetBool("CREC.Frontend.do_skip_even_frames", ¶ms->do_skip_even_frames)); 3834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetFloat("CREC.Frontend.offset", ¶ms->offset)); 3844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetBool("CREC.Frontend.ddmel", ¶ms->do_dd_mel)); 3854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.forgetfactor", ¶ms->forget_factor)); 3864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.sv6_margin", ¶ms->sv6_margin)); 3874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetBool("CREC.Frontend.rastac0", ¶ms->do_rastac0)); 3884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetBool("CREC.Frontend.spectral_subtraction", ¶ms->do_spectral_sub)); 3894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.spec_sub_dur", ¶ms->spectral_sub_frame_dur)); 3904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetFloat("CREC.Frontend.spec_sub_scale", ¶ms->spec_sub_scale)); 3914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetBool("CREC.Frontend.do_filterbank_dump", ¶ms->do_filterbank_input)); 3924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetBool("CREC.Frontend.do_filterbank_input", ¶ms->do_filterbank_input)); 3934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetBool("CREC.Frontend.do_smooth_c0", ¶ms->do_smooth_c0)); 3944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.lpcorder", ¶ms->lpc_order)); 3954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetFloat("CREC.Frontend.warp_scale", ¶ms->warp_scale)); 3964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetFloat("CREC.Frontend.piecewise_start", ¶ms->piecewise_start)); 3974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetFloat("CREC.Frontend.peakdecayup", ¶ms->peakpickup)); 3984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetFloat("CREC.Frontend.peakdecaydown", ¶ms->peakpickdown)); 3994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetProperty("CREC.Frontend.mel_offset", (void **)&intList, TYPES_INTARRAYLIST)); 4014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (intList == NULL) 4024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 4034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_STATE")); 4044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 4054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 4064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGetSize(intList, &size)); 4074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 4084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGet(intList, i, ¶ms->mel_offset[i])); 4094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetProperty("CREC.Frontend.mel_loop", (void **)&intList, TYPES_INTARRAYLIST)); 4114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (intList == NULL) 4124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 4134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_STATE")); 4144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 4154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 4164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGetSize(intList, &size)); 4174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 4184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGet(intList, i, ¶ms->mel_loop[i])); 4194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetProperty("CREC.Frontend.melA", (void **)&intList, TYPES_INTARRAYLIST)); 4214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGetSize(intList, &size)); 4224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 4234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGet(intList, i, ¶ms->melA_scale[i])); 4244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetProperty("CREC.Frontend.melB", (void **)&intList, TYPES_INTARRAYLIST)); 4264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGetSize(intList, &size)); 4274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 4284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGet(intList, i, ¶ms->melB_scale[i])); 4294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetProperty("CREC.Frontend.dmelA", (void **)&intList, TYPES_INTARRAYLIST)); 4314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGetSize(intList, &size)); 4324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 4334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGet(intList, i, ¶ms->dmelA_scale[i])); 4344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetProperty("CREC.Frontend.dmelB", (void **)&intList, TYPES_INTARRAYLIST)); 4364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGetSize(intList, &size)); 4374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 4384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGet(intList, i, ¶ms->dmelB_scale[i])); 4394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetProperty("CREC.Frontend.ddmelA", (void **)&intList, TYPES_INTARRAYLIST)); 4414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGetSize(intList, &size)); 4424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 4434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGet(intList, i, ¶ms->ddmelA_scale[i])); 4444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetProperty("CREC.Frontend.ddmelB", (void **)&intList, TYPES_INTARRAYLIST)); 4464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGetSize(intList, &size)); 4474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 4484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGet(intList, i, ¶ms->ddmelB_scale[i])); 4494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetProperty("CREC.Frontend.rastaA", (void **)&intList, TYPES_INTARRAYLIST)); 4514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGetSize(intList, &size)); 4524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 4534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGet(intList, i, ¶ms->rastaA_scale[i])); 4544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetProperty("CREC.Frontend.rastaB", (void **)&intList, TYPES_INTARRAYLIST)); 4564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGetSize(intList, &size)); 4574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 4584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGet(intList, i, ¶ms->rastaB_scale[i])); 4594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.speech_detect", ¶ms->voice_margin)); 4614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.speech_above", ¶ms->fast_voice_margin)); 4624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.ambient_within", ¶ms->tracker_margin)); 4634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.start_windback", ¶ms->start_windback)); 4644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.utterance_allowance", ¶ms->unsure_duration)); 4654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.speech_duration", ¶ms->voice_duration)); 4664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.quiet_duration", ¶ms->quiet_duration)); 4674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.high_clip", ¶ms->high_clip)); 4694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.low_clip", ¶ms->low_clip)); 4704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.max_per10000_clip", ¶ms->max_per10000_clip)); 4714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.max_dc_offset", ¶ms->max_dc_offset)); 4724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.high_noise_level_bit", ¶ms->high_noise_level_bit)); 4734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.low_speech_level_bit", ¶ms->low_speech_level_bit)); 4744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Frontend.min_samples", ¶ms->min_samples)); 4754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetProperty("CREC.Frontend.spectrum_filter_freq", (void **)&intList, TYPES_INTARRAYLIST)); 4774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (intList == NULL) 4784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 4794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_STATE")); 4804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 4814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 4824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGetSize(intList, &size)); 4834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 4844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 4854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGet(intList, i, &iValue)); 4864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project params->spectrum_filter_freq[i] = iValue; 4874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 4884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetProperty("CREC.Frontend.spectrum_filter_spread", (void **)&intList, TYPES_INTARRAYLIST)); 4904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (intList == NULL) 4914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 4924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_STATE")); 4934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 4944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 4954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGetSize(intList, &size)); 4964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 4974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 4984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, IntArrayListGet(intList, i, &iValue)); 4994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project params->spectrum_filter_spread[i] = iValue; 5004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 5014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project params->is_loaded = ESR_TRUE; 5024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 5034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 5044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 5054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 5064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 5084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Creates frontend components of SR_Recognizer. 5094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 5104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param impl SR_RecognizerImpl handle 5114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 5124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerCreateFrontendImpl(SR_RecognizerImpl* impl) 5134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 5144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 5154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FrontendInputParams* frontendParams; 5164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Create a frontend object */ 5184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->frontend = CA_AllocateFrontend(1, 0, 1); 5194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project frontendParams = CA_AllocateFrontendParameters(); 5204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_RecognizerGetFrontendLegacyParametersImpl(frontendParams)); 5214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_ConfigureFrontend(impl->frontend, frontendParams); 5234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Create a wave object */ 5254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->wavein = CA_AllocateWave('N'); 5264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->wavein == NULL) 5274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 5284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 5294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 5304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 5314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 5324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_ConfigureWave(impl->wavein, impl->frontend); 5334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_ConfigureVoicingAnalysis(impl->wavein, frontendParams); 5344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_LoadCMSParameters(impl->wavein, NULL, frontendParams); 5364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Create an utterance object */ 5384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->utterance = CA_AllocateUtterance(); 5394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->utterance == NULL) 5404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 5414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 5424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 5434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 5444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 5454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_InitUtteranceForFrontend(impl->utterance, frontendParams); 5464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_AttachCMStoUtterance(impl->wavein, impl->utterance); 5474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeFrontendParameters(frontendParams); 5484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 5494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 5514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->frontend != NULL) 5524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 5534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_UnconfigureFrontend(impl->frontend); 5544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeFrontend(impl->frontend); 5554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->frontend = NULL; 5564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 5574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->wavein != NULL) 5584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 5594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_UnconfigureWave(impl->wavein); 5604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeWave(impl->wavein); 5614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->wavein = NULL; 5624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 5634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->utterance != NULL) 5644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 5654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_ClearUtterance(impl->utterance); 5664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeUtterance(impl->utterance); 5674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->utterance = NULL; 5684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 5694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (frontendParams != NULL) 5704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeFrontendParameters(frontendParams); 5714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 5724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 5734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 5754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Populates legacy recognizer parameters from the session. 5764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 5774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Replaces setup_pattern_parameters() 5784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 5794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_AcousticModels_LoadLegacyRecognizerParameters(CA_RecInputParams* params) 5804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 5814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 5824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(params != NULL); 5844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project params->is_loaded = ESR_FALSE; 5854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetBool("CREC.Recognizer.partial_results", ¶ms->do_partial)); 5864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.NBest", ¶ms->top_choices)); 5874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.eou_threshold", ¶ms->eou_threshold)); 5884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.max_altword_tokens", ¶ms->max_altword_tokens)); 5894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.max_frames", ¶ms->max_frames)); 5904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.max_fsm_arcs", ¶ms->max_fsm_arcs)); 5914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.max_fsm_nodes", ¶ms->max_fsm_nodes)); 5924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.max_fsmnode_tokens", ¶ms->max_fsmnode_tokens)); 5934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.max_hmm_tokens", ¶ms->max_hmm_tokens)); 5944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.max_model_states", ¶ms->max_model_states)); 5954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.max_searches", ¶ms->max_searches)); 5964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.max_word_tokens", ¶ms->max_word_tokens)); 5974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.non_terminal_timeout", ¶ms->non_terminal_timeout)); 5984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.num_wordends_per_frame", ¶ms->num_wordends_per_frame)); 5994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.often", ¶ms->traceback_freq)); 6004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.optional_terminal_timeout", ¶ms->optional_terminal_timeout)); 6014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.reject", ¶ms->reject_score)); 6024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.terminal_timeout", ¶ms->terminal_timeout)); 6034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.viterbi_prune_thresh", ¶ms->viterbi_prune_thresh)); 6044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Recognizer.wordpen", ¶ms->word_penalty)); 6054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project params->is_loaded = ESR_TRUE; 6064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 6084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 6094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 6104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 6114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerCreate(SR_Recognizer** self) 6134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 6144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl; 6154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_RecInputParams* recogParams = NULL; 6164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 6174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR recHandle[12]; 6184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (self == NULL) 6204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 6214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_ARGUMENT")); 6224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 6234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 6244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl = NEW(SR_RecognizerImpl, MTAG); 6254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl == NULL) 6264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 6274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_OUT_OF_MEMORY")); 6284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_OUT_OF_MEMORY; 6294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 6304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.start = &SR_RecognizerStartImpl; 6324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.stop = &SR_RecognizerStopImpl; 6334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.destroy = &SR_RecognizerDestroyImpl; 6344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.setup = &SR_RecognizerSetupImpl; 6354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.unsetup = &SR_RecognizerUnsetupImpl; 6364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.isSetup = &SR_RecognizerIsSetupImpl; 6374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.getParameter = &SR_RecognizerGetParameterImpl; 6384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.getSize_tParameter = &SR_RecognizerGetSize_tParameterImpl; 6394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.getBoolParameter = &SR_RecognizerGetBoolParameterImpl; 6404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.setParameter = &SR_RecognizerSetParameterImpl; 6414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.setSize_tParameter = &SR_RecognizerSetSize_tParameterImpl; 6424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.setBoolParameter = &SR_RecognizerSetBoolParameterImpl; 6434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.setLockFunction = &SR_RecognizerSetLockFunctionImpl; 6444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.hasSetupRules = &SR_RecognizerHasSetupRulesImpl; 6454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.activateRule = &SR_RecognizerActivateRuleImpl; 6464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.deactivateRule = &SR_RecognizerDeactivateRuleImpl; 6474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.deactivateAllRules = &SR_RecognizerDeactivateAllRulesImpl; 6484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.isActiveRule = &SR_RecognizerIsActiveRuleImpl; 6494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.setWordAdditionCeiling = &SR_RecognizerSetWordAdditionCeilingImpl; 6504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.checkGrammarConsistency = &SR_RecognizerCheckGrammarConsistencyImpl; 6514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.getModels = &SR_RecognizerGetModelsImpl; 6524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.putAudio = &SR_RecognizerPutAudioImpl; 6534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.advance = &SR_RecognizerAdvanceImpl; 6544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.loadUtterance = &SR_RecognizerLoadUtteranceImpl; 6554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.loadWaveFile = &SR_RecognizerLoadWaveFileImpl; 6564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.logEvent = &SR_RecognizerLogEventImpl; 6574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.logToken = &SR_RecognizerLogTokenImpl; 6584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.logTokenInt = &SR_RecognizerLogTokenIntImpl; 6594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.logSessionStart = &SR_RecognizerLogSessionStartImpl; 6604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.logSessionEnd = &SR_RecognizerLogSessionEndImpl; 6614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.logWaveformData = &SR_RecognizerLogWaveformDataImpl; 6624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.isSignalClipping = &SR_RecognizerIsSignalClippingImpl; 6634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.isSignalDCOffset = &SR_RecognizerIsSignalDCOffsetImpl; 6644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.isSignalNoisy = &SR_RecognizerIsSignalNoisyImpl; 6654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.isSignalTooFewSamples = &SR_RecognizerIsSignalTooFewSamplesImpl; 6664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.isSignalTooManySamples = &SR_RecognizerIsSignalTooManySamplesImpl; 6674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.isSignalTooQuiet = &SR_RecognizerIsSignalTooQuietImpl; 6684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->frontend = NULL; 6704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->wavein = NULL; 6714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->utterance = NULL; 6724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->confidenceScorer = NULL; 6734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recognizer = NULL; 6744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->models = NULL; 6754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->grammars = NULL; 6764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->result = NULL; 6774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->parameters = NULL; 6784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->acousticState = NULL; 6794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->audioBuffer = NULL; 6804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->buffer = NULL; 6814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->frames = impl->processed; 6824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_BEGIN; 6834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isStarted = ESR_FALSE; 6844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isRecognizing = ESR_FALSE; 6854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->gotLastFrame = ESR_FALSE; 6864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->sampleRate = 0; 6874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction = NULL; 6884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockData = NULL; 6894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->eventLog = NULL; 6904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->osi_log_level = 0; 6914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->waveformBuffer = NULL; 6924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isSignalQualityInitialized = ESR_FALSE; 6934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->beginningOfSpeechOffset = 0; 6944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->gatedMode = ESR_TRUE; 6954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->bgsniff = 0; 6964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isSignalClipping = ESR_FALSE; 6974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isSignalDCOffset = ESR_FALSE; 6984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isSignalNoisy = ESR_FALSE; 6994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isSignalTooFewSamples = ESR_FALSE; 7004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isSignalTooManySamples = ESR_FALSE; 7014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isSignalTooQuiet = ESR_FALSE; 7024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 7034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionTypeCreate(&impl->parameters)); 7044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_RecognizerToSessionImpl()); 7054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetSize_t(L("SREC.Recognizer.osi_log_level"), &impl->osi_log_level)); 7064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 7074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* create the event log */ 7084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->osi_log_level) /* do some logging if non-zero val */ 7094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetProperty(L("eventlog"), (void **)&impl->eventLog, TYPES_SR_EVENTLOG)); 7104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 7114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Record the OSI log event */ 7124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project psprintf(recHandle, L("%p"), impl); 7134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("REC"), recHandle)); 7144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SWIcrst"))); 7154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 7164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_RecognizerFrontendToSessionImpl()); 7174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_RecognizerCreateFrontendImpl(impl)); 7184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_SessionGetProperty("recognizer.confidenceScorer", (void **)&impl->confidenceScorer, TYPES_CONFIDENCESCORER); 7194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc == ESR_NO_MATCH_ERROR) 7204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 7214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->confidenceScorer = CA_AllocateConfidenceScorer(); 7224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 7234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!CA_LoadConfidenceScorer(impl->confidenceScorer)) { 7244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 7254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 7264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 7274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 7284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetProperty("recognizer.confidenceScorer", impl->confidenceScorer, TYPES_CONFIDENCESCORER)); 7294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 7304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (rc != ESR_SUCCESS) 7314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 7324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 7334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 7344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 7354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 7364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project recogParams = CA_AllocateRecognitionParameters(); 7374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (recogParams == NULL) 7384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 7394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 7404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 7414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 7424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 7434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_AcousticModels_LoadLegacyRecognizerParameters(recogParams)); 7444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recognizer = CA_AllocateRecognition(); 7454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->recognizer == NULL) 7464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 7474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 7484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 7494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 7504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_ConfigureRecognition(impl->recognizer, recogParams); 7514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeRecognitionParameters(recogParams); 7524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, HashMapCreate(&impl->grammars)); 7534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, CircularBufferCreate(sizeof(asr_int16_t) * AUDIO_CIRC_BUFFER_SIZE, MTAG, &impl->buffer)); 7544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetSize_t("CREC.Frontend.samplerate", &impl->sampleRate)); 7554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 7564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->FRAME_SIZE = impl->sampleRate / FRAMERATE * SAMPLE_SIZE; 7574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 7584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ((impl->audioBuffer = MALLOC(impl->FRAME_SIZE, MTAG)) == NULL) 7594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 7604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 7614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 7624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 7634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 7644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* create the waveform buffer */ 7654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_Create(&impl->waveformBuffer, impl->FRAME_SIZE)); 7664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 7674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetSize_t("SREC.Recognizer.utterance_timeout", &impl->utterance_timeout)); 7684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 7694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI logging (SUCCESS) */ 7704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("REC"), recHandle)); 7714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("SUCCESS"), L("ESR_SUCCESS"))); 7724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SWIcrnd"))); 7734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 7744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_AcousticStateCreateImpl(&impl->Interface)); 7754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 7764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetSize_t(L("cmdline.bgsniff"), &impl->bgsniff)); 7774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* gated mode == beginning of speech detection */ 7784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetBool(L("cmdline.gatedmode"), &impl->gatedMode)); 7794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 7804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *self = (SR_Recognizer*) impl; 7814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 7824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 7834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI logging (FAILURE) */ 7844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 7854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 7864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("REC"), recHandle); 7874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("FAILURE"), ESR_rc2str(rc)); 7884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SWIcrnd")); 7894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 7904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 7914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (recogParams != NULL) 7924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeRecognitionParameters(recogParams); 7934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.destroy(&impl->Interface); 7944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 7954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 7964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 7974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerDestroyImpl(SR_Recognizer* self) 7984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 7994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 8004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL exists; // isSetup; 8014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 8024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR recHandle[12]; 8034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 8044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->result != NULL) 8054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 8064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResult_Destroy(impl->result); 8074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->result = NULL; 8084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 8094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 8104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 8114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 8124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Record the OSI log event */ 8134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project psprintf(recHandle, L("%p"), impl); 8144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("REC"), recHandle)); 8154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SWIdesst"))); 8164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 8174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 8184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Clean session */ 8194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionContains("recognizer.confidenceScorer", &exists)); 8204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (exists) 8214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionRemoveProperty("recognizer.confidenceScorer")); 8224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 8234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->confidenceScorer != NULL) 8244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 8254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeConfidenceScorer(impl->confidenceScorer); 8264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->confidenceScorer = NULL; 8274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 8284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 8294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Clear CMS, CRS_RecognizerClose() */ 8304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->wavein != NULL) 8314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 8324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL isAttached, isConfigured; 8334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 8344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, CA_IsCMSAttachedtoUtterance(impl->wavein, &isAttached)); 8354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (isAttached) 8364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_DetachCMSfromUtterance(impl->wavein, impl->utterance); 8374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 8384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, CA_IsConfiguredForAgc(impl->wavein, &isConfigured)); 8394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (isConfigured) 8404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_ClearCMSParameters(impl->wavein); 8414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 8424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 8434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Free Utterance */ 8444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->utterance != NULL) 8454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 8464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_ClearUtterance(impl->utterance); 8474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeUtterance(impl->utterance); 8484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->utterance = NULL; 8494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 8504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 8514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Free WaveformBuffer */ 8524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->waveformBuffer != NULL) 8534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 8544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project WaveformBuffer_Destroy(impl->waveformBuffer); 8554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->waveformBuffer = NULL; 8564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 8574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 8584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Free recognizer */ 8594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* CHKLOG(rc, self->isSetup(self, &isSetup)); 8604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (isSetup) 8614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, self->unsetup(self));*/ 8624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->grammars != NULL) 8634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, self->deactivateAllRules(self)); 8644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->recognizer != NULL) 8654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 8664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_UnloadRecognitionModels(impl->recognizer); 8674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_UnconfigureRecognition(impl->recognizer); 8684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeRecognition(impl->recognizer); 8694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recognizer = NULL; 8704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 8714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 8724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->grammars != NULL) 8734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 8744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, HashMapDestroy(impl->grammars)); 8754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->grammars = NULL; 8764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 8774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 8784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->buffer != NULL) 8794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 8804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE(impl->buffer); 8814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->buffer = NULL; 8824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 8834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 8844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->audioBuffer != NULL) 8854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 8864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE(impl->audioBuffer); 8874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->audioBuffer = NULL; 8884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 8894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 8904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Free frontend */ 8914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->frontend) 8924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 8934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_UnconfigureFrontend(impl->frontend); 8944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeFrontend(impl->frontend); 8954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->frontend = NULL; 8964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 8974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 8984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Free wave */ 8994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->wavein) 9004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 9014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_UnconfigureWave(impl->wavein); 9024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeWave(impl->wavein); 9034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->wavein = NULL; 9044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 9054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 9064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->parameters != NULL) 9074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->parameters->destroy(impl->parameters)); 9084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 9094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 9104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 9114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI logging (SUCCESS) */ 9124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("REC"), recHandle)); 9134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("SUCCESS"), L("ESR_SUCCESS"))); 9144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SWIdesnd"))); 9154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->eventLog = NULL; 9164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 9174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 9184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->acousticState != NULL) 9194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 9204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->acousticState->destroy(self); 9214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->acousticState = NULL; 9224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 9234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE(impl); 9244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 9254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 9264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 9274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 9284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 9294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode beginRecognizing(SR_RecognizerImpl* impl) 9304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 9314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_RecInputParams* recogParams; 9324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR tok[80]; 9334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* val; 9344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PTimeStamp BORT; 9354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t i, grammarSize; 9364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 9374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 9384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Setup recognizer for new utterance */ 9394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project recogParams = CA_AllocateRecognitionParameters(); 9404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (recogParams == NULL) 9414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 9424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 9434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 9444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 9454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 9464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModels_LoadLegacyRecognizerParameters(recogParams); 9474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_BeginRecognition(impl->recognizer, NULL, 1, recogParams); 9484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeRecognitionParameters(recogParams); 9494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isRecognizing = ESR_TRUE; 9504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 9514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI log the grammars */ 9524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, HashMapGetSize(impl->grammars, &grammarSize)); 9534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < grammarSize; ++i) 9544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 955b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland psprintf(tok, L("GURI%zu"), i); 9564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* use the key as the grammar URI */ 9574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, HashMapGetKeyAtIndex(impl->grammars, i, &val)); 9584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, tok, val)); 9594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 9604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI ACST acoustic state reset */ 9614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->osi_log_level, L("ACST"), 0)); 9624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("LANG"), L("en-us"))); 9634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 9644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI log the start of recognition */ 9654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SWIrcst"))); 9664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 9674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* save the BORT timing (begin of recog) */ 9684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PTimeStampSet(&BORT); 9694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recogLogTimings.BORT = PTimeStampDiff(&BORT, &impl->timestamp); 9704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 9714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 9724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 9734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (recogParams != NULL) 9744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeRecognitionParameters(recogParams); 9754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 9764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 9774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 9784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerStartImpl(SR_Recognizer* self) 9794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 9804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 9814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t silence_duration_in_frames; 9824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t end_of_utterance_hold_off_in_frames; 9834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t grammarCount; 9844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 9854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL enableGetWaveform = ESR_FALSE; 9864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 9874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->grammars->getSize(impl->grammars, &grammarCount)); 9884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->models == NULL) 9894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 9904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError("ESR_INVALID_STATE: No rule has been set up"); 9914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 9924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 9934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (grammarCount < 1) 9944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 9954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError("ESR_INVALID_STATE: No rule has been activated"); 9964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 9974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 9984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 9994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!CA_OpenWaveFromDevice(impl->wavein, DEVICE_RAW_PCM, impl->frontend->samplerate, 0, WAVE_DEVICE_RAW)) 10004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 10014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 10024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 10034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 10044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 10054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 10064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Setup utterance */ 10074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_UnlockUtteranceForInput(impl->utterance); 10084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 10094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Setup utterance */ 10104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetSize_t(L("cmdline.silence_duration_in_frames"), &silence_duration_in_frames)); 10114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetSize_t(L("cmdline.end_of_utterance_hold_off_in_frames"), &end_of_utterance_hold_off_in_frames)); 10124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_SetEndOfUtteranceByLevelTimeout(impl->utterance, silence_duration_in_frames, end_of_utterance_hold_off_in_frames); 10134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 10144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_ResetVoicing(impl->utterance); 10154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 10164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 10174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * NOTE: We don't actually begin the recognizer here, the beginning of speech 10184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * detector will do that. 10194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 10204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 10214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->gotLastFrame = ESR_FALSE; 10224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isStarted = ESR_TRUE; 10234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isRecognizing = ESR_FALSE; 10244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isSignalQualityInitialized = ESR_FALSE; 10254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_BEGIN; 10264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PTimeStampSet(&impl->timestamp); 10274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 10284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* reset waveform buffer at start of every recognition */ 10294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_Reset(impl->waveformBuffer)); 10304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 10314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* is waveform buffering active? */ 10324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_SessionGetBool(L("enableGetWaveform"), &enableGetWaveform); 10334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // rc = impl->parameters->getBool(impl->parameters, L("enableGetWaveform"), &enableGetWaveform); 10344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS && rc != ESR_NO_MATCH_ERROR) 10354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 10364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("%s: could determine whether VoiceEnrollment active or not"), ESR_rc2str(rc)); 10374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 10384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 10394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (enableGetWaveform) 10404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_SetBufferingState(impl->waveformBuffer, WAVEFORM_BUFFERING_ON_CIRCULAR)); 10414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 10424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_SetBufferingState(impl->waveformBuffer, WAVEFORM_BUFFERING_OFF)); 10434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 10444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* I am going to try to open the audio waveform file here */ 10454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->osi_log_level & OSI_LOG_LEVEL_AUDIO) 10464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 10474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* open a new audio waveform file */ 10484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = SR_EventLogAudioOpen(impl->eventLog, L("audio/L16"), impl->sampleRate, SAMPLE_SIZE); 10494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 10504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 10514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("%s: could not open the RIFF audio file"), ESR_rc2str(rc)); 10524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 10534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 10544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 10554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->frames = impl->processed = 0; 10564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 10574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 10584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* self->stop(self);*/ 10594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 10604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 10614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 10624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerStopImpl(SR_Recognizer* self) 10634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 10644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 10654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModelsImpl* modelsImpl; 10664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 10674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 10684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLOG_DBG_API_ENTER(); 10694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!impl->isStarted) 10704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 10714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* In case the user calls stop() twice */ 10724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 10734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 10744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project modelsImpl = (SR_AcousticModelsImpl*) impl->models; 10754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 10764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Clean-up recognizer and utterance */ 10774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project switch (impl->internalState) 10784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 10794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SR_RECOGNIZER_INTERNAL_BEGIN: 10804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Recognizer was never started */ 10814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("MODE"), L("BEGIN"))); 10824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_LockUtteranceFromInput(impl->utterance); 10834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 10844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 10854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 10864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("SR_RECOGNIZER_INTERNAL_BEGIN -> SR_RECOGNIZER_INTERNAL_END"))); 10874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 10884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 10894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 10904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 10914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 10924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 10934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SR_RECOGNIZER_INTERNAL_BOS_TIMEOUT: 10944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Recognizer was never started */ 10954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("MODE"), L("BOS_TIMEOUT"))); 10964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_LockUtteranceFromInput(impl->utterance); 10974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 10984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 10994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 11004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("SR_RECOGNIZER_INTERNAL_BOS_TIMEOUT -> SR_RECOGNIZER_INTERNAL_END"))); 11014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 11024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 11034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 11044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 11054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 11064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 11074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SR_RECOGNIZER_INTERNAL_BOS_NO_MATCH: 11084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Recognizer was never started */ 11094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("MODE"), L("BOS_NO_MATCH"))); 11104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_LockUtteranceFromInput(impl->utterance); 11114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 11124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 11134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 11144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("SR_RECOGNIZER_INTERNAL_BOS_NO_MATCH -> SR_RECOGNIZER_INTERNAL_END"))); 11154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 11164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 11174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 11184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 11194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 11204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 11214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SR_RECOGNIZER_INTERNAL_BOS_DETECTION: 11224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Recognizer was never started */ 11234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("MODE"), L("BOS_DETECTION"))); 11244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_LockUtteranceFromInput(impl->utterance); 11254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 11264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 11274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 11284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("SR_RECOGNIZER_INTERNAL_BOS_DETECTION -> SR_RECOGNIZER_INTERNAL_END"))); 11294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 11304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 11314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 11324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 11334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 11344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 11354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SR_RECOGNIZER_INTERNAL_EOS_DETECTION: 11364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("MODE"), L("EOS_DETECTION"))); 11374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_LockUtteranceFromInput(impl->utterance); 11384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!CA_EndRecognition(impl->recognizer, modelsImpl->pattern, impl->utterance)) 11394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 11404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 11414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 11424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 11434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 11444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 11454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 11464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 11474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("SR_RECOGNIZER_INTERNAL_EOS_DETECTION -> SR_RECOGNIZER_INTERNAL_END"))); 11484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 11494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 11504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 11514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 11524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 11534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 11544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SR_RECOGNIZER_INTERNAL_EOI: 11554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("MODE"), L("EOI"))); 11564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_LockUtteranceFromInput(impl->utterance); 11574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!CA_EndRecognition(impl->recognizer, modelsImpl->pattern, impl->utterance)) 11584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 11594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 11604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 11614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 11624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 11634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 11644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 11654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 11664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("SR_RECOGNIZER_INTERNAL_EOI -> SR_RECOGNIZER_INTERNAL_END"))); 11674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 11684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 11694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 11704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 11714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 11724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 11734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SR_RECOGNIZER_INTERNAL_EOS: 11744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("MODE"), L("EOS"))); 11754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_LockUtteranceFromInput(impl->utterance); 11764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!CA_EndRecognition(impl->recognizer, modelsImpl->pattern, impl->utterance)) 11774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 11784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 11794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 11804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 11814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 11824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 11834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 11844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 11854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("SR_RECOGNIZER_INTERNAL_EOS -> SR_RECOGNIZER_INTERNAL_END"))); 11864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 11874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 11884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 11894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 11904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 11914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 11924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SR_RECOGNIZER_INTERNAL_END: 11934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Recognizer already shut down */ 11944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("MODE"), L("END"))); 11954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 11964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 11974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project default: 11984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Shut down recognizer */ 11994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->osi_log_level, L("MODE"), impl->internalState)); 12004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 12014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 12024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("unknown state -> SR_RECOGNIZER_INTERNAL_END"))); 12034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 12044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 12054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 12064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 12074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_LockUtteranceFromInput(impl->utterance); 12084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->isRecognizing) 12094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 12104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!CA_EndRecognition(impl->recognizer, modelsImpl->pattern, impl->utterance)) 12114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 12124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 12134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 12144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 12154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 12164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 12174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 12184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("%s: %d"), ESR_rc2str(rc), impl->internalState); 12194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 12204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 12214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 12224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 12234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 12244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int n; 12254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR result[MAX_ENTRY_LENGTH]; 12264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project result[0] = L('\0'); 12274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 12284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project n = CA_GetUnprocessedFramesInUtterance(impl->utterance); 12294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt(impl->eventLog, L("CA_GetUnprocessedFramesInUtterance() (x10ms)"), n)); 12304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FullResultLabel(impl->recognizer, result, MAX_ENTRY_LENGTH - 1); 12314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken(impl->eventLog, L("CA_FullResultLabel() (x20ms)"), result)); 12324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project n = CircularBufferGetSize(impl->buffer); 12334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt(impl->eventLog, L("CircularBufferGetSize() (samples)"), n / SAMPLE_SIZE)); 12344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 12354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 12364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_LOCK, impl->lockData); 12374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CircularBufferReset(impl->buffer); 12384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 12394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 12404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (CA_RecognitionHasResults(impl->recognizer)) 12414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_ClearResults(impl->recognizer); 12424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FlushUtteranceFrames(impl->utterance); 12434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_CalculateCMSParameters(impl->wavein); 12444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_CloseDevice(impl->wavein); 12454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 12464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* record the OSI event */ 12474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SWIstop"))); 12484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 12494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->result != NULL) 12504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 12514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_RecognizerResult_Destroy(impl->result)); 12524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->result = NULL; 12534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 12544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 12554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 12564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_LOCK, impl->lockData); 12574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->gotLastFrame = ESR_TRUE; 12584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLOG_DBG_TRACE((L("SR_Recognizer shutdown occured"))); 12594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isStarted = ESR_FALSE; 12604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isRecognizing = ESR_FALSE; 12614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->osi_log_level & OSI_LOG_LEVEL_AUDIO) 12624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_EventLogAudioClose(impl->eventLog); 12634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 12644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recogLogTimings.BORT = 0; 12654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recogLogTimings.DURS = 0; 12664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recogLogTimings.EORT = 0; 12674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recogLogTimings.EOSD = 0; 12684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recogLogTimings.EOSS = 0; 12694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recogLogTimings.BOSS = 0; 12704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recogLogTimings.EOST = 0; 12714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->eos_reason = L("undefined"); 12724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 12734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 12744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 12754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLOG_DBG_API_EXIT(rc); 12764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 12774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 12784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLOG_DBG_API_EXIT(rc); 12794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 12804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 12814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 12824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerSetupImpl(SR_Recognizer* self) 12834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 12844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 12854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_AcoustInputParams* acousticParams = NULL; 12864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModelsImpl* modelsImpl; 12874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModels* models; 12884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* recogImpl = NULL; 12894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_Acoustic* acoustic; 12904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t size, i; 12914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR filenames[P_PATH_MAX]; 12924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t len; 12934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 12944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = P_PATH_MAX; 12954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetLCHAR ( L("cmdline.modelfiles"), filenames, &len )); 12964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 12974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_AcousticModelsLoad ( filenames, &models )); 12984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 12994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (models == NULL) 13004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 13014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_STATE while finding cmdline.modelfiles")); 13024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 13034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 13044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project modelsImpl = (SR_AcousticModelsImpl*) models; 13054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project recogImpl = (SR_RecognizerImpl*) self; 13064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project acousticParams = NULL; 13074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 13084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_AcousticModelsGetCount(models, &size)); 13094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project acousticParams = CA_AllocateAcousticParameters(); 13104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (acousticParams == NULL) 13114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 13124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 13134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 13144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 13154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 13164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, modelsImpl->getLegacyParameters(acousticParams)); 13174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGetSize(modelsImpl->acoustic, &size)); 13184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 13194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 13204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGet(modelsImpl->acoustic, i, (void **)&acoustic)); 13214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_LoadModelsInAcoustic(recogImpl->recognizer, acoustic, acousticParams); 13224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 13234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeAcousticParameters(acousticParams); 13244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 13254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project recogImpl->models = models; 13264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, modelsImpl->setupPattern(recogImpl->models, self)); 13274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 13284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CLEANUP: 13294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (acousticParams != NULL) 13304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeAcousticParameters(acousticParams); 13314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (recogImpl != NULL) 13324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_UnloadRecognitionModels(recogImpl->recognizer); 13334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 13344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 13354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 13364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerUnsetupImpl(SR_Recognizer* self) 13374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 13384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 13394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModelsImpl* modelsImpl = (SR_AcousticModelsImpl*) impl->models; 13404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 13414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 13424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, modelsImpl->unsetupPattern(impl->models)); 13434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_UnloadRecognitionModels(impl->recognizer); 13444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_AcousticModelsDestroy ( impl->models )); 13454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->models = NULL; 13464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 13474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CLEANUP: 13484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 13494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 13504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 13514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerIsSetupImpl(SR_Recognizer* self, ESR_BOOL* isSetup) 13524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 13534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 13544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 13554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (isSetup == NULL) 13564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 13574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_ARGUMENT")); 13584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 13594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 13604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *isSetup = impl->models != NULL; 13614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 13624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 13634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 13644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerGetParameterImpl(SR_Recognizer* self, const LCHAR* key, 13654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* value, size_t* len) 13664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 13674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 13684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 13694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 13704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = impl->parameters->getLCHAR(impl->parameters, key, value, len); 13714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc == ESR_NO_MATCH_ERROR) 13724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 13734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetLCHAR(key, value, len)); 13744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 13754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 13764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (rc != ESR_SUCCESS) 13774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 13784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 13794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 13804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 13814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 13824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 13834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 13844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 13854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 13864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* 13874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * The get / set code is a mess. Since we only use size_t parameters, that's all 13884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * that I am going to make work. The impl->parameters don't work so you always 13894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * have to get them from the session. The impl always logs an error. SteveR 13904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 13914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 13924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerGetSize_tParameterImpl(SR_Recognizer* self, const LCHAR* key, 13934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t* value) 13944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 13954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 13964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 13974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetSize_t(key, value)); 13984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 13994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 14004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 14014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 14024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 14034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerGetBoolParameterImpl(SR_Recognizer* self, const LCHAR* key, ESR_BOOL* value) 14044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 14054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 14064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 14074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 14084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = impl->parameters->getBool(impl->parameters, key, value); 14094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc == ESR_NO_MATCH_ERROR) 14104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 14114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetBool(key, value)); 14124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 14134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 14144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (rc != ESR_SUCCESS) 14154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 14164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 14174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 14184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 14194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 14204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 14214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 14224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 14234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 14244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerSetParameterImpl(SR_Recognizer* self, const LCHAR* key, 14254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* value) 14264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 14274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 14284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR temp[256]; 14294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 14304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t len = 256; 14314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 14324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = impl->parameters->getLCHAR(impl->parameters, key, temp, &len); 14334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc == ESR_SUCCESS) 14344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 14354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (LSTRCMP(temp, value) == 0) 14364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 14374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->parameters->removeAndFreeProperty(impl->parameters, key)); 14384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 14394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (rc != ESR_NO_MATCH_ERROR && rc != ESR_INVALID_RESULT_TYPE) 14404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 14414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 14424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 14434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 14444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 14454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->parameters->setLCHAR(impl->parameters, key, value)); 14464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 14474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 14484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 14494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 14504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* 14514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * The only set param function that is working is for the size_t parameters; and not 14524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * all of them are working, only the ones specified in the function itself. There are 14534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * two reasons for this: first most of the set functions just put the value in an unused 14544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * table that has no effect; second many of the changes need to be propogated to a specific 14554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * part of the code. This needs to be evaluated on a per parameter basis. SteveR 14564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 14574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 14584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* 14594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * This function will be used to set parameters in the session. We need to go through 14604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * the recognizer so as to propogate the values into the recognizer. We will rely on 14614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * the session to do the right thing. SteveR 14624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 14634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 14644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerSetSize_tParameterImpl(SR_Recognizer* self, const LCHAR* key, 14654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t value) 14664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 14674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 14684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 14694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 14704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_SessionSetSize_t ( key, value ); 14714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 14724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc == ESR_SUCCESS) 14734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 14744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( LSTRCMP ( L("SREC.Recognizer.utterance_timeout"), key ) == 0 ) 14754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 14764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->utterance_timeout = value; 14774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 14784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if ( LSTRCMP ( L("CREC.Recognizer.terminal_timeout"), key ) == 0 ) 14794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 14804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recognizer->eosd_parms->endnode_timeout = value; 14814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 14824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if ( LSTRCMP ( L("CREC.Recognizer.optional_terminal_timeout"), key ) == 0 ) 14834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 14844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recognizer->eosd_parms->optendnode_timeout = value; 14854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 14864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if ( LSTRCMP ( L("CREC.Recognizer.non_terminal_timeout"), key ) == 0 ) 14874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 14884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recognizer->eosd_parms->internalnode_timeout = value; 14894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 14904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if ( LSTRCMP ( L("CREC.Recognizer.eou_threshold"), key ) == 0 ) 14914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 14924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recognizer->eosd_parms->eos_costdelta = (frameID)value; 14934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recognizer->eosd_parms->opt_eos_costdelta = (frameID)value; 14944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 14954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 14964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 14974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_ARGUMENT")); 14984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_ARGUMENT; 14994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 15004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 15014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 15024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 15034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 15044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 15054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerSetBoolParameterImpl(SR_Recognizer* self, const LCHAR* key, ESR_BOOL value) 15064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 15074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 15084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL temp; 15094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 15104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 15114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = impl->parameters->getBool(impl->parameters, key, &temp); 15124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc == ESR_SUCCESS) 15134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 15144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (temp == value) 15154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 15164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->parameters->removeAndFreeProperty(impl->parameters, key)); 15174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 15184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (rc != ESR_NO_MATCH_ERROR && rc != ESR_INVALID_RESULT_TYPE) 15194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 15204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 15214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->parameters->setBool(impl->parameters, key, value)); 15224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 15234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 15244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 15254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 15264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 15274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerHasSetupRulesImpl(SR_Recognizer* self, ESR_BOOL* hasSetupRules) 15284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 15294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* recogImpl = (SR_RecognizerImpl*) self; 15304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t size; 15314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 15324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 15334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (hasSetupRules == NULL) 15344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 15354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_ARGUMENT")); 15364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 15374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 15384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, HashMapGetSize(recogImpl->grammars, &size)); 15394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *hasSetupRules = size > 0; 15404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 15414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 15424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 15434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 15444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 15454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerActivateRuleImpl(SR_Recognizer* self, SR_Grammar* grammar, 15464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const LCHAR* ruleName, unsigned int weight) 15474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 15484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 15494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_GrammarImpl* grammarImpl = (SR_GrammarImpl*) grammar; 15504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModelsImpl* modelsImpl; 15514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR grammarID[80]; 15524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 15534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project char *failure_reason = NULL; 15544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 15554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (grammar == NULL) 15564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 15574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog) 15584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project failure_reason = "badinput"; 15594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_ARGUMENT; 15604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_ARGUMENT")); 15614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 15624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 15634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 15644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->models == NULL) 15654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 15664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project failure_reason = "nomodels"; 15674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 15684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("acoustic models must be configured")); 15694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 15704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 15714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 15724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project modelsImpl = (SR_AcousticModelsImpl*) impl->models; 15734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 15744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (ruleName == NULL) 15754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project psprintf(grammarID, L("%p"), grammar); 15764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 15774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 15784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (LSTRLEN(ruleName) > 80) 15794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 15804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_BUFFER_OVERFLOW; 15814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 15824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 15834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 15844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(grammarID, ruleName); 15854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 15864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 15874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, HashMapPut(impl->grammars, grammarID, grammar)); 15884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (CA_SetupSyntaxForRecognizer(grammarImpl->syntax, impl->recognizer)) 15894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 15904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project failure_reason = "cafailed"; 15914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 15924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_STATE")); 15934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 15944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 15954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 15964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_Grammar_SetupRecognizer(grammar, self)); 15974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project grammarImpl->isActivated = ESR_TRUE; 15984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 15994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 16004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * If we want to log dynamically added words, then we must give the grammar a reference 16014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * to our event log. The grammar logs word additions if and only if its reference to 16024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * eventLog is non-null. 16034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 16044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->osi_log_level & OSI_LOG_LEVEL_ADDWD) 16054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project grammarImpl->eventLog = impl->eventLog; 16064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 16074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project grammarImpl->eventLog = NULL; 16084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 16094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_SUCCESS; 16104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 16114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 16124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog) 16134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 16144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (failure_reason) 16154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1616b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland SR_EventLogTokenPointer(impl->eventLog, L("igrm"), grammar); 16174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_EventLogToken(impl->eventLog, L("rule"), ruleName); 16184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_EventLogToken(impl->eventLog, L("rslt"), "fail"); 16194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_EventLogToken(impl->eventLog, L("reason"), failure_reason); 16204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_EventLogEvent(impl->eventLog, L("ESRacGrm")); 16214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 16224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 16234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1624b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland SR_EventLogTokenPointer(impl->eventLog, L("igrm"), grammar); 16254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_EventLogToken(impl->eventLog, L("rule"), ruleName); 16264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_EventLogToken(impl->eventLog, L("rslt"), "ok"); 16274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_EventLogEvent(impl->eventLog, L("ESRacGrm")); 16284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 16294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 16304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 16314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 16324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 16334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerDeactivateRuleImpl(SR_Recognizer* self, SR_Grammar* grammar, 16344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const LCHAR* ruleName) 16354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 16364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 16374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_GrammarImpl* grammarImpl = (SR_GrammarImpl*) grammar; 16384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR grammarID[MAX_INT_DIGITS+1]; 16394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 16404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 16414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (ruleName == NULL) 16424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 16434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project psprintf(grammarID, L("%p"), grammar); 16444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, HashMapRemove(impl->grammars, grammarID)); 16454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 16464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 16474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, HashMapRemove(impl->grammars, ruleName)); 16484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project grammarImpl->isActivated = ESR_FALSE; 16494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 16504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 16514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 16524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 16534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 16544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerDeactivateAllRulesImpl(SR_Recognizer* self) 16554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 16564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 16574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 16584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 16594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, HashMapRemoveAll(impl->grammars)); 16604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_ClearSyntaxForRecognizer(0, impl->recognizer); 16614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 16624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 16634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 16644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 16654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 16664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerIsActiveRuleImpl(SR_Recognizer* self, SR_Grammar* grammar, 16674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const LCHAR* ruleName, ESR_BOOL* isActiveRule) 16684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 16694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 16704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR grammarID[MAX_INT_DIGITS+1]; 16714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 16724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 16734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project psprintf(grammarID, L("%p"), grammar); 16744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, HashMapContainsKey(impl->grammars, (LCHAR*) &grammarID, isActiveRule)); 16754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 16764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 16774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 16784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 16794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 16804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerSetWordAdditionCeilingImpl(SR_Recognizer* self, SR_Grammar* grammar) 16814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 16824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 16834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_GrammarImpl* grammarImpl = (SR_GrammarImpl*)grammar; 16844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int iRc; 16854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 16864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(!impl || !grammarImpl) 16874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 16884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project iRc = CA_CeilingSyntaxForRecognizer( grammarImpl->syntax, impl->recognizer); 16894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(iRc) return ESR_INVALID_STATE; 16904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 16914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 16924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 16934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 16944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerCheckGrammarConsistencyImpl(SR_Recognizer* self, SR_Grammar* grammar, 16954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL* isConsistent) 16964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 16974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 16984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_GrammarImpl* grammarImpl; 16994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl2; 17004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 17014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 17024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project grammarImpl = (SR_GrammarImpl*) grammar; 17034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl2 = (SR_RecognizerImpl*)grammarImpl->recognizer; 17044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // *isConsistent = grammarImpl->models == impl->models; 17054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *isConsistent = (impl2->models == impl->models); 17064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 17074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 17084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 17094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerGetModelsImpl(SR_Recognizer* self, SR_AcousticModels** pmodels) 17104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 17114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 17124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *pmodels = impl->models; 17134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 17144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 17154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 17164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerPutAudioImpl(SR_Recognizer* self, asr_int16_t* buffer, size_t* bufferSize, 17174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL isLast) 17184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 17194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 17204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 17214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int rcBufWrite; 17224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t nbWritten; 17234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 17244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (isLast == ESR_FALSE && (buffer == NULL || bufferSize == NULL)) 17254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 17264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_ARGUMENT")); 17274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 17284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 17294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 17304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 17314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_LOCK, impl->lockData); 17324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!impl->isStarted) 17334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 17344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 17354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 17364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage(L("ESR_INVALID_STATE: Tried pushing audio while recognizer was offline")); 17374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 17384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 17394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->gotLastFrame) 17404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 17414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 17424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 17434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage(L("ESR_INVALID_STATE: isLast=TRUE")); 17444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 17454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 17464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (buffer == NULL && isLast == ESR_FALSE) 17474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 17484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 17494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 17504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_ARGUMENT: got NULL buffer on non-terminal frame")); 17514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 17524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 17534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 17544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rcBufWrite = CircularBufferWrite(impl->buffer, buffer, *bufferSize * SAMPLE_SIZE); 17554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rcBufWrite < 0) 17564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 17574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 1758b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland PLogError(L("%s: error writing to buffer (buffer=%p, available=%u)"), ESR_rc2str(rc), impl->buffer, CircularBufferGetAvailable(impl->buffer)); 17594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 17604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 17614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 17624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project nbWritten = (size_t)rcBufWrite; 17634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (nbWritten % SAMPLE_SIZE != 0) 17644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 17654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t amountUnwritten; 17664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 17674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* The buffer is byte-based while we're sample based. Make sure we write entire samples or not at all */ 17684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project amountUnwritten = CircularBufferUnwrite(impl->buffer, nbWritten % SAMPLE_SIZE); 17694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(amountUnwritten == nbWritten % SAMPLE_SIZE); 17704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project nbWritten -= amountUnwritten; 17714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 17724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(nbWritten % 2 == 0); /* make sure CircularBufferSize is divisible by 2 */ 17734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 17744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (nbWritten < *bufferSize * SAMPLE_SIZE) 17754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 17764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_BUFFER_OVERFLOW; 17774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifndef NDEBUG 17784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLOG_DBG_TRACE((L("%s: writing to circular buffer"), ESR_rc2str(rc))); 17794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 17804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *bufferSize = nbWritten / SAMPLE_SIZE; 17814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 17824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 17834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 17844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 17854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 17864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 17874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 17884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (isLast) 17894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->gotLastFrame = ESR_TRUE; 17904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 17914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 17924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 17934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 17944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 17954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* utility function to sort the ArrayList of nbest list results by the score of the first 17964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project semantic result */ 17974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SemanticResults_SortByScore(ArrayList *results, size_t nbestSize) 17984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 17994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 18004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ArrayList* semanticResultList; 18014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ArrayList* semanticResultList_swap; 18024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_SemanticResult* semanticResult_i; 18034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_SemanticResult* semanticResult_j; 18044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t i, j; 18054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR scoreStr[MAX_ENTRY_LENGTH] ; 18064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t scoreStrLen = MAX_ENTRY_LENGTH ; 18074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int score_i, score_j; 18084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 18094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* bubble sort */ 18104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < (size_t)nbestSize; ++i) 18114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 18124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (j = i + 1; j < (size_t)nbestSize; ++j) 18134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 18144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get for i */ 18154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGet(results, i, (void **)&semanticResultList)); /* nbest index */ 18164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGet(semanticResultList, 0, (void **)&semanticResult_i)); /* semresult 0 */ 18174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 18184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get for j */ 18194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGet(results, j, (void **)&semanticResultList)); /* nbest index */ 18204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGet(semanticResultList, 0, (void **)&semanticResult_j)); /* semresult 0 */ 18214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 18224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project scoreStrLen = MAX_ENTRY_LENGTH ; 18234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticResult_i->getValue(semanticResult_i, "raws", scoreStr, &scoreStrLen)); 18244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, lstrtoi(scoreStr, &score_i, 10)); 18254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project scoreStrLen = MAX_ENTRY_LENGTH ; 18264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticResult_j->getValue(semanticResult_j, "raws", scoreStr, &scoreStrLen)); 18274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, lstrtoi(scoreStr, &score_j, 10)); 18284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 18294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (score_j < score_i) 18304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 18314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* need to swap */ 18324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGet(results, i, (void **)&semanticResultList_swap)); /* put i in swap */ 18334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListSet(results, i, semanticResultList)); /* put j in i */ 18344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListSet(results, j, semanticResultList_swap)); /* put swap in j */ 18354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 18364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 18374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 18384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 18394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 18404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 18414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 18424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 18434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode filter_CA_FullResultLabel(const LCHAR* label, LCHAR *filtered_label, size_t* boss, size_t* eoss) 18444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 18454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 18464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project enum 18474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 18484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project NO_COPY, 18494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FRAME, 18504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project WORD, 18514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } filter_state = WORD; 18524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR *dst = filtered_label; 18534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR eosBuf[16]; /* max 9999 + '\0' */ 18544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR bosBuf[16]; /* max 9999 + '\0' */ 18554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* pBuf = NULL; 18564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 18574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 18584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * example: you want to filter this: 18594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 18604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * "-pau-@23 clock@97 twenty_four@125 hour@145 " 18614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * ^boss = 23 ^ eoss = 145 18624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * and get this: 18634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 18644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * "clock twenty_four hour" 18654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 18664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 18674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(LSTRLEN(label) > 0); 18684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project while (*label) 18694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 18704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project switch (filter_state) 18714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 18724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case NO_COPY: 18734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (*label == L(' ')) 18744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project filter_state = WORD; 18754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (*label == L('@')) 18764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 18774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project filter_state = FRAME; 18784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (pBuf == NULL) 18794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pBuf = bosBuf; 18804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 18814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 18824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *pBuf = 0; 18834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pBuf = eosBuf; 18844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 18854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 18864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 18874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case WORD: 18884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (*label == L('@')) 18894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 18904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *dst = L(' '); /* insert space */ 18914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project dst++; 18924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project filter_state = FRAME; 18934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (pBuf == NULL) 18944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pBuf = bosBuf; 18954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 18964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 18974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *pBuf = 0; 18984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pBuf = eosBuf; 18994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 19004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 19014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 19024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 19034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *dst = *label; 19044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project dst++; 19054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 19064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 19074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case FRAME: 19084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (*label == L(' ')) 19094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project filter_state = WORD; 19104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 19114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 19124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *pBuf = *label; 19134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pBuf++; 19144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 19154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 19164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 19174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project label++; 19184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 19194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *dst = 0; /* term the string */ 19204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *pBuf = 0; /* term the string */ 19214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 19224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* trim the end spaces */ 19234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project dst--; 19244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project while (*dst == ' ') 19254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *dst-- = '\0'; 19264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 19274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* set the eos signal indicated by the end pointed data */ 19284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (eosBuf[0] != 0) 1929b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland CHKLOG(rc, lstrtosize_t(eosBuf, eoss, 10)); 19304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 19314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project eoss = 0; 19324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 19334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (bosBuf[0] != 0) 1934b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland CHKLOG(rc, lstrtosize_t(bosBuf, boss, 10)); 19354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 19364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project boss = 0; 19374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 19384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 19394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 19404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 19414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 19424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 19434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 19444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Populates the recognizer result if it can, otherwise it returns NO MATCH cuz no results exist 19454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 19464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * INPUT STATE: SR_RECOGNIZER_INTERNAL_EOS 19474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 19484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Recognizer handle 19494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @todo break up into smaller functions 19504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 19514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerCreateResultImpl(SR_Recognizer* self, SR_RecognizerStatus* status, 19524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResultType* type) 19534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 19544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR label[MAX_ENTRY_LENGTH * 2]; /* run out of buffer */ 19554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define WORDID_COUNT 48 /* can be quite high for voice enrollment! */ 19564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project wordID wordIDs[WORDID_COUNT]; 19574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR tok[80]; 19584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR waveformFilename[P_PATH_MAX]; 19594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* pkey; 19604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_GrammarImpl* pgrammar; 19614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project asr_int32_t raws; /* raw score */ 19624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t iBest, nbestSize, jBest, k, grammarSize, semanticResultsSize, grammarIndex_for_iBest; 19634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* lValue; 19644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* lValue2; 19654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int confValue; 19664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 19674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResultImpl* resultImpl = (SR_RecognizerResultImpl*) impl->result; 19684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL containsKey; 19694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int valid, score, recogID; 19704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR result[MAX_ENTRY_LENGTH]; 19714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t len, size; 19724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t locale; 19734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int current_choice; 19744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 19754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 19764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Semantic result stuff 19774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 19784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* a temp buffer to hold semantic results of a parse (there may be several results) */ 19794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_SemanticResult* semanticResults[MAX_SEM_RESULTS]; 19804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ArrayList* semanticList; 19814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ArrayList* semanticList2; 19824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_SemanticResultImpl* semanticImpl; 19834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_SemanticResultImpl* semanticImpl2; 19844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_SemanticResult* semanticResult; 19854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_SemanticResult* semanticResult2; 19864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project waveform_buffering_state_t buffering_state; 19874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 19884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModelsImpl* modelsImpl = (SR_AcousticModelsImpl*) impl->models; 19894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 19904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PTimeStamp EORT; 19914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 19924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_LockUtteranceFromInput(impl->utterance); 19934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!CA_EndRecognition(impl->recognizer, modelsImpl->pattern, impl->utterance)) 19944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 19954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_STATE")); 19964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 19974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 19984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 19994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* check if the forward search was successful */ 20004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project valid = CA_FullResultLabel(impl->recognizer, result, MAX_ENTRY_LENGTH - 1); 20014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_GetRecogID(impl->recognizer, &recogID); 20024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FullResultScore(impl->recognizer, &score, 1); 20034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef SREC_ENGINE_VERBOSE_LOGGING 20044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage(L("R: %s type %d score %d from recognizer%d"), result, type, score, valid, recogID); 20054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage(L("R: %s score %d from recognizer%d"), result, score, valid, recogID); 20064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 20074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef _WIN32 20084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project //pfprintf(PSTDOUT, ("R: %s type %d score %d from recognizer%d\n"), result, type, score, valid, recogID); 20094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 20104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 20114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 20124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project switch (valid) 20134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 20144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case FULL_RESULT: 20154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, filter_CA_FullResultLabel(result, label, &impl->recogLogTimings.BOSS, &impl->recogLogTimings.EOSS)); 20164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef SREC_ENGINE_VERBOSE_LOGGING 20174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage("R: %s", result); 20184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 20194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FullResultScore(impl->recognizer, (int*) &raws, 0); 20204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef SREC_ENGINE_VERBOSE_LOGGING 20214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage("S: %d", raws); 20224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 20234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 20244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* now that we have an endpointed result, we can parse the result transcription 20254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project to see where speech started and ended. Then we can trim off excess parts of the 20264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project recorded audio waveform (if exists) so that nametags are just the right amount of 20274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project audio 20284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 20294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_GetBufferingState(impl->waveformBuffer, &buffering_state)); 20304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (buffering_state != WAVEFORM_BUFFERING_OFF) 20314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 20324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_GetSize(impl->waveformBuffer, &size)); 20334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (size > 0) 20344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 20354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = WaveformBuffer_ParseEndPointedResultAndTrim(impl->waveformBuffer, result, impl->FRAME_SIZE); 20364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc == ESR_BUFFER_OVERFLOW) 20374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 20384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Nametag EOS occured beyond end of buffer */ 20394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 20404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (rc != ESR_SUCCESS) 20414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 20424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 20434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 20444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 20454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 20464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 20474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 20484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 20494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case REJECT_RESULT: 20504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef SREC_ENGINE_VERBOSE_LOGGING 20514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage(L("R: <REJECTED>")); 20524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 20534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 20544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project default: 20554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef SREC_ENGINE_VERBOSE_LOGGING 20564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage(L("E: No results available")); 20574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage(L("R: <FAILED>")); 20584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 20594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 20604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 20614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 20624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 20634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (valid == FULL_RESULT) 20644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 20654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Populate SR_RecognizerResult */ 20664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project resultImpl->nbestList = CA_PrepareNBestList(impl->recognizer, 10, &raws); 20674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (resultImpl->nbestList == NULL) 20684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 20694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 20704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * This is not a failure. It simply means that I have not advanced far 20714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * enough in recognition in order to obtain results (no paths in 20724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * graph). This occurs, for instance, when a eof is reached (no more data) 20734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * and I have not even created any paths in my graph. 20744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 20754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 20764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_NO_MATCH; 20774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_COMPLETE; 20784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 20794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 20804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 20814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("SR_RecognizerCreateResultImpl() -> SR_RECOGNIZER_INTERNAL_END"))); 20824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 20834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 20844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 20854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 20864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(0); 20874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 20884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 20894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 20904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project nbestSize = CA_NBestListCount(resultImpl->nbestList); 20914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 20924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 20934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project nbestSize = 0; 20944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 20954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (resultImpl->results != NULL) 20964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ArrayListRemoveAll(resultImpl->results); 20974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 20984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListCreate(&resultImpl->results)); 20994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (nbestSize == 0) 21004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 21014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 21024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Got empty n-best list even though the recognition was successful. 21034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * We handle this in the same way that recog_startpt does... we consider it a no match. 21044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * We could adjust the CREC.Recognizer.viterbi_prune_thresh to a higher level, but that 21054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * may not fix the problem completely. We need to fix the bug in the astar search!!! 21064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 21074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_NO_MATCH; 21084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_COMPLETE; 21094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 21104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 21114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 21124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("SR_RecognizerCreateResultImpl() -> SR_RECOGNIZER_INTERNAL_END"))); 21134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 21144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 21154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 21164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 21174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef SREC_ENGINE_VERBOSE_LOGGING 21184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage(L("ESR_INVALID_STATE: got empty n-best list even though the recognition was successful")); 21194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 21204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; /* we do not want to halt the app in this case */ 21214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 21224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 21234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 21244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_RECOGNITION_RESULT; 21254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_COMPLETE; 21264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 21274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 21284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 21294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("SR_RecognizerCreateResultImpl() -> SR_RECOGNIZER_INTERNAL_END"))); 21304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 21314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 21324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 21334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 21344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 21354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 21364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 21374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * All grammars associated with the recognizer are considered to be active 21384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * and therefore, I do a semantic parse on each. On the first grammar that 21394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * gives one or more semantic results, I stop parsing the other grammars. 21404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 21414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->grammars->getSize(impl->grammars, &grammarSize)); 21424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT( grammarSize == 1); 21434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 21444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (iBest = 0; iBest < nbestSize; ++iBest) 21454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 21464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = WORDID_COUNT; 21474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (CA_NBestListGetResultWordIDs(resultImpl->nbestList, iBest, wordIDs, &len, &raws) != ESR_SUCCESS) 21484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 21494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_NO_MATCH; 21504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_COMPLETE; 21514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 21524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 21534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 21544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("SR_RecognizerCreateResultImpl() -> SR_RECOGNIZER_INTERNAL_END"))); 21554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 21564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 21574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 21584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 21594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_STATE: got bad n-best list entry %d"), iBest); 21604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 21614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 21624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 21634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListCreate(&semanticList)); 21644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, resultImpl->results->add(resultImpl->results, semanticList)); 21654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 21664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project grammarIndex_for_iBest = 0; 21674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->grammars->getKeyAtIndex(impl->grammars, grammarIndex_for_iBest, &pkey)); 21684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->grammars->get(impl->grammars, pkey, (void **)&pgrammar)); 21694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 21704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_GrammarGetSize_tParameter((SR_Grammar*) pgrammar, L("locale"), &locale)); 21714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project resultImpl->locale = locale; 21724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 21734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* I need to manage my semantic results external to the check parse function */ 21744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (k = 0; k < MAX_SEM_RESULTS; ++k) 21754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_SemanticResultCreate(&semanticResults[k]); 21764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 21774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 21784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project The code here tries to make the voice-enrollment more effective. 21794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project The VE grammar decodes a sequence of best phonemes, but the nbest 21804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project processing may find a better score for an alternative choice than 21814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project the score of the viterbi best choice. The reason for this is that 21824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project alternative choices don't honor cross-word context-dependency quite 21834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project accurately. If we choose an alternative choice then the sequence of 21844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project phoneme decoded does not correspond to the sequence of models decoded. 21854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project To counter this, we FORCIBLY make sure the top choice here is the 21864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project VITERBI top choice. 21874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 21884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 21894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (iBest == 0) 21904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 21914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (CA_IsEnrollmentSyntax( pgrammar->syntax)) { 21924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* this was voice enrollment, so let's try to replace */ 21934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // char* word1 = CA_NBestListGetResultWord(resultImpl->nbestList,wordIDs[0]); 21944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // char* word2 = CA_NBestListGetResultWord(resultImpl->nbestList,wordIDs[1]); 21954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // if (!strncmp(word1,voice_enroll_word_prefix,VEWPLEN)&&!strncmp(word2,voice_enroll_word_prefix,VEWPLEN)) 21964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = WORDID_COUNT; 21974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = CA_FullResultWordIDs(impl->recognizer, wordIDs, &len); 21984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 21994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 22004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* in case of problem with viterbi path choice, we revert back */ 22014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = WORDID_COUNT; 22024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = CA_NBestListGetResultWordIDs(resultImpl->nbestList, iBest, wordIDs, &len, &raws) ; 22034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 22044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 22054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 22064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 22074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(label, L("")); 22084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (k = 0; wordIDs[k] != MAXwordID; ++k) 22094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 22104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* wordk = NULL; 22114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project wordk = CA_NBestListGetResultWord(resultImpl->nbestList,wordIDs[k]); 22124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCAT(label, wordk); 22134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCAT(label, L(" ")); 22144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 22154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, CA_ResultStripSlotMarkers(label)); 22164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(LSTRCMP(label, L("")) != 0); 22174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 22184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* strip the trailing blank */ 22194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project k = LSTRLEN(label) - 1; 22204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (k > 0 && label[k] == L(' ')) 22214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project label[k] = 0; 22224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 22234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project semanticResultsSize = MAX_SEM_RESULTS; 22244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 22254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#if SEMPROC_ACTIVE 22264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 22274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* set the literal prior to processing so that semproc can read the value 22284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project during processing */ 22294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, pgrammar->semproc->flush(pgrammar->semproc)); 22304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, pgrammar->semproc->setParam(pgrammar->semproc, L("literal"), label)); 22314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 22324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = pgrammar->semproc->checkParseByWordID(pgrammar->semproc, pgrammar->semgraph, 22334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project wordIDs, semanticResults, &semanticResultsSize); 22344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 22354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* rc = pgrammar->semproc->checkParse(pgrammar->semproc, pgrammar->semgraph, 22364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project label, semanticResults, &semanticResultsSize); */ 22374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 22384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 22394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 22404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (k = 0; k < MAX_SEM_RESULTS; ++k) 22414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 22424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project semanticResults[k]->destroy(semanticResults[k]); 22434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project semanticResults[k] = NULL; 22444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 22454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 22464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 22474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#else 22484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project semanticResultsSize = 0; 22494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 22504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* cleanup the empty ones */ 22514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (k = semanticResultsSize; k < MAX_SEM_RESULTS; ++k) 22524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 22534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticResults[k]->destroy(semanticResults[k])); 22544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project semanticResults[k] = NULL; 22554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 22564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 22574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* save the good ones */ 22584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (k = 0; k < semanticResultsSize; ++k) 22594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 22604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 22614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Save the pointer to the semantic result that was created. 22624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Remember that the semantic result array only holds pointers 22634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * and for each time that the function is called, new semantic results 22644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * are created, and the pointers overwrite old values in the array 22654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 22664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticList->add(semanticList, semanticResults[k])); 22674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 22684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 22694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#if SEMPROC_ACTIVE 22704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (semanticResultsSize > 0) 22714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 22724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI log the grammar(s) that was used in recognizing */ 2273b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland psprintf(tok, L("GURI%zd"), grammarIndex_for_iBest); 22744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("GRMR"), tok)); 22754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 22764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#else 22774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI log the grammar(s) that was used in recognizing */ 22784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project psprintf(tok, L("GURI%d"), grammarIndex_for_iBest); 22794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("GRMR"), tok)); 22804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 22814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 22824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Populate semantic results for each nbest list entry */ 22834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticList->getSize(semanticList, &semanticResultsSize)); 22844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (semanticResultsSize == 0) 22854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 22864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 22874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * If there was no semantic result... then I need to create one so that I can store 22884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * literal, conf, meaning which are default keys that must ALWAYS exist 22894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 22904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_SemanticResultCreate(&semanticResult)); 22914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticList->add(semanticList, semanticResult)); 22924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project semanticResultsSize = 1; 22934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 22944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 22954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (k = 0; k < semanticResultsSize;++k) 22964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 22974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticList->get(semanticList, k, (void **)&semanticResult)); 22984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (semanticResult == NULL) 22994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 23004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("nbest entry contained NULL semanticResult"), ESR_INVALID_STATE); 23014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 23024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 23034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 23044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project semanticImpl = (SR_SemanticResultImpl*) semanticResult; 23054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 23064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* put in the literal */ 23074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project lValue = MALLOC(sizeof(LCHAR) * (LSTRLEN(label) + 1), MTAG); 23084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (lValue == NULL) 23094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 23104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_OUT_OF_MEMORY")); 23114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_OUT_OF_MEMORY; 23124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 23134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(lValue, label); 23144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticImpl->results->put(semanticImpl->results, L("literal"), lValue)); 23154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 23164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* if the meaning is not set, then put in the meaning which will be the literal */ 23174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticImpl->results->containsKey(semanticImpl->results, L("meaning"), &containsKey)); 23184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!containsKey) 23194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 23204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project lValue = MALLOC(sizeof(LCHAR) * (LSTRLEN(label) + 1), MTAG); 23214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (lValue == NULL) 23224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 23234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_OUT_OF_MEMORY")); 23244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_OUT_OF_MEMORY; 23254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 23264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(lValue, label); 23274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticImpl->results->put(semanticImpl->results, L("meaning"), lValue)); 23284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 23294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 23304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* put in the raw score */ 23314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project psprintf(label, L("%d"), raws); 23324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project lValue = MALLOC(sizeof(LCHAR) * (LSTRLEN(label) + 1), MTAG); 23334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (lValue == NULL) 23344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 23354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_OUT_OF_MEMORY")); 23364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_OUT_OF_MEMORY; 23374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 23384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(lValue, label); 23394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticImpl->results->put(semanticImpl->results, L("raws"), lValue)); 23404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 23414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 23424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 23434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Now I have an nBest list where each entry has at least one semantic result */ 23444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* What I need to do is filter out the nBest list entries which have matching 23454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project semantic results for 'meaning' */ 23464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Once I have filtered out the nBest list based on this criteria, I can calculate the confidence 23474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project score and populate the result of the first entry with the raw score */ 23484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 23494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#if FILTER_NBEST_BY_SEM_RESULT 23504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 23514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (iBest = nbestSize-1; iBest>0; iBest--) /* do not filter out nBest entry 0 */ 23524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 23534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 23544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * This is the entry (indexed by i) targeted for removal 23554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 23564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 23574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 23584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get the nBest entry which you wish to remove (if duplicate found) */ 23594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGet(resultImpl->results, iBest, (void **)&semanticList)); 23604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 23614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get the first sem_result for the entry */ 23624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGet(semanticList, 0, (void **)&semanticResult)); 23634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project semanticImpl = (SR_SemanticResultImpl*) semanticResult; 23644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 23654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get the meaning */ 23664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticImpl->results->get(semanticImpl->results, L("meaning"), (void **)&lValue)); 23674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 23684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get the other entries to check against (start with 0, end on the current i entry) */ 23694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (jBest = 0; jBest < iBest; ++jBest) 23704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 23714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 23724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * This is the entry (indexed by jBest) that we will compare with 23734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 23744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 23754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get the nBest entry which you wish to compare with */ 23764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGet(resultImpl->results, jBest, (void **)&semanticList2)); 23774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 23784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGet(semanticList2, 0, (void **)&semanticResult2)); 23794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project semanticImpl2 = (SR_SemanticResultImpl*) semanticResult2; 23804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 23814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticImpl2->results->get(semanticImpl2->results, L("meaning"), (void **)&lValue2)); 23824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (LSTRCMP(lValue, lValue2) == 0) 23834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 23844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* pfprintf(PSTDOUT,"duplicate sem result found %d == %d\n", iBest, jBest); 23854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pfprintf(PSTDOUT,"removing %d\n", iBest); */ 23864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 23874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* removing from the list indexed by iBest */ 23884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticList->remove(semanticList, semanticResult)); 23894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticResult->destroy(semanticResult)); 23904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 23914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, resultImpl->results->remove(resultImpl->results, semanticList)); 23924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticList->destroy(semanticList)); 23934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 23944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!CA_NBestListRemoveResult(resultImpl->nbestList, iBest)) 23954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_ARGUMENT_OUT_OF_BOUNDS; 23964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 23974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 23984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 23994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 24004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project nbestSize = CA_NBestListCount(resultImpl->nbestList); 24014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 24024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 24034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGetSize(resultImpl->results, &nbestSize)); 24044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 24054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (nbestSize) 24064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 24074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(CA_ComputeConfidenceValues(impl->confidenceScorer, impl->recognizer, resultImpl->nbestList)) 24084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 24094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 24104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for(current_choice=nbestSize-1;current_choice>=0;current_choice--) 24114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 24124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get the nBest entry you want to deal with */ 24134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGet(resultImpl->results, current_choice, (void **)&semanticList)); 24144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get the first sem_result for that entry */ 24154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGet(semanticList, 0, (void **)&semanticResult)); 24164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project semanticImpl = (SR_SemanticResultImpl*) semanticResult; 24174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 24184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* put in the conf value for that nBest entry */ 24194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(!CA_NBestListGetResultConfidenceValue( resultImpl->nbestList, current_choice, &confValue)) 24204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_ARGUMENT_OUT_OF_BOUNDS; 24214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 24224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project psprintf(label, L("%d"), confValue); 24234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project lValue = MALLOC(sizeof(LCHAR) * (LSTRLEN(label) + 1), MTAG); 24244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (lValue == NULL) 24254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 24264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_OUT_OF_MEMORY")); 24274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_OUT_OF_MEMORY; 24284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 24294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(lValue, label); 24304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticImpl->results->put(semanticImpl->results, L("conf"),lValue)); 24314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 24324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->osi_log_level, L("CMPT"), 0)); 24334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 24344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 24354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI log the end of recognition and all bufferred tokens */ 24364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 24374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI log end of recognition time */ 24384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PTimeStampSet(&EORT); 24394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recogLogTimings.EORT = PTimeStampDiff(&EORT, &impl->timestamp); 24404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recogLogTimings.DURS = impl->processed * MSEC_PER_FRAME; 24414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 24424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /*****************************************/ 24434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI Logging stuff */ 24444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /*****************************************/ 24454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectif( impl->osi_log_level != 0) 24464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 24474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get the nBest size (this size may have changed since previous set cuz of nbest list filtering) */ 24484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGetSize(resultImpl->results, &nbestSize)); 24494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI log the nBest list size */ 24504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->osi_log_level, L("NBST"), nbestSize)); 24514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 24524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 24534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (iBest = 0; iBest < nbestSize; iBest++) /* loop */ 24544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 24554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get the nBest entry */ 24564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGet(resultImpl->results, iBest, (void**)&semanticList)); 24574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 24584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get the first sem_result for the entry (ther emay be many, but ignore others) */ 24594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGet(semanticList, 0, (void **)&semanticResult)); 24604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project semanticImpl = (SR_SemanticResultImpl*) semanticResult; 24614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 24624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get the meaning and OSI log it */ 24634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticImpl->results->get(semanticImpl->results, L("meaning"), (void **)&lValue)); 24644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI log RSLT (meaning) for nbest item */ 24654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("RSLT"), lValue)); 24664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 24674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get the literal and OSI log it */ 24684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticImpl->results->get(semanticImpl->results, L("literal"), (void **)&lValue)); 24694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI log RAWT SPOK (literal) for nbest item */ 24704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("RAWT"), lValue)); 24714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("SPOK"), lValue)); 24724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 24734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get the score and OSI log it */ 24744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticImpl->results->get(semanticImpl->results, L("raws"), (void **)&lValue)); 24754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI log RAWS (score) for nbest item */ 24764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("RAWS"), lValue)); 24774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get the confidence value and OSI log it */ 24784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, semanticImpl->results->get(semanticImpl->results, L("conf"), (void **)&lValue)); 24794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI log CONF (values) for nbest item */ 24804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("CONF"), lValue)); 24814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 24824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 24834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* log the values */ 24844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->osi_log_level, L("BORT"), impl->recogLogTimings.BORT)); 24854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->osi_log_level, L("DURS"), impl->recogLogTimings.DURS)); 24864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->osi_log_level, L("EORT"), impl->recogLogTimings.EORT)); 24874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->osi_log_level, L("EOSD"), impl->recogLogTimings.EOSD)); 24884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->osi_log_level, L("EOSS"), impl->recogLogTimings.EOSS)); 24894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->osi_log_level, L("EOST"), impl->recogLogTimings.EOST)); 24904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->osi_log_level & OSI_LOG_LEVEL_AUDIO) 24914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 24924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = P_PATH_MAX; 24934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogAudioGetFilename(impl->eventLog, waveformFilename, &len)); 24944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("WVNM"), waveformFilename)); 24954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 24964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("RSTT"), L("ok"))); 24974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("RENR"), L("ok"))); 24984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("ENDR"), impl->eos_reason)); 24994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SWIrcnd"))); 25004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 25014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->osi_log_level, L("BOSS"), impl->recogLogTimings.BOSS)); /* extra not in OSI spec */ 25024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("ESRboss"))); 25034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 25044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 25054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Record which recognizer was the successful one (male or female) 25064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * this index refers to the order in the swimdllist file. 25074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 25084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, CA_GetRecogID(impl->recognizer, &recogID)); 25094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->osi_log_level, L("RECOG"), recogID)); 25104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("ESRrcid"))); 25114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 25124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Record semantic results returned by top nbestlist entry */ 25134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (1) 25144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 25154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_SEMANTIC_KEYS 50 25164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* semanticKeys[MAX_SEMANTIC_KEYS]; 25174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define SEMANTIC_VALUE_SIZE 512 25184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR semanticValue[SEMANTIC_VALUE_SIZE]; 25194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t num_semanticKeys; 25204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 25214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = resultImpl->results->getSize(resultImpl->results, &nbestSize); 25224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 25234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 25244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 25254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto DONE; 25264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 25274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (iBest = 0; iBest < nbestSize; ++iBest) /* loop2 */ 25284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 25294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = resultImpl->results->get(resultImpl->results, iBest, (void **)&semanticList); 25304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 25314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 25324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 25334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto DONE; 25344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 25354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 25364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* semanticResultsSize is the number of semantic meanings, although 25374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ambiguous parses are not entirely supported 25384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project num_semanticKeys is associated to a particular parse */ 25394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 25404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = semanticList->getSize(semanticList, &semanticResultsSize); 25414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 25424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 25434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 25444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto DONE; 25454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 25464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (k = 0; k < semanticResultsSize; ++k) 25474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 25484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t iKey; 25494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = semanticList->get(semanticList, k, (void **)&semanticResult); 25504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 25514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 25524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 25534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto DONE; 25544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 25554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project num_semanticKeys = MAX_SEMANTIC_KEYS; 25564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = semanticResult->getKeyList(semanticResult, (LCHAR**) & semanticKeys, &num_semanticKeys); 25574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 25584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 25594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 25604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto DONE; 25614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 25624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 25634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (iKey=0; iKey<num_semanticKeys; ++iKey) 25644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 25654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = SEMANTIC_VALUE_SIZE; 25664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = semanticResult->getValue(semanticResult, semanticKeys[iKey], (LCHAR*) &semanticValue, &len); 25674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 25684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 25694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 25704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto DONE; 25714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 25724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 25734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, semanticKeys[iKey], semanticValue); 25744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 25754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 25764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 25774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto DONE; 25784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 25794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 25804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 25814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 25824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("ESR_SemanticResult[0]")); 25834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 25844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 25854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 25864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto DONE; 25874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 25884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 25894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 25904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectDONE: 25914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 25924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 25934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 25944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 25954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 25964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 25974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 25984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Indicates if it is possible to push data from SREC into the internal recognizer. 25994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * If data can be pushed, ESR_CONTINUE_PROCESSING is returned. 26004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 26014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * INPUT STATES: SR_RECOGNIZER_INTERNAL_BOS_DETECTION, SR_RECOGNIZER_INTERNAL_EOS_DETECTION 26024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * OUTPUT STATES: same or SR_RECOGNIZER_INTERNAL_EOI 26034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2604b3ebba80015c624b4fe5c24b6b2067ee4ca3dd22Edwin Vanestatic PINLINE ESR_ReturnCode canPushAudioIntoRecognizer(SR_RecognizerImpl* impl) 26054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 26064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 26074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 26084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 26094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_LOCK, impl->lockData); 26104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 26114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* do I have enough to make a frame ? */ 26124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (CircularBufferGetSize(impl->buffer) < impl->FRAME_SIZE) 26134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 26144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Not enough data */ 26154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!impl->gotLastFrame) 26164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 26174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* not last frame, so ask for more audio */ 26184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 26194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 26204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 26214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 26224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 26234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 26244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* last frame, make do with what you have */ 26254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 26264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 26274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef SREC_ENGINE_VERBOSE_LOGGING 26284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage("L: Voicing END (EOI) at %d frames (%d processed)", impl->frames, impl->processed); 26294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 26304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isRecognizing = ESR_FALSE; 26314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recogLogTimings.EOSD = impl->frames; 26324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->eos_reason = L("EOI"); 26334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_EOI; 26344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 26354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 26364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("canPushAudioIntoRecognizer() -> SR_RECOGNIZER_INTERNAL_EOI"))); 26374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 26384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 26394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 26404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 26414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_CONTINUE_PROCESSING; 26424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 26434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 26444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 26454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 26464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_CONTINUE_PROCESSING; 26474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 26484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 26494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 26504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 26514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 26524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Pushes data from SREC into the internal recognizer. 26534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 26544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * INPUT STATES: SR_RECOGNIZER_INTERNAL_BOS_DETECTION, SR_RECOGNIZER_INTERNAL_EOS_DETECTION 26554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * OUTPUT STATES: same 26564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2657b3ebba80015c624b4fe5c24b6b2067ee4ca3dd22Edwin Vanestatic PINLINE ESR_ReturnCode pushAudioIntoRecognizer(SR_RecognizerImpl* impl, SR_RecognizerStatus* status, 26584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResultType* type, 26594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResult* result) 26604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 26614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t count; 26624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 26634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 26644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (CA_GetUnprocessedFramesInUtterance(impl->utterance) > 0 && impl->frames >= impl->bgsniff) 26654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 26664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Don't push frames unless they're needed */ 26674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 26684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Check for leaked state */ 26694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(*status == SR_RECOGNIZER_EVENT_INVALID && *type == SR_RECOGNIZER_RESULT_TYPE_INVALID); 26704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_CONTINUE_PROCESSING; 26714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 26724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 26734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_LOCK, impl->lockData); 26744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project count = CircularBufferRead(impl->buffer, impl->audioBuffer, impl->FRAME_SIZE); 26754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 26764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 26774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 26784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project WaveformBuffer_Write(impl->waveformBuffer, impl->audioBuffer, count); 26794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->osi_log_level & OSI_LOG_LEVEL_AUDIO) 26804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 26814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = SR_EventLogAudioWrite(impl->eventLog, impl->audioBuffer, count); 26824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc == ESR_BUFFER_OVERFLOW) 26834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 26844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 26854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 26864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 26874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 26884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 26894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 26904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 26914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 26924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (count < impl->FRAME_SIZE) 26934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 26944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 26954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("%s: error reading buffer data (count=%d, frameSize=%d)"), ESR_rc2str(rc), count, impl->FRAME_SIZE); 26964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 26974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 26984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!CA_LoadSamples(impl->wavein, impl->audioBuffer, impl->sampleRate / FRAMERATE)) 26994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 27004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_STATE")); 27014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 27024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 27034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 27044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 27054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_ConditionSamples(impl->wavein); 27064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Check for leaked state */ 27074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(*status == SR_RECOGNIZER_EVENT_INVALID && *type == SR_RECOGNIZER_RESULT_TYPE_INVALID); 27084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_CONTINUE_PROCESSING; 27094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 27104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 27114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 27124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 27134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 27144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * INPUT STATES: SR_RECOGNIZER_INTERNAL_BOS_DETECTION, SR_RECOGNIZER_INTERNAL_EOS_DETECTION 27154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * OUTPUT STATES: same 27164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2717b3ebba80015c624b4fe5c24b6b2067ee4ca3dd22Edwin Vanestatic PINLINE ESR_ReturnCode generateFrameFromAudio(SR_RecognizerImpl* impl, SR_RecognizerStatus* status, 27184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResultType* type, 27194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResult* result) 27204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 27214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (CA_GetUnprocessedFramesInUtterance(impl->utterance) > 0 && impl->frames >= impl->bgsniff) 27224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 27234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Don't create frames unless they're needed */ 27244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 27254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Check for leaked state */ 27264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(*status == SR_RECOGNIZER_EVENT_INVALID && *type == SR_RECOGNIZER_RESULT_TYPE_INVALID); 27274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_CONTINUE_PROCESSING; 27284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 27294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 27304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Try processing one frame */ 27314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!CA_MakeFrame(impl->frontend, impl->utterance, impl->wavein)) 27324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 27334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 27344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * One of three cases occured: 27354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 27364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * - We don't have enough samples to process one frame. This should be impossible because 27374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * pushAudioIntoRecognizer() is always called before us and will not continue if we don't 27384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * have enough samples. 27394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 27404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * - The internal recognizer needs a minimum amount of audio before it'll begin generating 27414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * frames. This is normal and we return with a success value. 27424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 27434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * - The recognizer skips every even frame number (for performance reasons). This is normal 27444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * and we return with a success value. 27454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 27464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_INCOMPLETE; 27474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_NONE; 27484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 27494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 27504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ++impl->frames; 27514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Check for leaked state */ 27524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(*status == SR_RECOGNIZER_EVENT_INVALID && *type == SR_RECOGNIZER_RESULT_TYPE_INVALID); 27534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_CONTINUE_PROCESSING; 27544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 27554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 27564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 27574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * INPUT STATES: SR_RECOGNIZER_INTERNAL_EOS_DETECTION 27584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * OUTPUT STATES: same 27594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2760b3ebba80015c624b4fe5c24b6b2067ee4ca3dd22Edwin Vanestatic PINLINE ESR_ReturnCode generateFrameStats(SR_RecognizerImpl* impl, SR_RecognizerStatus* status, 27614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResultType* type, 27624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResult* result) 27634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 27644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->frames < impl->bgsniff) 27654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 27664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Wait until we have enough frames to estimate background stats */ 27674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_INCOMPLETE; 27684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_NONE; 27694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 27704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 27714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (impl->frames == impl->bgsniff) 27724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_CalculateUtteranceStatistics(impl->utterance, 0, impl->bgsniff); 27734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 27744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Check for leaked state */ 27754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(*status == SR_RECOGNIZER_EVENT_INVALID && *type == SR_RECOGNIZER_RESULT_TYPE_INVALID); 27764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_CONTINUE_PROCESSING; 27774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 27784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 27794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 27804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * INPUT STATES: SR_RECOGNIZER_INTERNAL_EOS_DETECTION 27814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * OUTPUT STATES: same or SR_RECOGNIZER_INTERNAL_EOI, SR_RECOGNIZER_INTERNAL_EOS 27824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2783b3ebba80015c624b4fe5c24b6b2067ee4ca3dd22Edwin Vanestatic PINLINE ESR_ReturnCode generatePatternFromFrame(SR_RecognizerImpl* impl, SR_RecognizerStatus* status, 27844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResultType* type, 27854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResult* result) 27864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 27874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModelsImpl* modelsImpl; 27884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 27894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 27904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Run the search */ 27914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project modelsImpl = (SR_AcousticModelsImpl*) impl->models; 27924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!CA_MakePatternFrame(modelsImpl->pattern, impl->utterance)) 27934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 27944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_NO_MATCH; 27954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_COMPLETE; 27964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 27974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 27984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 27994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("generatePatternFromFrame() -> SR_RECOGNIZER_INTERNAL_END"))); 28004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 28014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 28024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 28034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 28044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_STATE")); 28054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 28064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 28074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!CA_AdvanceUtteranceFrame(impl->utterance)) 28084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 28094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_NO_MATCH; 28104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_COMPLETE; 28114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 28124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 28134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 28144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("canPushAudioIntoRecognizer() -> SR_RECOGNIZER_INTERNAL_END"))); 28154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 28164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 28174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 28184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 28194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_STATE")); 28204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 28214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 28224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_AdvanceRecognitionByFrame(impl->recognizer, modelsImpl->pattern, impl->utterance); 28234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ++impl->processed; 28244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 28254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 28264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_LOCK, impl->lockData); 28274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->gotLastFrame && CircularBufferGetSize(impl->buffer) < impl->FRAME_SIZE) 28284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 28294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 28304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * SREC have run out of data but the underlying recognizer might have some frames 28314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * queued for processing. 28324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 28334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (CA_GetUnprocessedFramesInUtterance(impl->utterance) > 0) 28344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 28354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* EOI means end of input */ 28364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef SREC_ENGINE_VERBOSE_LOGGING 28374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage("L: Voicing END (EOI) at %d frames (%d processed)", impl->frames, impl->processed); 28384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 28394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isRecognizing = ESR_FALSE; 28404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recogLogTimings.EOSD = impl->frames; 28414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->eos_reason = L("EOI"); 28424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_EOI; 28434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 28444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 28454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("generatePatternFromFrame() -> SR_RECOGNIZER_INTERNAL_EOI"))); 28464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 28474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 28484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 28494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 28504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 28514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 28524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 28534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef SREC_ENGINE_VERBOSE_LOGGING 28544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage("L: Voicing END (EOF) at %d frames (%d processed)", impl->frames, impl->processed); 28554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 28564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 28574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isRecognizing = ESR_FALSE; 28584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recogLogTimings.EOSD = impl->frames; 28594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->eos_reason = L("EOF"); 28604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_EOS; 28614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 28624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 28634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("generatePatternFromFrame() -> SR_RECOGNIZER_INTERNAL_EOS"))); 28644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 28654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 28664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 28674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 28684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_END_OF_VOICING; 28694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_NONE; 28704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(impl->processed == impl->frames); 28714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 28724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 28734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 28744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 28754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 28764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 28774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 28784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 28794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Check for leaked state */ 28804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(*status == SR_RECOGNIZER_EVENT_INVALID && *type == SR_RECOGNIZER_RESULT_TYPE_INVALID); 28814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_CONTINUE_PROCESSING; 28824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 28834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 28844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 28854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 28864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 28874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Same as generatePatternFromFrame() only the buffer is known to be empty. 28884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 28894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * INPUT STATES: SR_RECOGNIZER_INTERNAL_EOI 28904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * OUTPUT STATES: same or SR_RECOGNIZER_INTERNAL_EOS 28914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2892b3ebba80015c624b4fe5c24b6b2067ee4ca3dd22Edwin Vanestatic PINLINE ESR_ReturnCode generatePatternFromFrameEOI(SR_RecognizerImpl* impl, SR_RecognizerStatus* status, 28934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResultType* type, 28944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResult* result) 28954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 28964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModelsImpl* modelsImpl; 28974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 28984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 28994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Run the search */ 29004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project modelsImpl = (SR_AcousticModelsImpl*) impl->models; 29014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 29024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (CA_GetUnprocessedFramesInUtterance(impl->utterance) <= 0) 29034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 29044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(impl->processed == impl->frames); 29054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_END_OF_VOICING; 29064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_NONE; 29074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_EOS; 29084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 29094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 29104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 29114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!CA_MakePatternFrame(modelsImpl->pattern, impl->utterance)) 29124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 29134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_NO_MATCH; 29144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_COMPLETE; 29154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 29164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 29174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 29184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("generatePatternFromFrameEOI() -> SR_RECOGNIZER_INTERNAL_END"))); 29194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 29204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 29214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 29224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 29234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_STATE")); 29244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 29254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 29264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!CA_AdvanceUtteranceFrame(impl->utterance)) 29274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 29284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_NO_MATCH; 29294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_COMPLETE; 29304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 29314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 29324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 29334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("generatePatternFromFrameEOI() -> SR_RECOGNIZER_INTERNAL_END"))); 29344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 29354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 29364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 29374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 29384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_STATE")); 29394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 29404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 29414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_AdvanceRecognitionByFrame(impl->recognizer, modelsImpl->pattern, impl->utterance); 29424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ++impl->processed; 29434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 29444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 29454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_LOCK, impl->lockData); 29464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 29474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (CA_GetUnprocessedFramesInUtterance(impl->utterance) <= 0) 29484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 29494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(impl->processed == impl->frames); 29504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_END_OF_VOICING; 29514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_NONE; 29524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_EOS; 29534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 29544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 29554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("generatePatternFromFrameEOI() -> SR_RECOGNIZER_INTERNAL_EOS"))); 29564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 29574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 29584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 29594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 29604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 29614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 29624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 29634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 29644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 29654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 29664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 29674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Check for leaked state */ 29684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(*status == SR_RECOGNIZER_EVENT_INVALID && *type == SR_RECOGNIZER_RESULT_TYPE_INVALID); 29694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_CONTINUE_PROCESSING; 29704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 29714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 29724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 29734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 29744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 29754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 29764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 29774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 29784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * INPUT STATES: SR_RECOGNIZER_INTERNAL_EOI, SR_RECOGNIZER_INTERNAL_EOS_DETECTION 29794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * OUTPUT STATES: same or SR_RECOGNIZER_INTERNAL_EOS 29804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 29814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode detectEndOfSpeech(SR_RecognizerImpl* impl, SR_RecognizerStatus* status, 29824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResultType* type, 29834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResult* result) 29844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 29854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project EOSrc eos; /* eos means end of speech */ 29864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int eos_by_level; /* eos means end of speech */ 29874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PTimeStamp timestamp; 29884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 29894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL enableGetWaveform = ESR_FALSE; 29904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 29914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project eos_by_level = CA_UtteranceHasEnded(impl->utterance); 29924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (eos_by_level) 29934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 29944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project eos = SPEECH_ENDED_BY_LEVEL_TIMEOUT; 29954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 29964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 29974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 29984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project eos = CA_IsEndOfUtteranceByResults(impl->recognizer); 29994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 30004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 30014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_SessionGetBool(L("enableGetWaveform"), &enableGetWaveform); 30024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project //impl->parameters->getBool(impl->parameters, L("enableGetWaveform"), &enableGetWaveform); 30034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 30044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (eos == VALID_SPEECH_CONTINUING && enableGetWaveform && impl->waveformBuffer->overflow_count > 0) 30054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 30064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t bufferSize; 30074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_GetSize(impl->waveformBuffer, &bufferSize)); 30084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage("Forcing EOS due to wfbuf overflow (fr=%d,sz=%d,of=%d)", impl->frames, bufferSize, impl->waveformBuffer->overflow_count); 30094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project eos = SPEECH_TOO_LONG; 30104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 30114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 30124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (eos != VALID_SPEECH_CONTINUING) 30134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 30144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project switch (eos) 30154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 30164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SPEECH_ENDED: 30174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* normal */ 30184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->eos_reason = L("itimeout"); 30194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 30204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 30214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SPEECH_ENDED_WITH_ERROR: 30224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* error */ 30234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->eos_reason = L("err"); 30244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 30254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 30264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SPEECH_TOO_LONG: 30274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* timeout*/ 30284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->eos_reason = L("ctimeout"); 30294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 30304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 30314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SPEECH_MAYBE_ENDED: 30324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* normal */ 30334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->eos_reason = L("itimeout"); 30344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 30354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SPEECH_ENDED_BY_LEVEL_TIMEOUT: 30364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* normal */ 30374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->eos_reason = L("levelTimeout"); 30384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 30394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 30404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project default: 30414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* error */ 30424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->eos_reason = L("err"); 30434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 30444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 30454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef SREC_ENGINE_VERBOSE_LOGGING 30464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage("L: Voicing END (EOS) at %d frames, %d processed (reason: %s)\n", impl->frames, impl->processed, impl->eos_reason); 30474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 30484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 30494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recogLogTimings.EOSD = impl->frames; /* how many frames have been sent prior to detect EOS */ 30504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PTimeStampSet(×tamp); /* time it took to detect EOS (in millisec) */ 30514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->recogLogTimings.EOST = PTimeStampDiff(×tamp, &impl->timestamp); 30524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 30534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_END_OF_VOICING; 30544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_NONE; 30554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_EOS; 30564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->eventLog != NULL) 30574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 30584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("internalState"), L("detectEndOfSpeech() -> SR_RECOGNIZER_INTERNAL_EOS"))); 30594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("reason"), impl->eos_reason)); 30604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("frames"), impl->frames)); 30614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenSize_t_BASIC(impl->eventLog, impl->osi_log_level, L("processed"), impl->processed)); 30624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SR_Recognizer"))); 30634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 30644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isRecognizing = ESR_FALSE; 30654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 30664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 30674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 30684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Check for leaked state */ 30694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(*status == SR_RECOGNIZER_EVENT_INVALID && *type == SR_RECOGNIZER_RESULT_TYPE_INVALID); 30704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_CONTINUE_PROCESSING; 30714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 30724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 30734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 30744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 30754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 30764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * INPUT STATES: SR_RECOGNIZER_INTERNAL_BOS_DETECTION 30774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * OUTPUT STATES: same or SR_RECOGNIZER_INTERNAL_EOS_DETECTION, SR_RECOGNIZER_INTERNAL_EOI 30784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 30794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode detectBeginningOfSpeech(SR_RecognizerImpl* impl, 30804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerStatus* status, 30814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResultType* type, 30824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResult* result) 30834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 30844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 30854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL gatedMode; 30864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t num_windback_bytes, num_windback_frames; 30874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project waveform_buffering_state_t buffering_state; 30884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 30894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetBool(L("cmdline.gatedmode"), &gatedMode)); 30904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 30914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (gatedMode || (!gatedMode && impl->frames < impl->bgsniff)) 30924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 30934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL pushable = ESR_FALSE; 30944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 30954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = canPushAudioIntoRecognizer(impl); 30964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc == ESR_SUCCESS) 30974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 30984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Not enough samples to process one frame */ 30994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (CA_GetUnprocessedFramesInUtterance(impl->utterance) <= 0) 31004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 31014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_NEED_MORE_AUDIO; 31024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_NONE; 31034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 31044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 31054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 31064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (rc != ESR_CONTINUE_PROCESSING) 31074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 31084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (impl->internalState == SR_RECOGNIZER_INTERNAL_EOI) 31094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 31104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Got end of input before beginning of speech */ 31114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_NO_MATCH; 31124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_COMPLETE; 31134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_BOS_NO_MATCH; 31144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->Interface.stop(&impl->Interface)); 31154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 31164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 31174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 31184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pushable = ESR_TRUE; 31194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (pushable) 31204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 31214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = pushAudioIntoRecognizer(impl, status, type, result); 31224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OUTPUT STATES: same or SR_RECOGNIZER_INTERNAL_EOI */ 31234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_CONTINUE_PROCESSING) 31244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 31254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Not enough samples to process one frame */ 31264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 31274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 31284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = generateFrameFromAudio(impl, status, type, result); 31294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OUTPUT STATES: same */ 31304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_CONTINUE_PROCESSING) 31314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 31324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 31334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * The internal recognizer needs a minimum amount of audio before 31344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * it begins generating frames. 31354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 31364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 31374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 31384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 31394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!CA_AdvanceUtteranceFrame(impl->utterance)) 31404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 31414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_STATE: Failed Advancing Utt Frame %d"), impl->frames); 31424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 31434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 31444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (CA_UtteranceHasVoicing(impl->utterance)) 31454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 31464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Utterance stats for Lombard if enough frames */ 31474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->frames > impl->bgsniff) 31484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 31494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef SREC_ENGINE_VERBOSE_LOGGING 31504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage("L: Voicing START at %d frames", impl->frames); 31514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 31524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI log the endpointed data */ 31534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 31544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->osi_log_level, L("BTIM"), impl->frames * MSEC_PER_FRAME)); 31554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->osi_log_level, L("BRGN"), 0)); /* Barge-in not supported */ 31564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SWIendp"))); 31574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 31584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->osi_log_level, L("BOSD"), impl->frames)); 31594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("ESRbosd"))); 31604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 31614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (gatedMode) 31624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_CalculateUtteranceStatistics(impl->utterance, (int)(impl->frames * -1), 0); 31634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 31644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_CalculateUtteranceStatistics(impl->utterance, 0, impl->frames); 31654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 31664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 31674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OK, we've got voicing or the end of input has occured 31684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ** (or both, I suppose). If we had voicing then progress 31694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ** the recognizer, otherwise skip to the end. 31704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ** Of course, we could be running outside 'Gated Mode' 31714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ** so we won't have any frames processed at all yet - 31724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ** in this case start the recognizer anyway. 31734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 31744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 31754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /************************************* 31764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ** Run recognition until endOfInput ** 31774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *************************************/ 31784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 31794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 31804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Initialize both recognizers first 31814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * and disable reporting of results 31824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 31834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (gatedMode) 31844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 31854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 31864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * We're in Gated Mode - 31874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Because we'll have had voicing we wind-back 31884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * until the start of voicing (unsure region) 31894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 31904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project num_windback_frames = CA_SeekStartOfUtterance(impl->utterance); 31914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->beginningOfSpeechOffset = impl->frames - num_windback_frames; 31924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project num_windback_bytes = num_windback_frames * impl->FRAME_SIZE * 2 /* due to skip even frames */; 31934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 31944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* pfprintf(PSTDOUT,L("audio buffer windback %d frames == %d bytes\n"), num_windback_frames, num_windback_bytes); */ 31954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_GetBufferingState(impl->waveformBuffer, &buffering_state)); 31964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (buffering_state != WAVEFORM_BUFFERING_OFF) 31974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_WindBack(impl->waveformBuffer, num_windback_bytes)); 31984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 31994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 32004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Only transition to linear if it was previously circular (in other words if 32014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * buffering was active in the first place) 32024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 32034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (buffering_state == WAVEFORM_BUFFERING_ON_CIRCULAR) 32044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_SetBufferingState(impl->waveformBuffer, WAVEFORM_BUFFERING_ON_LINEAR)); 32054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->frames = CA_GetUnprocessedFramesInUtterance(impl->utterance); 32064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 32074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 32084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->frames = 0; 32094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* reset the frames */ 32104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->processed = 0; 32114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, beginRecognizing(impl)); 32124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_EOS_DETECTION; 32134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_START_OF_VOICING; 32144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_NONE; 32154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 32164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 32174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 32184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 32194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->frames > impl->utterance_timeout) 32204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 32214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* beginning of speech timeout */ 32224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_BOS_TIMEOUT; 32234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_START_OF_UTTERANCE_TIMEOUT; 32244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_COMPLETE; 32254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->Interface.stop(&impl->Interface)); 32264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 32274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 32284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 32294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 32304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (!gatedMode && impl->frames >= impl->bgsniff) 32314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 32324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 32334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * If not gated mode and I have processed enough frames, then start the recognizer 32344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * right away. 32354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 32364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_EOS_DETECTION; 32374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_INCOMPLETE; 32384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_NONE; 32394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 32404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* reset the frames */ 32414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->frames = impl->processed = 0; 32424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, beginRecognizing(impl)); 32434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 32444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 32454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_INCOMPLETE; 32464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_NONE; 32474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 32484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 32494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 32504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 32514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 32524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 32534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerAdvanceImpl(SR_Recognizer* self, SR_RecognizerStatus* status, 32544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResultType* type, 32554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResult** result) 32564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 32574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 32584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL pushable; 32594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 32604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 32614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (status == NULL || type == NULL || result == NULL) 32624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 32634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_ARGUMENT")); 32644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 32654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 32664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 32674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* create the result holder and save the pointer */ 32684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* creation only happens once (due to the if condition) */ 32694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->result == NULL) 32704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_RecognizerResult_Create(&impl->result, impl)); 32714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *result = impl->result; 32724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 32734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 32744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * The following two lines are used to detect bugs whereby we forget to set 32754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * status or type before returning 32764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 32774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_INVALID; 32784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_INVALID; 32794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 32804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectMOVE_TO_NEXT_STATE: 32814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project switch (impl->internalState) 32824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 32834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SR_RECOGNIZER_INTERNAL_BEGIN: 32844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_BOS_DETECTION; 32854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_STARTED; 32864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_NONE; 32874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 32884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 32894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SR_RECOGNIZER_INTERNAL_BOS_DETECTION: 32904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = detectBeginningOfSpeech(impl, status, type, impl->result); 32914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_CONTINUE_PROCESSING) 32924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 32934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 32944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * SR_RECOGNIZER_INTERNAL_BOS_DETECTION, SR_RECOGNIZER_INTERNAL_EOS_DETECTION, or 32954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * SR_RECOGNIZER_INTERNAL_EOI 32964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 32974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 32984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 32994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Leaked state */ 33004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(0); 33014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 33024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 33034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SR_RECOGNIZER_INTERNAL_EOS_DETECTION: 33044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pushable = ESR_FALSE; 33054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = canPushAudioIntoRecognizer(impl); 33064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc == ESR_SUCCESS) 33074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 33084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Not enough samples to process one frame */ 33094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (CA_GetUnprocessedFramesInUtterance(impl->utterance) <= 0) 33104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 33114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_NEED_MORE_AUDIO; 33124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_NONE; 33134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 33144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 33154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 33164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (rc != ESR_CONTINUE_PROCESSING) 33174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 33184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (impl->internalState == SR_RECOGNIZER_INTERNAL_EOI) 33194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto MOVE_TO_NEXT_STATE; 33204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 33214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pushable = ESR_TRUE; 33224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (pushable) 33234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 33244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = pushAudioIntoRecognizer(impl, status, type, impl->result); 33254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_CONTINUE_PROCESSING) 33264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 33274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Not enough samples to process one frame */ 33284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 33294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 33304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->internalState == SR_RECOGNIZER_INTERNAL_EOI) 33314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto MOVE_TO_NEXT_STATE; 33324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = generateFrameFromAudio(impl, status, type, impl->result); 33334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_CONTINUE_PROCESSING) 33344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 33354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 33364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * The internal recognizer needs a minimum amount of audio before 33374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * it begins generating frames. 33384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 33394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 33404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 33414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 33424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = generateFrameStats(impl, status, type, impl->result); 33434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_CONTINUE_PROCESSING) 33444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 33454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Not enough frames to calculate stats */ 33464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 33474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 33484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = generatePatternFromFrame(impl, status, type, impl->result); 33494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_CONTINUE_PROCESSING) 33504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 33514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* End of speech detected */ 33524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 33534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 33544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->internalState == SR_RECOGNIZER_INTERNAL_END) 33554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto MOVE_TO_NEXT_STATE; 33564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = detectEndOfSpeech(impl, status, type, impl->result); 33574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_CONTINUE_PROCESSING) 33584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 33594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* End of speech detected */ 33604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 33614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 33624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_INCOMPLETE; 33634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_NONE; 33644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 33654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 33664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SR_RECOGNIZER_INTERNAL_EOI: 33674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 33684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * On EOI (end of input), we need to process the remaining frames that had not 33694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * been processed when PutAudio set the gotLastFrame flag 33704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 33714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = generatePatternFromFrameEOI(impl, status, type, impl->result); 33724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_CONTINUE_PROCESSING) 33734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 33744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* End of speech detected */ 33754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 33764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 33774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = detectEndOfSpeech(impl, status, type, impl->result); 33784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_CONTINUE_PROCESSING) 33794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 33804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* End of speech detected */ 33814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 33824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 33834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *status = SR_RECOGNIZER_EVENT_INCOMPLETE; 33844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *type = SR_RECOGNIZER_RESULT_TYPE_NONE; 33854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 33864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 33874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SR_RECOGNIZER_INTERNAL_EOS: 33884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* On EOS (end of speech detected - not due to end of input), create the result */ 33894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 33904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_LOCK, impl->lockData); 33914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CircularBufferReset(impl->buffer); 33924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->lockFunction) 33934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction(ESR_UNLOCK, impl->lockData); 33944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_RecognizerCreateResultImpl((SR_Recognizer*) impl, status, type)); 33954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->internalState = SR_RECOGNIZER_INTERNAL_END; 33964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 33974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 33984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case SR_RECOGNIZER_INTERNAL_END: 33994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 34004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project default: 34014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_STATE")); 34024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 34034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 34044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 34054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 34064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 34074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 34084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 34094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 34104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerLoadUtteranceImpl(SR_Recognizer* self, const LCHAR* filename) 34114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 34124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* TODO: complete */ 34134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 34144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 34154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 34164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerLoadWaveFileImpl(SR_Recognizer* self, const LCHAR* filename) 34174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 34184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* TODO: complete */ 34194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 34204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 34214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 34224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerLogEventImpl(SR_Recognizer* self, const LCHAR* event) 34234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 34244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 34254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl *impl = (SR_RecognizerImpl*) self; 34264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, event)); 34274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 34284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 34294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 34304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 34314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 34324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerLogTokenImpl(SR_Recognizer* self, const LCHAR* token, const LCHAR* value) 34334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 34344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 34354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl *impl = (SR_RecognizerImpl*) self; 34364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, token, value)); 34374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 34384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 34394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 34404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 34414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 34424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerLogTokenIntImpl(SR_Recognizer* self, const LCHAR* token, int value) 34434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 34444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 34454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl *impl = (SR_RecognizerImpl*) self; 34464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_BASIC(impl->eventLog, impl->osi_log_level, token, value)); 34474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 34484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 34494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 34504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 34514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 34524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerLogSessionStartImpl(SR_Recognizer* self, const LCHAR* sessionName) 34534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 34544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 34554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl *impl = (SR_RecognizerImpl*) self; 34564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 34574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * OSI Platform logging. 34584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * In OSR, these events are logged by the platform. We have no platform in ESR, so we 34594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * log them here. 34604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 34614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 34624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* call (session) start, tokens optional */ 34634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SWIclst"))); 34644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 34654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* service start, in this case SRecTest service */ 34664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->osi_log_level, L("SVNM"), sessionName)); 34674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SWIsvst"))); 34684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->osi_log_level & OSI_LOG_LEVEL_BASIC) 34694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEventSession(impl->eventLog)); 34704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 34714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 34724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 34734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 34744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 34754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 34764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerLogSessionEndImpl(SR_Recognizer* self) 34774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 34784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 34794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl *impl = (SR_RecognizerImpl*) self; 34804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 34814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* OSI log end of call (session) */ 34824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->osi_log_level, L("SWIclnd"))); 34834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->osi_log_level & OSI_LOG_LEVEL_BASIC) 34844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEventSession(impl->eventLog)); 34854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 34864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 34874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 34884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 34894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 34904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 34914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerLogWaveformDataImpl(SR_Recognizer* self, const LCHAR* waveformFilename, 34924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const LCHAR* transcription, const double bos, 34934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const double eos, ESR_BOOL isInvocab) 34944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 34954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 34964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl *impl = (SR_RecognizerImpl*) self; 34974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR num[P_PATH_MAX]; 34984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int frame; 34994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 35004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_AUDIO(impl->eventLog, impl->osi_log_level, L("FILE"), waveformFilename)); 35014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_AUDIO(impl->eventLog, impl->osi_log_level, L("TRANS"), transcription)); 35024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project sprintf(num, L("%.2f"), bos); 35034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_AUDIO(impl->eventLog, impl->osi_log_level, L("BOS_SEC"), num)); 35044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project sprintf(num, L("%.2f"), eos); 35054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogToken_AUDIO(impl->eventLog, impl->osi_log_level, L("EOS_SEC"), num)); 35064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_AUDIO(impl->eventLog, impl->osi_log_level, L("FRAMESIZE"), impl->FRAME_SIZE)); 35074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_AUDIO(impl->eventLog, impl->osi_log_level, L("SAMPLERATE"), impl->sampleRate)); 35084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project frame = (int)(bos * impl->sampleRate * 2 /* 2 bytes per sample */) / impl->FRAME_SIZE; 35094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_AUDIO(impl->eventLog, impl->osi_log_level, L("BOS_FR"), frame)); 35104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project frame = (int)(eos * impl->sampleRate * 2 /* 2 bytes per sample */) / impl->FRAME_SIZE; 35114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_AUDIO(impl->eventLog, impl->osi_log_level, L("EOS_FR"), frame)); 35124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogTokenInt_AUDIO(impl->eventLog, impl->osi_log_level, L("INVOCAB"), isInvocab)); 35134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_EventLogEvent_AUDIO(impl->eventLog, impl->osi_log_level, L("ESRwfrd"))); 35144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 35154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 35164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 35174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 35184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 35194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerSetLockFunctionImpl(SR_Recognizer* self, SR_RecognizerLockFunction function, void* data) 35204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 35214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 35224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 35234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockFunction = function; 35244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->lockData = data; 35254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 35264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 35274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 35284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic ESR_ReturnCode doSignalQualityInit(SR_RecognizerImpl* impl) 35294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 35304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_DoSignalCheck(impl->wavein, &impl->isSignalClipping, &impl->isSignalDCOffset, 35314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project &impl->isSignalNoisy, &impl->isSignalTooQuiet, &impl->isSignalTooFewSamples, 35324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project &impl->isSignalTooManySamples); 35334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->isSignalQualityInitialized = ESR_TRUE; 35344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 35354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 35364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 35374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerIsSignalClippingImpl(SR_Recognizer* self, ESR_BOOL* isClipping) 35384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 35394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 35404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 35414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 35424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (isClipping == NULL) 35434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 35444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError("SR_RecognizerIsSignalClippingImpl", ESR_INVALID_ARGUMENT); 35454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 35464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 35474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!impl->isSignalQualityInitialized) 35484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, doSignalQualityInit(impl)); 35494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *isClipping = impl->isSignalClipping; 35504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 35514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 35524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 35534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 35544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 35554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerIsSignalDCOffsetImpl(SR_Recognizer* self, ESR_BOOL* isDCOffset) 35564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 35574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 35584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 35594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 35604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (isDCOffset == NULL) 35614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 35624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError("SR_RecognizerIsSignalDCOffsetImpl", ESR_INVALID_ARGUMENT); 35634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 35644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 35654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!impl->isSignalQualityInitialized) 35664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, doSignalQualityInit(impl)); 35674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *isDCOffset = impl->isSignalDCOffset; 35684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 35694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 35704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 35714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 35724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 35734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerIsSignalNoisyImpl(SR_Recognizer* self, ESR_BOOL* isNoisy) 35744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 35754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 35764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 35774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 35784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (isNoisy == NULL) 35794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 35804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError("SR_RecognizerIsSignalNoisyImpl", ESR_INVALID_ARGUMENT); 35814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 35824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 35834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!impl->isSignalQualityInitialized) 35844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, doSignalQualityInit(impl)); 35854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *isNoisy = impl->isSignalNoisy; 35864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 35874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 35884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 35894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 35904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 35914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerIsSignalTooQuietImpl(SR_Recognizer* self, ESR_BOOL* isTooQuiet) 35924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 35934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 35944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 35954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 35964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (isTooQuiet == NULL) 35974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 35984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError("SR_RecognizerIsSignalTooQuietImpl", ESR_INVALID_ARGUMENT); 35994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 36004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 36014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!impl->isSignalQualityInitialized) 36024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, doSignalQualityInit(impl)); 36034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *isTooQuiet = impl->isSignalTooQuiet; 36044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 36054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 36064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 36074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 36084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 36094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerIsSignalTooFewSamplesImpl(SR_Recognizer* self, ESR_BOOL* isTooFewSamples) 36104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 36114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 36124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 36134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 36144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (isTooFewSamples == NULL) 36154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 36164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError("SR_RecognizerIsSignalTooFewSamplesImpl", ESR_INVALID_ARGUMENT); 36174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 36184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 36194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!impl->isSignalQualityInitialized) 36204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, doSignalQualityInit(impl)); 36214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *isTooFewSamples = impl->isSignalTooFewSamples; 36224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 36234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 36244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 36254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 36264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 36274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_RecognizerIsSignalTooManySamplesImpl(SR_Recognizer* self, ESR_BOOL* isTooManySamples) 36284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 36294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* impl = (SR_RecognizerImpl*) self; 36304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 36314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 36324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (isTooManySamples == NULL) 36334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 36344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError("SR_RecognizerIsSignalTooManySamplesImpl", ESR_INVALID_ARGUMENT); 36354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 36364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 36374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!impl->isSignalQualityInitialized) 36384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, doSignalQualityInit(impl)); 36394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *isTooManySamples = impl->isSignalTooManySamples; 36404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 36414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 36424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 36434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 36444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 36454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 36464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 36474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**************************************/ 36484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* Waveform Buffer stuff */ 36494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**************************************/ 36504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode WaveformBuffer_Create(WaveformBuffer** waveformBuffer, size_t frame_size) 36514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 36524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 36534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project WaveformBuffer *buf; 36544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t val_size_t; 36554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int val_int; 36564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL exists; 36574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 36584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project buf = NEW(WaveformBuffer, L("SR_RecognizerImpl.wvfmbuf")); 36594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (buf == NULL) 36604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 36614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 36624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("%s: could not create WaveformBuffer"), ESR_rc2str(rc)); 36634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 36644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 36654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 36664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_SessionContains(L("SREC.voice_enroll.bufsz_kB"), &exists); 36674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (exists) 36684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_SessionGetSize_t(L("SREC.voice_enroll.bufsz_kB"), &val_size_t); 36694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 36704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project val_size_t = DEFAULT_WAVEFORM_BUFFER_MAX_SIZE; 36714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project val_size_t *= 1024; /* convert to kB*/ 36724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, CircularBufferCreate(val_size_t, L("SR_RecognizerImpl.wvfmbuf.cbuffer"), &buf->cbuffer)); 36734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 36744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_SessionContains(L("CREC.Frontend.start_windback"), &exists); 36754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (exists) 36764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_SessionGetInt(L("CREC.Frontend.start_windback"), &val_int); 36774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 36784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project val_int = DEFAULT_WAVEFORM_WINDBACK_FRAMES; 36794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project val_int *= frame_size; /* convert frames to bytes */ 36804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project buf->windback_buffer_sz = (size_t) val_int; 36814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project buf->windback_buffer = MALLOC(buf->windback_buffer_sz, L("SR_RecognizerImpl.wvfmbuf.windback")); 36824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (buf->windback_buffer == NULL) 36834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 36844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 36854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("%s: could not create Waveform windback buffer"), ESR_rc2str(rc)); 36864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 36874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 36884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 36894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 36904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_SessionContains(L("SREC.voice_enroll.eos_comfort_frames"), &exists); 36914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (exists) 36924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_SessionGetSize_t(L("SREC.voice_enroll.eos_comfort_frames"), &val_size_t); 36934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 36944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project val_size_t = DEFAULT_EOS_COMFORT_FRAMES; 36954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project buf->eos_comfort_frames = val_size_t; 36964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 36974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_SessionContains(L("SREC.voice_enroll.bos_comfort_frames"), &exists); 36984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (exists) 36994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_SessionGetSize_t(L("SREC.voice_enroll.bos_comfort_frames"), &val_size_t); 37004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 37014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project val_size_t = DEFAULT_BOS_COMFORT_FRAMES; 37024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project buf->bos_comfort_frames = val_size_t; 37034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 37044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* initially off */ 37054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project buf->state = WAVEFORM_BUFFERING_OFF; 37064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 37074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *waveformBuffer = buf; 37084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 37094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 37104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project WaveformBuffer_Destroy(buf); 37114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 37124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 37134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 37144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode WaveformBuffer_Write(WaveformBuffer* waveformBuffer, void *data, size_t num_bytes) 37154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 37164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t available_bytes; 37174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t done_bytes; 37184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 37194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* do nothing if not active */ 37204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project switch (waveformBuffer->state) 37214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 37224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case WAVEFORM_BUFFERING_OFF: 37234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 37244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 37254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case WAVEFORM_BUFFERING_ON_CIRCULAR: 37264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project available_bytes = CircularBufferGetAvailable(waveformBuffer->cbuffer); 37274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (available_bytes < num_bytes) 37284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 37294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project done_bytes = CircularBufferSkip(waveformBuffer->cbuffer, num_bytes - available_bytes); 37304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (done_bytes != num_bytes - available_bytes) 37314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 37324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError("WaveformBuffer_Write: error when skipping bytes"); 37334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 37344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 37354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 37364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project done_bytes = CircularBufferWrite(waveformBuffer->cbuffer, data, num_bytes); 37374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (done_bytes != num_bytes) 37384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 37394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError("WaveformBuffer_Write: error when writing bytes"); 37404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 37414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 37424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 37434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 37444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case WAVEFORM_BUFFERING_ON_LINEAR: 37454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project available_bytes = CircularBufferGetAvailable(waveformBuffer->cbuffer); 37464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (available_bytes < num_bytes) 37474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 37484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project waveformBuffer->overflow_count += num_bytes; 37494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_BUFFER_OVERFLOW; 37504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 37514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project done_bytes = CircularBufferWrite(waveformBuffer->cbuffer, data, num_bytes); 37524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (done_bytes != num_bytes) 37534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 37544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError("WaveformBuffer_Write: error when writing bytes"); 37554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 37564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 37574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 37584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 37594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project default: 37604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError("WaveformBuffer_Write: bad control path"); 37614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 37624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 37634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 37644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 37654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode WaveformBuffer_Read(WaveformBuffer* waveformBuffer, void *data, size_t* num_bytes) 37664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 37674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t bytes_to_read; 37684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 37694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 37704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (num_bytes == NULL) 37714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 37724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_ARGUMENT; 37734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 37744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 37754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 37764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (waveformBuffer->overflow_count > 0) 37774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 37784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project memset(data, 0, *num_bytes); 37794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *num_bytes = 0; 37804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("WaveformBuffer_Read: previous overflow causes read to return NULL")); 37814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 37824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 37834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 37844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (waveformBuffer->read_size != 0 && *num_bytes > waveformBuffer->read_size) 37854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 37864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_OUT_OF_MEMORY: waveform buffer too small for read, increase from %d to %d"), *num_bytes, waveformBuffer->read_size); 37874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_OUT_OF_MEMORY; 37884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 37894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 37904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (waveformBuffer->read_size == 0) 37914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project bytes_to_read = *num_bytes; 37924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 37934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project bytes_to_read = MIN(waveformBuffer->read_size, *num_bytes); 37944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project waveformBuffer->read_size -= bytes_to_read; 37954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *num_bytes = CircularBufferRead(waveformBuffer->cbuffer, data, bytes_to_read); 37964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (*num_bytes != bytes_to_read) 37974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 37984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError("WaveformBuffer_Read: error reading buffer"); 37994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 38004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 38014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 38024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 38034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 38044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 38054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 38064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* WindBack will save the last num_bytes recorded, reset the buffer, and then load the 38074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project saved bytes at the beginning of the buffer */ 38084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode WaveformBuffer_WindBack(WaveformBuffer* waveformBuffer, const size_t num_bytes) 38094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 38104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 38114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t bufferSize; 38124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 38134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (num_bytes <= 0) 38144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 38154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_Reset(waveformBuffer)); 38164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 38174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 38184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 38194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* make sure windback buffer is big enough */ 38204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (num_bytes > waveformBuffer->windback_buffer_sz) 38214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 38224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 38234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("%s: windback buffer is too small (needed=%d, had=%d)"), ESR_rc2str(rc), num_bytes, waveformBuffer->windback_buffer_sz); 38244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 38254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 38264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 38274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_GetSize(waveformBuffer, &bufferSize)); 38284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* skip the first few bytes written */ 38294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (bufferSize < num_bytes) 38304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 38314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError("bufferSize %d num_bytes %d (ESR_INVALID_STATE)\n", bufferSize, num_bytes); 38324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project bufferSize = 0; 38334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 38344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 38354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 38364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project bufferSize -= num_bytes; 38374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 38384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_Skip(waveformBuffer, bufferSize)); 38394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* read the last few bytes written */ 38404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project bufferSize = num_bytes; 38414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_Read(waveformBuffer, waveformBuffer->windback_buffer, &bufferSize)); 38424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 38434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* reset buffer */ 38444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_Reset(waveformBuffer)); 38454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 38464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* rewrite the saved bytes at the beginning */ 38474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_Write(waveformBuffer, waveformBuffer->windback_buffer, bufferSize)); 38484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 38494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 38504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 38514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 38524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 38534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode WaveformBuffer_Destroy(WaveformBuffer* waveformBuffer) 38544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 38554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (waveformBuffer->cbuffer) 38564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE(waveformBuffer->cbuffer); 38574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (waveformBuffer->windback_buffer) 38584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE(waveformBuffer->windback_buffer); 38594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (waveformBuffer) 38604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE(waveformBuffer); 38614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 38624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 38634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 38644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode WaveformBuffer_SetBufferingState(WaveformBuffer* waveformBuffer, waveform_buffering_state_t state) 38654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 38664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project waveformBuffer->state = state; 38674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 38684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 38694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 38704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode WaveformBuffer_GetBufferingState(WaveformBuffer* waveformBuffer, waveform_buffering_state_t* state) 38714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 38724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *state = waveformBuffer->state; 38734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 38744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 38754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 38764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 38774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_BUFFER_OVERFLOW if nametag EOS occured beyond end of buffer 38784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 38794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode WaveformBuffer_ParseEndPointedResultAndTrim(WaveformBuffer* waveformBuffer, const LCHAR* end_pointed_result, const size_t bytes_per_frame) 38804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 38814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const LCHAR *p; 38824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t bos_frame, eos_frame, bufferSize, read_start_offset; 38834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 38844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 38854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* potential end pointed results 38864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 38874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project -pau-@19 tape@36 scan@64 down@88 -pau2-@104 38884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project -pau-@19 tape@34 off@55 -pau2-@78 38894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project -pau-@19 tape@47 help@66 -pau2-@80 38904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project -pau-@16 tape@36 reverse@71 -pau2-@91 38914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project -pau-@21 tape@42 scan@59 down@80 -pau2-@91 38924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 38934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project what I need to extract is the integer between "-pau-@" and ' ' 38944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project and the integer between '@' and " -pau2-" 38954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 38964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 38974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 38984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project p = LSTRSTR( end_pointed_result, PREFIX_WORD); 38994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(p) p+=PREFIX_WORD_LEN; while(p && *p == '@') p++; 3900b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland rc = p ? lstrtosize_t(p, &bos_frame, 10) : ESR_INVALID_ARGUMENT; 39014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc == ESR_INVALID_ARGUMENT) 39024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 39034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("%s: extracting bos from text=%s"), ESR_rc2str(rc), end_pointed_result); 39044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 39054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 39064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (rc != ESR_SUCCESS) 39074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 39084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 39094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project p = LSTRSTR( end_pointed_result, SUFFIX_WORD); 39104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project while(p && p>end_pointed_result && p[-1]!='@') --p; 3911b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland rc = p ? lstrtosize_t(p, &eos_frame, 10) : ESR_INVALID_ARGUMENT; 39124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc == ESR_INVALID_ARGUMENT) 39134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 39144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("%s: extracting eos from text=%s"), ESR_rc2str(rc), end_pointed_result); 39154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 39164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 39174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (rc != ESR_SUCCESS) 39184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 39194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 39204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project bos_frame -= (bos_frame > waveformBuffer->bos_comfort_frames ? waveformBuffer->bos_comfort_frames : 0); 39214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project eos_frame += waveformBuffer->eos_comfort_frames; 39224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 39234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 39244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * I know where speech started, so I want to skip frames 0 to bos_frame. 39254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * I also know where speech ended so I want to set the amount of frames(bytes) to read for 39264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * the nametag audio buffer (i.e. the read_size) 39274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 39284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 39294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project read_start_offset = bos_frame * bytes_per_frame * 2 /* times 2 because of skip even frames */; 39304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project waveformBuffer->read_size = (eos_frame - bos_frame) * bytes_per_frame * 2 /* times 2 because of skip even frames */; 39314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 39324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_GetSize(waveformBuffer, &bufferSize)); 39334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (read_start_offset + waveformBuffer->read_size > bufferSize) 39344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 39354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project waveformBuffer->overflow_count += read_start_offset + waveformBuffer->read_size - bufferSize; 39364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(waveformBuffer->overflow_count > 0); 39374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage(L("Warning: Voice Enrollment audio buffer overflow (spoke too much, over by %d bytes)"), 39384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project waveformBuffer->overflow_count); 39394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_BUFFER_OVERFLOW; 39404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 39414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, WaveformBuffer_Skip(waveformBuffer, read_start_offset)); 39424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef SREC_ENGINE_VERBOSE_LOGGING 39434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogMessage(L("Voice Enrollment: bos@%d, eos@%d, therefore sizeof(waveform) should be %d"), bos_frame, eos_frame, waveformBuffer->read_size); 39444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 39454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 39464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 39474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 39484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 39494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 39504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 39514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode WaveformBuffer_Reset(WaveformBuffer* waveformBuffer) 39524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 39534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CircularBufferReset(waveformBuffer->cbuffer); 39544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project waveformBuffer->overflow_count = 0; 39554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project waveformBuffer->read_size = 0; 39564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 39574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 39584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 39594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode WaveformBuffer_GetSize(WaveformBuffer* waveformBuffer, size_t* size) 39604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 39614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *size = CircularBufferGetSize(waveformBuffer->cbuffer); 39624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 39634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 39644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 39654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode WaveformBuffer_Skip(WaveformBuffer* waveformBuffer, const size_t bytes) 39664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 39674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (CircularBufferSkip(waveformBuffer->cbuffer, bytes) != (int) bytes) 39684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_STATE; 39694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 39704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 39714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 39724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 39734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 39744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic ESR_ReturnCode SR_Recognizer_Reset_Buffers ( SR_RecognizerImpl *impl ) 39754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 39764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode reset_status; 39774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 39784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE ( impl->audioBuffer ); 39794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->audioBuffer = NULL; 39804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->audioBuffer = MALLOC ( impl->FRAME_SIZE, MTAG ); 39814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 39824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( impl->audioBuffer != NULL ) 39834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 39844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project WaveformBuffer_Destroy ( impl->waveformBuffer ); 39854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->waveformBuffer = NULL; 39864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project reset_status = WaveformBuffer_Create ( &impl->waveformBuffer, impl->FRAME_SIZE ); 39874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 39884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 39894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 39904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project reset_status = ESR_OUT_OF_MEMORY; 39914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 39924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ( reset_status ); 39934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 39944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 39954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 39964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 39974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic ESR_ReturnCode SR_Recognizer_Validate_Sample_Rate ( size_t sample_rate ) 39984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 39994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode validate_status; 40004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project switch ( sample_rate ) 40024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 40034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case 8000: 40044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case 11025: 40054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case 16000: 40064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case 22050: 40074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project validate_status = ESR_SUCCESS; 40084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 40094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project default: 40114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project validate_status = ESR_INVALID_ARGUMENT; 40124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 40134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 40144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ( validate_status ); 40154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 40164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic ESR_ReturnCode SR_Recognizer_Sample_Rate_Needs_Change ( size_t new_sample_rate, ESR_BOOL *needs_changing ) 40204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 40214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode validate_status; 40224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t current_sample_rate; 40234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project validate_status = ESR_SessionGetSize_t ( "CREC.Frontend.samplerate", ¤t_sample_rate ); 40254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( validate_status == ESR_SUCCESS ) 40274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 40284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( new_sample_rate != current_sample_rate ) 40294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *needs_changing = ESR_TRUE; 40304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 40314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *needs_changing = ESR_TRUE; 40324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 40334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ( validate_status ); 40344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 40354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic ESR_ReturnCode SR_Recognizer_Change_Sample_Rate_Session_Params_8K ( void ) 40394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 40404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode change_status; 40414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR model_filenames [P_PATH_MAX]; 40424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR lda_filename [P_PATH_MAX]; 40434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t filename_length; 40444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project filename_length = P_PATH_MAX; 40464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = ESR_SessionGetLCHAR ( L("cmdline.modelfiles8"), model_filenames, &filename_length ); 40474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( change_status == ESR_SUCCESS ) 40494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 40504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project filename_length = P_PATH_MAX; 40514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = ESR_SessionGetLCHAR ( L("cmdline.lda8"), lda_filename, &filename_length ); 40524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* From this point on, if an error occurs, we're screwed and recovery is probably impossible */ 40544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( change_status == ESR_SUCCESS ) 40554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 40564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = ESR_SessionSetSize_t ( "CREC.Frontend.samplerate", 8000 ); 40574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( change_status == ESR_SUCCESS ) 40584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 40594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = ESR_SessionSetInt ( "CREC.Frontend.highcut", 4000 ); 40604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( change_status == ESR_SUCCESS ) 40624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 40634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = ESR_SessionSetLCHAR ( L("cmdline.modelfiles"), model_filenames ); 40644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( change_status == ESR_SUCCESS ) 40664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = ESR_SessionSetLCHAR ( L("cmdline.lda"), lda_filename ); 40674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 40684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 40694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 40704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 40714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 40724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError (L("\nMissing Parameter lda8\n")); 40734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 40744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 40754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 40764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 40774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError (L("\nMissing Parameter models8\n")); 40784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 40794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ( change_status ); 40804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 40814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic ESR_ReturnCode SR_Recognizer_Change_Sample_Rate_Session_Params_11K_to_22K ( size_t sample_rate ) 40854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 40864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode change_status; 40874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR model_filenames [P_PATH_MAX]; 40884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR lda_filename [P_PATH_MAX]; 40894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t filename_length; 40904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project filename_length = P_PATH_MAX; 40924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = ESR_SessionGetLCHAR ( L("cmdline.modelfiles11"), model_filenames, &filename_length ); 40934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( change_status == ESR_SUCCESS ) 40954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 40964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project filename_length = P_PATH_MAX; 40974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = ESR_SessionGetLCHAR ( L("cmdline.lda11"), lda_filename, &filename_length ); 40984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 40994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* From this point on, if an error occurs, we're screwed and recovery is probably impossible */ 41004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( change_status == ESR_SUCCESS ) 41014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 41024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = ESR_SessionSetSize_t ( "CREC.Frontend.samplerate", sample_rate ); 41034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( change_status == ESR_SUCCESS ) 41054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 41064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = ESR_SessionSetInt ( "CREC.Frontend.highcut", 5500 ); 41074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( change_status == ESR_SUCCESS ) 41094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 41104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = ESR_SessionSetLCHAR ( L("cmdline.modelfiles"), model_filenames ); 41114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( change_status == ESR_SUCCESS ) 41134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = ESR_SessionSetLCHAR ( L("cmdline.lda"), lda_filename ); 41144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 41154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 41164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 41174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 41184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 41194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError (L("\nMissing Parameter lda11\n")); 41204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 41214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 41224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 41234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 41244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError (L("\nMissing Parameter models11\n")); 41254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 41264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ( change_status ); 41274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 41284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic ESR_ReturnCode SR_Recognizer_Change_Sample_Rate_Session_Params ( size_t new_sample_rate ) 41324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 41334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode change_status; 41344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( new_sample_rate == 8000 ) 41364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = SR_Recognizer_Change_Sample_Rate_Session_Params_8K ( ); 41374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 41384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = SR_Recognizer_Change_Sample_Rate_Session_Params_11K_to_22K ( new_sample_rate ); 41394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ( change_status ); 41414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 41424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_Recognizer_Change_Sample_RateImpl ( SR_Recognizer *recognizer, size_t new_sample_rate ) 41464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 41474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode change_status; 41484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL rate_needs_changing; 41494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl *impl; 41504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FrontendInputParams *frontendParams; 41514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = SR_Recognizer_Validate_Sample_Rate ( new_sample_rate ); 41534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( change_status == ESR_SUCCESS ) 41554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 41564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = SR_Recognizer_Sample_Rate_Needs_Change ( new_sample_rate, &rate_needs_changing ); 41574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( change_status == ESR_SUCCESS ) 41594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 41604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( rate_needs_changing == ESR_TRUE ) 41614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 41624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = SR_Recognizer_Change_Sample_Rate_Session_Params ( new_sample_rate ); 41634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( change_status == ESR_SUCCESS ) 41654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { // SR_RecognizerCreateFrontendImpl 41664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl = (SR_RecognizerImpl *)recognizer; 41674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = SR_RecognizerUnsetupImpl( recognizer ); 41684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( change_status == ESR_SUCCESS ) 41704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 41714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_UnconfigureFrontend ( impl->frontend ); 41724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project frontendParams = CA_AllocateFrontendParameters ( ); 41734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( frontendParams != NULL ) 41754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 41764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = SR_RecognizerGetFrontendLegacyParametersImpl ( frontendParams ); 41774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( change_status == ESR_SUCCESS ) 41794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 41804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_ConfigureFrontend ( impl->frontend, frontendParams ); 41814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_UnconfigureWave ( impl->wavein ); 41824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_ConfigureWave ( impl->wavein, impl->frontend ); 41834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->sampleRate = new_sample_rate; 41844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->FRAME_SIZE = impl->sampleRate / FRAMERATE * SAMPLE_SIZE; 41854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = SR_Recognizer_Reset_Buffers ( impl ); 41864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( change_status == ESR_SUCCESS ) 41884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 41894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = SR_RecognizerSetupImpl( recognizer ); 41904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 41914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( change_status == ESR_SUCCESS ) 41924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = SR_AcousticStateReset ( recognizer ); 41934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 41944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 41954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 41964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerSetupImpl( recognizer ); /* Otherwise recognizer is in bad state */ 41974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 41984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 41994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeFrontendParameters ( frontendParams ); 42004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 42014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 42024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 42034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerSetupImpl( recognizer ); /* Otherwise recognizer is in bad state */ 42044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project change_status = ESR_OUT_OF_MEMORY; 42054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 42064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 42074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 42084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 42094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 42104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 42114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ( change_status ); 42124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 42134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 42144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4215