14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------* 24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * ca_cms.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 * CA_Wave Methods 224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ************************************************************************/ 234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifndef _RTT 254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <stdio.h> 264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <stdlib.h> 284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <string.h> 294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <limits.h> 304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef unix 324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <unistd.h> 334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <assert.h> 354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "frontapi.h" 384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "portable.h" 394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "swicms.h" 404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef SET_RCSID 424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic const char *rcsid = 0 ? (const char *) &rcsid : 434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project "$Id: ca_cms.c,v 1.7.6.11 2008/05/27 16:08:28 dahan Exp $"; 444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode CA_SetCMSParameters ( CA_Wave *hWave, const LCHAR *param_string ) 484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode set_status; 504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( hWave != NULL ) 524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project set_status = swicms_set_cmn ( hWave->data.channel->swicms, param_string ); 534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project set_status = ESR_INVALID_STATE; 554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ( set_status ); 564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode CA_GetCMSParameters ( CA_Wave *hWave, LCHAR *param_string, size_t* len ) 604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode get_status; 624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( hWave != NULL ) 644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project get_status = swicms_get_cmn ( hWave->data.channel->swicms, param_string, len ); 654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project get_status = ESR_INVALID_STATE; 674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ( get_status ); 684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid CA_ReLoadCMSParameters(CA_Wave *hWave, const char *basename) 724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(hWave); 744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (hWave->is_configuredForAgc == False) 754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(UNCONFIGURED_CMS_AND_AGC); 764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!basename) { 774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if( swicms_init(hWave->data.channel->swicms) ) 784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(UNEXPECTED_DATA_ERROR); 794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(FEATURE_NOT_SUPPORTED); 824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid CA_SaveCMSParameters(CA_Wave *hWave, const char *basename) 864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(FEATURE_NOT_SUPPORTED); 884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid CA_LoadCMSParameters(CA_Wave *hWave, const char *basename, 924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FrontendInputParams *hFrontArgs) 934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project TRY_CA_EXCEPT 954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#if !defined(_RTT) 964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(hWave); 974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* ASSERT (basename); */ 984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(hFrontArgs); 994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (hWave->is_configuredForAgc == True) 1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(CONFIGURED_CMS_AND_AGC); 1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (hWave->is_attached == True) 1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(ATTACHED_CMS_AND_AGC); 1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hWave->data.channel->channorm = create_channel_normalization(); 1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* load_channel_parameters (basename, hWave->data.channel->channorm); 1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project not used anymore, rather we spec this is the parfile directly */ 1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hWave->data.channel->channorm->dim = MAX_CHAN_DIM; 1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project setup_channel_normalization(hWave->data.channel->channorm, 1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hWave->data.channel->spchchan, 1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#if NORM_IN_IMELDA 1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hFrontArgs->mel_dim * 3, /* TODO: find appropriate number */ 1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#else 1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hFrontArgs->mel_dim, 1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hFrontArgs->forget_factor); 1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hWave->data.channel->mel_dim = hFrontArgs->mel_dim; /* TODO: more checks */ 1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hWave->data.channel->swicms = (swicms_norm_info*)CALLOC(1, sizeof(swicms_norm_info), "cfront.swicms"); 1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if( swicms_init(hWave->data.channel->swicms) ) 1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(UNEXPECTED_DATA_ERROR); 1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hWave->is_configuredForAgc = True; 1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#else 1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project log_report("Channel normalization or RTT not in module\n"); 1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(FEATURE_NOT_SUPPORTED); 1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project BEG_CATCH_CA_EXCEPT; 1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project END_CATCH_CA_EXCEPT(hFrontend); 1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid CA_ClearCMSParameters(CA_Wave *hWave) 1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project TRY_CA_EXCEPT 1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#if NORM_IN_IMELDA 1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int dim = hWave->data.channel->mel_dim * 3; 1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#else 1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int dim = hWave->data.channel->mel_dim; 1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(hWave); 1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (hWave->is_configuredForAgc == False) 1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(UNCONFIGURED_CMS_AND_AGC); 1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (hWave->is_attached == True) 1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(ATTACHED_CMS_AND_AGC); 1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project clear_channel_normalization(hWave->data.channel->spchchan, dim); 1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project destroy_channel_normalization(hWave->data.channel->channorm); 1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hWave->data.channel->channorm = NULL; 1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hWave->is_configuredForAgc = False; 1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE(hWave->data.channel->swicms); 1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project BEG_CATCH_CA_EXCEPT; 1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project END_CATCH_CA_EXCEPT(hWave); 1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid CA_AttachCMStoUtterance(CA_Wave *hWave, CA_Utterance *hUtt) 1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Link the utt's spchchan to the wave object's. This is checked in AGC fn 1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project to ensure that the correct Utt & Wave objects have been supplied. 1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project TRY_CA_EXCEPT 1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(hUtt); 1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(hWave); 1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (hWave->is_configuredForAgc == False) 1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(UNCONFIGURED_CMS_AND_AGC); 1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (hWave->is_attached == True) 1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(ATTACHED_CMS_AND_AGC); 1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(hWave->data.channel->channorm); 1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hUtt->data.gen_utt.spchchan = hWave->data.channel->spchchan; 1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hUtt->data.gen_utt.channorm = hWave->data.channel->channorm; 1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hUtt->data.gen_utt.swicms = hWave->data.channel->swicms; 1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hUtt->data.gen_utt.do_channorm = True; 1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#if NORM_IN_IMELDA /* TODO: find appropriate number */ 1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hUtt->data.gen_utt.num_chan = 3 * hWave->data.channel->mel_dim; 1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#else 1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hUtt->data.gen_utt.num_chan = hWave->data.channel->mel_dim; 1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hWave->is_configuredForAgc = True; 1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hWave->is_attached = True; 1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project BEG_CATCH_CA_EXCEPT; 1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project END_CATCH_CA_EXCEPT(hFrontend); 1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode CA_IsCMSAttachedtoUtterance(CA_Wave* hWave, ESR_BOOL* isAttached) 1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (hWave == NULL || isAttached == NULL) 1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *isAttached = hWave->is_attached; 1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode CA_IsConfiguredForAgc(CA_Wave* hWave, ESR_BOOL* isConfigured) 1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (hWave == NULL || isConfigured == NULL) 1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *isConfigured = hWave->is_configuredForAgc; 2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid CA_DetachCMSfromUtterance(CA_Wave *hWave, CA_Utterance *hUtt) 2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project TRY_CA_EXCEPT 2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ASSERT(hWave); 2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (hWave->is_configuredForAgc == False) 2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(UNCONFIGURED_CMS_AND_AGC); 2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (hUtt && hUtt->data.gen_utt.do_channorm == False) 2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(UTTERANCE_INVALID); 2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (hWave->is_attached == False) 2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(UNATTACHED_CMS_AND_AGC); 2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (hWave->data.channel->spchchan && hUtt->data.gen_utt.spchchan 2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project && hWave->data.channel->spchchan != hUtt->data.gen_utt.spchchan) 2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project log_report("Mismatched channel and utterance\n"); 2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(BAD_CHANNEL); 2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } /* TODO: find a better code */ 2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hUtt->data.gen_utt.channorm = NULL; 2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hUtt->data.gen_utt.spchchan = NULL; 2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hUtt->data.gen_utt.do_channorm = False; 2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hWave->is_attached = False; 2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project BEG_CATCH_CA_EXCEPT; 2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project END_CATCH_CA_EXCEPT(hWave) 2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid CA_CalculateCMSParameters(CA_Wave *hWave) 2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project TRY_CA_EXCEPT 2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (hWave->is_configuredForAgc == False) 2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(UNCONFIGURED_CMS_AND_AGC); 2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (hWave->is_attached == False) 2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SERVICE_ERROR(UNATTACHED_CMS_AND_AGC); 2394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project estimate_normalization_parameters(hWave->data.channel->channorm, 2414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hWave->data.channel->spchchan, 2424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#if NORM_IN_IMELDA /* TODO: find appropriate number */ 2434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hWave->data.channel->mel_dim * 3); 2444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#else 2454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project hWave->data.channel->mel_dim); 2464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 2474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 2484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project BEG_CATCH_CA_EXCEPT; 2494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project END_CATCH_CA_EXCEPT(hWave); 2504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 251