14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------* 24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * get_fram.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 <stdlib.h> 224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifndef _RTT 234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pstdio.h" 244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <limits.h> 264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <math.h> 274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <string.h> 284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "passert.h" 294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "c42mul.h" 314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "portable.h" 324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "../clib/fpi_tgt.inl" 344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define DEBUG 0 364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define FUDGE_FACTOR 1.2f 374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectconst float root_pi_over_2 = (float) 1.2533141; 394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic const char get_fram[] = "$Id: get_fram.c,v 1.7.6.13 2007/10/15 18:06:24 dahan Exp $"; 414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic void create_cepstrum_offsets(preprocessed *prep); 434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic void destroy_cepstrum_offsets(preprocessed *prep); 444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic void apply_channel_offset(preprocessed *prep); 454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic int compare_cached_frame(preprocessed *prep, utterance_info *utt); 464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid init_utterance(utterance_info *utt, int utt_type, int dimen, 484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int buffer_size, int keep_frames, int num_chan, int do_voicing) 494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* 504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project** To setup the utterance structure 514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project*/ 524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Construct frame buffer and voice buffer here 544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(utt); 564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(dimen > 0); 574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (buffer_size < keep_frames) 584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(BAD_ARGUMENT); 594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project utt->utt_type = utt_type; 604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project utt->gen_utt.dim = dimen; 614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project utt->gen_utt.frame = createFrameBuffer(buffer_size, 624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project dimen, keep_frames, do_voicing); 634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project utt->gen_utt.num_chan = num_chan; 644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project setup_ambient_estimation(utt->gen_utt.backchan, 664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project utt->gen_utt.num_chan, 100); 674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid set_voicing_durations(utterance_info *utt, int voice_duration, 714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int quiet_duration, int unsure_duration, 724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int start_windback) 734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project utt->gen_utt.voice_duration = voice_duration; 754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project utt->gen_utt.quiet_duration = quiet_duration; 764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project utt->gen_utt.unsure_duration = unsure_duration; 774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project utt->gen_utt.start_windback = start_windback; 784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid free_utterance(utterance_info *utt) 824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* 834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project** To close data file pointers etc. 844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project*/ 854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Destroy frame buffer 874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(utt); 894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project clear_ambient_estimation(utt->gen_utt.backchan, utt->gen_utt.dim); 914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (utt->gen_utt.frame) 924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project destroyFrameBuffer(utt->gen_utt.frame); 944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project utt->gen_utt.frame = NULL; 954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid init_preprocessed(preprocessed *prep, int dimen, float imelda_scale) 1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* 1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project** To setup the preprocessed structure 1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project*/ 1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(prep); 1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(dimen > 0); 1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->dim = dimen; 1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->seq = (imeldata *) CALLOC(prep->dim, sizeof(imeldata), 1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project "srec.prep->seq"); 1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->seq_unnorm = (imeldata *) CALLOC(prep->dim, sizeof(imeldata), 1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project "srec.prep->seq_unnorm"); 1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->last_frame = (featdata *) CALLOC(prep->dim, sizeof(featdata), 1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project "srec.prep->last_frame"); 1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Setup constants for distance calculation 1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* TODO: check numbers for non-zero */ 1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->add.scale = (prdata)((2 * imelda_scale * imelda_scale) / MUL_SCALE 1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project + 0.5) - (prdata)0.5; 1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->add.inv_scale = (prdata)(((float)(0x01 << 12) * MUL_SCALE) / 1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (2 * imelda_scale * imelda_scale) + 0.5) - 1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (prdata)0.5; 1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->mul.multable_factor_gaussian = 1; 1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->mul.multable_factor = (prdata)(((MUL_SCALE * (0x01 << EUCLID_SHIFT) 1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * prep->uni_score_scale) 1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project / (2 * (imelda_scale * imelda_scale 1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * FUDGE_FACTOR * FUDGE_FACTOR))) / 128 + 0.5) 1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project - (prdata)0.5; 1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->mul.grand_mod_cov = (prdata)((MUL_SCALE * prep->uni_score_scale * 1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->whole_dim * 1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project log((imelda_scale * FUDGE_FACTOR) / 1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (SIGMA_BIAS * root_pi_over_2))) / 128 + 0.5) 1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project - (prdata)0.5 - prep->uni_score_offset; 1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->mul.grand_mod_cov_gaussian = (prdata)(2 * imelda_scale * imelda_scale * 1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->use_dim * 1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project log(imelda_scale / 1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (SIGMA_BIAS * root_pi_over_2)) + 0.5) 1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project - (prdata)0.5; 1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#if DEBUG 1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project log_report("grand_mod_cov %.1f, grand_mod_cov_gaussian %.1f\n", 1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (float)prep->mul.grand_mod_cov, 1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (float)prep->mul.grand_mod_cov_gaussian); 1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project log_report("multable_factor %f, multable_factor_gaussian %f\n", 1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (float)prep->mul.multable_factor, 1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (float)prep->mul.multable_factor_gaussian); 1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project create_cepstrum_offsets(prep); 1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid clear_preprocessed(preprocessed *prep) 1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* 1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project** To setup the preprocessed structure 1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project*/ 1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(prep); 1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project destroy_cepstrum_offsets(prep); 1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->dim = 0; 1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE((char *)prep->last_frame); 1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE((char *)prep->seq); 1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE((char *)prep->seq_unnorm); 1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint get_data_frame(preprocessed *prep, utterance_info *utt) 1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* 1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project** To get a frame amount of data and perform preprocessing functions 1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project*/ 1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int status_code; 1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(prep); 1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(utt); 1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (utt->gen_utt.channorm && !utt->gen_utt.channorm->adj_valid) 1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project convert_adjustment_to_imelda(utt->gen_utt.channorm, prep); 1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (utt->gen_utt.dim != prep->dim) 1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(UTTERANCE_DIMEN_MISMATCH); 1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (prep->post_proc & VFR) 1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ((status_code = get_utterance_frame(prep, utt)) <= 0) 1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (status_code); 1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project log_report("get_data_frame vfr not supported\n"); 1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(FEATURE_NOT_SUPPORTED); 1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project status_code = get_utterance_frame(prep, utt); 1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (status_code == 0) return(status_code); 1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (status_code == -1) return(1); 1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (prep->chan_offset) 1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project apply_channel_offset(prep); 1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Apply linear transformation if necessary 2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (prep->post_proc & LIN_TRAN) 2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project linear_transform_frame(prep, prep->seq, True); 2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project memcpy(prep->seq_unnorm, prep->seq, prep->dim * sizeof(imeldata)); 2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (utt->gen_utt.channorm) 2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project apply_channel_normalization_in_imelda(utt->gen_utt.channorm, 2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->seq, prep->seq_unnorm, 2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project utt->gen_utt.channorm->dim); 2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (1); 2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint get_utterance_frame(preprocessed *prep, utterance_info *utt) 2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* 2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project** To get a frame amount of data 2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project** Maintains a single data buffer and passes the pointers to frame of data. 2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project** Post-increments after copying 2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project*/ 2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project featdata *frame_ptr; 2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int ii; 2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(prep); 2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(utt); 2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Get the next data frame in 2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (getFrameGap(utt->gen_utt.frame) > 0) 2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* is it a cloned object */ 2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (prep->ref_count > 1 && compare_cached_frame(prep, utt)) 2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (-1); 2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project frame_ptr = currentRECframePtr(utt->gen_utt.frame); 2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (frame_ptr == NULL) 2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (0); 2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (prep->ref_count > 1) 2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(prep->last_frame); 2394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project memcpy(prep->last_frame, frame_ptr, 2404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->dim* sizeof(featdata)); 2414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (ii = 0; ii < utt->gen_utt.dim; ii++) 2434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->seq[ii] = (imeldata)frame_ptr[ii]; 2444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Apply fast-voice corrections if necessary */ 2454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (utt->gen_utt.frame->haveVoiced) 2464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project utterance_detection_fixup(utt->gen_utt.frame, 2484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project &utt->gen_utt.last_push, utt->gen_utt.voice_duration, 2494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project utt->gen_utt.quiet_duration, utt->gen_utt.unsure_duration); 2504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* if (isFrameBufferActive (utt->gen_utt.frame) 2514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project && getFrameGap (utt->gen_utt.frame) <= utt->gen_utt.quiet_duration) 2524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR (INTERNAL_ERROR); */ 2534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->voicing_status = 2544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rec_frame_voicing_status(utt->gen_utt.frame); 2554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (1); 2574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (0); 2594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint advance_utterance_frame(utterance_info *utt) 2634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* 2644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project** To get a frame amount of data 2654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project*/ 2664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 2674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(utt); 2684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* if more samples are needed then read from file if the type matched 2694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Get the next data frame in 2714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (getFrameGap(utt->gen_utt.frame) > 0) 2734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (incRECframePtr(utt->gen_utt.frame) != False) 2754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (0); 2764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (1); 2774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (0); 2794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint retreat_utterance_frame(utterance_info *utt) 2824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* 2834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project** To get a frame amount of data 2844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project*/ 2854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 2864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(utt); 2874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (getBlockGap(utt->gen_utt.frame) > 0) 2894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (decRECframePtr(utt->gen_utt.frame) != False) 2914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (0); 2924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (1); 2934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (0); 2954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid prepare_data_frame(preprocessed *prep) 2984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 2994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int ii; 3004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prdata sum_sq; 3014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project sum_sq = 0; 3034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (ii = 0; ii < prep->whole_dim; ii++) 3054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project sum_sq += (prdata) SQR((prdata)prep->seq[ii]); 3064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->seq_sq_sum_whole = -sum_sq; 3074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(prep->whole_dim <= prep->use_dim); 3094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (ii = 0; ii < prep->use_dim; ii++) 3104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project sum_sq += (prdata) SQR((prdata)prep->seq[ii]); 3114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->seq_sq_sum = -sum_sq; 3124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project sum_sq = 0; 3144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (ii = 0; ii < prep->whole_dim; ii++) 3164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project sum_sq += (prdata) SQR((prdata)prep->seq_unnorm[ii]); 3174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->seq_unnorm_sq_sum_whole = -sum_sq; 3184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 3204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint utterance_started(utterance_info *utt) 3234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 3244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(utt); 3254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (utt->gen_utt.frame->haveVoiced 3264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project && utt->gen_utt.frame->voicingDetected) 3274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (True); 3284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 3294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (False); 3304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint utterance_ended(utterance_info *utt) 3334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 3344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(utt); 3354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (utt->gen_utt.frame->utt_ended); 3364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint load_utterance_frame(utterance_info *utt, unsigned char* pUttFrame, int voicing) 3394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 3404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project featdata framdata[MAX_DIMEN]; 3414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int ii; 3424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(utt); 3444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(pUttFrame); 3454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (ii = 0; ii < utt->gen_utt.frame->uttDim; ii++) 3474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project framdata[ii] = (featdata) pUttFrame[ii]; 3484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (pushSingleFEPframe(utt->gen_utt.frame, framdata, voicing) != False) 3504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (0); 3514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (1); 3534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint copy_utterance_frame(utterance_info *oututt, utterance_info *inutt) 3564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 3574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int voicedata; 3584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project featdata *framdata; 3594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(oututt); 3614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(inutt); 3624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ((framdata = currentRECframePtr(inutt->gen_utt.frame)) == NULL) 3644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (0); 3654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project voicedata = getVoicingCode(inutt->gen_utt.frame, framdata); 3674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (pushSingleFEPframe(oututt->gen_utt.frame, framdata, voicedata) != False) 3694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (0); 3704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (1); 3724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint copy_pattern_frame(utterance_info *oututt, preprocessed *prep) 3754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 3764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int ii; 3774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project featdata frame_ptr[MAX_DIMEN]; 3784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(oututt); 3804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(prep); 3814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(oututt->gen_utt.dim < MAX_DIMEN); 3824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (ii = 0; ii < oututt->gen_utt.dim; ii++) 3834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project frame_ptr[ii] = (featdata) RANGE(prep->seq[ii], 0, 255); 3844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (pushSingleFEPframe(oututt->gen_utt.frame, frame_ptr, 3854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->voicing_status) 3864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project != False) return(0); 3874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (1); 3884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic void create_cepstrum_offsets(preprocessed *prep) 3914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 3924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(prep); 3934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->chan_offset = (imeldata *) CALLOC_CLR(prep->dim, 3944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project sizeof(imeldata), "srec.chan_offset"); 3954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 3964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid set_cepstrum_offset(preprocessed *prep, int index, int value) 3994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 4004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(prep); 4014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(prep->chan_offset); 4024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(index >= 0 && index < prep->dim); 4034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->chan_offset[index] = (imeldata) value; 4044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 4054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic void destroy_cepstrum_offsets(preprocessed *prep) 4084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 4094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(prep); 4104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE((char *)prep->chan_offset); 4114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->chan_offset = 0; 4124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 4134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic void apply_channel_offset(preprocessed *prep) 4164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 4174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int ii; 4184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (ii = 0; ii < prep->dim; ii++) 4204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project prep->seq[ii] += prep->chan_offset[ii]; 4214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 4224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic int compare_cached_frame(preprocessed *prep, utterance_info *utt) 4254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 4264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int ii; 4274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project featdata *frame_ptr; 4284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project frame_ptr = currentRECframePtr(utt->gen_utt.frame); 4304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (frame_ptr == NULL) 4314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (False); 4324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (ii = 0; ii < utt->gen_utt.dim; ii++) 4334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (prep->last_frame[ii] != frame_ptr[ii]) 4344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (False); 4354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return (True); 4364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid convert_adjustment_to_imelda(norm_info *norm, preprocessed *prep) 4394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 4404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int ii; 4414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project imeldata fram[MAX_DIMEN]; 4424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(prep); 4444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(norm); 4454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (ii = 0; ii < 12; ii++) /* TODO: fix dimension properly, and sort out rouding/type */ 4464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fram[ii] = (imeldata) norm->adjust[ii]; /* TODO: review types */ 4474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (; ii < prep->dim; ii++) 4484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fram[ii] = 0; 4494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project linear_transform_frame(prep, fram, False); 4514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (ii = 0; ii < prep->dim; ii++) 4534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project norm->imelda_adjust[ii] = fram[ii]; 4544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#if DEBUG 4554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project log_report("NORM AUX: "); 4564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (ii = 0; ii < norm->dim; ii++) 4574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project log_report("%d ", (int)norm->imelda_adjust[ii]); 4584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project log_report("\n"); 4594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 4604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project norm->adj_valid = True; 4614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 4624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 463