1/*---------------------------------------------------------------------------* 2 * frontapi.h * 3 * * 4 * Copyright 2007, 2008 Nuance Communciations, Inc. * 5 * * 6 * Licensed under the Apache License, Version 2.0 (the 'License'); * 7 * you may not use this file except in compliance with the License. * 8 * * 9 * You may obtain a copy of the License at * 10 * http://www.apache.org/licenses/LICENSE-2.0 * 11 * * 12 * Unless required by applicable law or agreed to in writing, software * 13 * distributed under the License is distributed on an 'AS IS' BASIS, * 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 15 * See the License for the specific language governing permissions and * 16 * limitations under the License. * 17 * * 18 *---------------------------------------------------------------------------*/ 19 20 21 22#ifndef _h_frontapi_ 23#define _h_frontapi_ 24 25#include "creccons.h" /* CREC Public Constants */ 26 27#include "front.h" 28#include "sample.h" 29#include "utteranc.h" 30#include "caexcept.h" 31 32#ifdef __cplusplus 33extern "C" 34{ 35#endif 36 37 /** 38 ************************************************************************ 39 * SwigImageBegin <- DO NOT MOVE THIS LINE ! 40 * 41 * This is a CADOC Keyword section. 42 * 43 * If CADOC is instructed to create a SWIG I-File and this is one of the 44 * files in the input list, everything between the 'SwigImage Begin' and 45 * 'SwigImage End' keywords comment blocks will be copied 'as-is' to the 46 * SWIG I-File specified on the CADOC command line. 47 * 48 ************************************************************************ 49 */ 50#include "mutualob.h" 51 52#ifndef SWIGBUILD 53 54 typedef struct 55 { 56 int ca_rtti; 57 booldata is_configured; 58 booldata is_configuredForAgc; 59 booldata is_configuredForVoicing; 60 booldata is_attached; 61 wave_info data; 62 voicing_info voice; 63 } 64 CA_Wave; 65 66 typedef struct 67 { 68 int ca_rtti; 69 booldata is_configured; 70 booldata is_filter_loaded; 71 int status; 72 int samplerate; 73 float src_scale; 74 float sink_scale; 75 int offset; 76 front_config *config; 77 } 78 CA_Frontend; 79 80#endif 81 82 /** 83 ************************************************************************ 84 * SwigImageEnd <- DO NOT MOVE THIS LINE ! 85 ************************************************************************ 86 */ 87 88 /* 89 ** Frontend 90 */ 91 92 CA_Frontend* CA_AllocateFrontend(float srcscale, 93 int offset, 94 float sinkscale); 95 /** 96 * 97 * Params srcscale Gain applied to incoming wave data 98 * offset DC offset applied to incoming wave data 99 * sinkscale Gain applied to any wave data sinks 100 * 101 * Returns Handle to new Front End object 102 * 103 * See CA_FreeFrontend 104 * 105 ************************************************************************ 106 * Allocates a front-end object 107 ************************************************************************ 108 */ 109 110 111 void CA_FreeFrontend(CA_Frontend* hFrontend); 112 /** 113 * 114 * Params hFrontend Handle to valid front-end object 115 * 116 * Returns void 117 * 118 * See CA_AllocateFrontend 119 * 120 ************************************************************************ 121 * Deletes a front-end object 122 ************************************************************************ 123 */ 124 125 126 void CA_ConfigureFrontend(CA_Frontend *hFrontend, 127 CA_FrontendInputParams *hFrontArgs); 128 /** 129 * 130 * Params hFrontend Handle to valid front-end object 131 * hFrontpars Handle to valid front-end input parameters object 132 * 133 * Returns void 134 * 135 * See CA_UnconfigureFrontend 136 * 137 ************************************************************************ 138 * Set up the front end using the paramteters. This function 139 * configures the member Wave, Freq and Cep objects, by calling their 140 * create and setup functions. 141 ************************************************************************ 142 */ 143 144 145 void CA_SetWarpScale(CA_Frontend *hFrontend, float wscale); 146 /** 147 * 148 * Params hFrontend Handle to valid front-end object 149 * wscale warp scale 150 * 151 * Returns void 152 * 153 * See CA_SetFrontendParameter 154 * 155 ************************************************************************ 156 ************************************************************************ 157 */ 158 159 void CA_UnconfigureFrontend(CA_Frontend *hFrontend); 160 /** 161 * 162 * Params hFrontend Handle to valid front-end object 163 * 164 * Returns void 165 * 166 * See CA_ConfigureFrontend 167 * 168 ************************************************************************ 169 * Undo all of the front end configurations 170 ************************************************************************ 171 */ 172 173 174 int CA_MakeFrame(CA_Frontend* hFrontend, 175 CA_Utterance* hUtt, 176 CA_Wave* hWave); 177 /** 178 * 179 * Params hFrontend Handle to valid front-end object 180 * hUtt Handle to valid utterance object 181 * hWave Handle to valid wave object 182 * 183 * Returns non-zero if a frame was constructed 184 * 185 ************************************************************************ 186 * Constructs a single frame from audio in the wave object. The output 187 * frame is inserted into the utterance. 188 * 189 * Frames may not be built. An initial start-up condition prevents 190 * the first few frames of audio from being used for frames, in this case 191 * this method returns zero to the caller. 192 ************************************************************************ 193 */ 194 195 196 int CA_GetFrontendFramesPerValidFrame(CA_Frontend *hFrontend); 197 int CA_GetFrontendSampleRate(CA_Frontend *hFrontend); 198 /** 199 * 200 * Params hFrontend Handle to valid front-end object 201 * 202 * Returns Current sample rate (Hz) 203 * 204 * See CA_ConfigureFrontend 205 * 206 ************************************************************************ 207 * Gets the sample rate from the front end object 208 ************************************************************************ 209 */ 210 211 212 int CA_GetFrontendUtteranceDimension(CA_Frontend *hFrontend); 213 /** 214 * 215 * Params hFrontend Handle to valid front-end object 216 * 217 * Returns The dimension of utterance that the front end will build 218 * 219 * See CA_InitUtteranceForFile 220 * CA_InitUtteranceForFrontend 221 * CA_LoadUtteranceFrame 222 * 223 ************************************************************************ 224 * Returns the number of items in an utterance. 225 ************************************************************************ 226 */ 227 228 229 int CA_GetRecognitionHoldoff(CA_FrontendInputParams *hFrontPar); 230 /** 231 * 232 * Params hFrontpar Handle to valid front-end input parameters object 233 * 234 * Returns The minimum recognition holdoff period, i.e. the minimum 235 * gap between the frontend and recognizer. 236 * 237 ************************************************************************ 238 * Computes the Recognition Holdoff Parameter value. Setting the par in 239 * a par file is unnecessary if this function is used. 240 ************************************************************************ 241 */ 242 243 244 /* 245 ** Channel normalization 246 */ 247ESR_ReturnCode CA_GetCMSParameters ( CA_Wave *hWave, LCHAR *param_string, size_t* len ); 248ESR_ReturnCode CA_SetCMSParameters ( CA_Wave *hWave, const LCHAR *param_string ); 249 250 251 void CA_ReLoadCMSParameters(CA_Wave *hWave, 252 const char *basename); 253 254 void CA_LoadCMSParameters(CA_Wave *hWave, 255 const char *basename, 256 CA_FrontendInputParams 257 *hFrontArgs); 258 /** 259 * 260 * Params hWave Handle to valid wave object 261 * basename Forename of .cmn and .tmn files that store the parameters 262 * hFrontPar Handle to a valid CRhFrontendInputParams 263 * 264 * Returns Nothing 265 * 266 * See CA_ConfigureCMSparameters 267 * CA_SaveCMSParameters 268 * CA_AttachCMStoUtterance 269 * 270 ************************************************************************ 271 * Loads CMS parameters from file. Sets up the CMS calculations 272 * The .cmn and .tmn files must obviously have the same basename. 273 ************************************************************************ 274 */ 275 276 277 void CA_SaveCMSParameters(CA_Wave *hWave, 278 const char *basename); 279 /** 280 * 281 * Params hWave Handle to valid wave object 282 * basename Forename of .cmn and .tmn files that are 283 * to store the parameters 284 * 285 * Returns Nothing 286 * 287 * See CA_LoadCMSParameters 288 * CA_ClearCMSParameters 289 * 290 ************************************************************************ 291 * This method writes out .CMN and .TMN files. 292 * 293 * The .CMN file may differ from the one used during a call to 294 * CA_LoadCMSParameters() due to channel adaptation. 295 * 296 * The .cmn and .tmn files will obviously have the same basename. 297 ************************************************************************ 298 */ 299 300 301 void CA_ClearCMSParameters(CA_Wave *hWave); 302 /** 303 * 304 * Params hWave Handle to valid wave object 305 * 306 * Returns Nothing 307 * 308 * See CA_LoadCMSParameters 309 * CA_SaveCMSParameters 310 * CA_DetachCMSfromUtterance 311 * 312 ************************************************************************ 313 * This method clears any CMS information. Must call 314 * CA_DetachCMSfromUtterance on the Wave first, if CA_AttachCMStoUtterance 315 * has been called. 316 ************************************************************************ 317 */ 318 319 void CA_AttachCMStoUtterance(CA_Wave *hWave, 320 CA_Utterance *hUtt); 321 /** 322 * 323 * Params hWave Handle to valid Wave structure 324 * hUtt Handle to an utterance object to clear 325 * 326 * Returns Nothing. 327 * 328 * See CA_LoadCMSParameters 329 * CA_DetachCMStoUtterance 330 * 331 ************************************************************************ 332 * The CMS data items are inherited from the CA_Wave object to the 333 * CA_Utterance. All calculations carried out with this utterance 334 * object will now result in new statistics being inherited by the 335 * CA_Wave object. 336 ************************************************************************ 337 */ 338 339 /** 340 * Returns true if CMS is attached to utterance. 341 * 342 * @param hWave wave handle 343 * @param isAttached [out] True if attached 344 */ 345 ESR_ReturnCode CA_IsCMSAttachedtoUtterance(CA_Wave* hWave, ESR_BOOL* isAttached); 346 347 /** 348 * Returns true if CA_Wave is configured for Agc. 349 * 350 * @param hWave wave handle 351 * @param isAttached [out] True if attached 352 */ 353 ESR_ReturnCode CA_IsConfiguredForAgc(CA_Wave* hWave, ESR_BOOL* isConfigured); 354 355 void CA_DetachCMSfromUtterance(CA_Wave *hWave, 356 CA_Utterance *hUtt); 357 /** 358 * 359 * Params hWave Handle to valid Wave structure 360 * hUtt Handle to an utterance object to clear 361 * 362 * Returns Nothing. 363 * 364 * See CA_LoadCMSParameters 365 * CA_AttachCMStoUtterance 366 * CA_ClearCMSParameters 367 * 368 ************************************************************************ 369 * The CMS data items are now dis-inherited by the CA_Utterance object. 370 * Calculations carried out with this utterance 371 * object will no longer result in new statistics being inherited by the 372 * CA_Wave object. 373 ************************************************************************ 374 */ 375 376 377 void CA_CalculateCMSParameters(CA_Wave *hWave); 378 /** 379 * 380 * Params hWave Handle to valid wave object 381 * 382 * Returns 383 * 384 * See CA_LoadCMSParameters 385 * CA_AttachCMStoUtterance 386 * CA_DiscardCMSAccumulates 387 * 388 ************************************************************************ 389 * This routine updates the values used for cepstrum mean subtraction 390 * using a running estimation algorithm. 391 * A call must first have been made to CA_LoadCMSparameters and 392 * subsequently to a CA_AttachCMStoUtterance. 393 ************************************************************************ 394 */ 395 396 397 void CA_DiscardCMSAccumulates(CA_Wave *hWave); 398 /** 399 * 400 * Params hWave Handle to valid wave object 401 * 402 * Returns 403 * 404 * See CA_LoadCMSParameters 405 * CA_AttachCMStoUtterance 406 * CA_CalculateCMSParameters 407 * 408 ************************************************************************ 409 * This routine clears the updates used for the running estimation of 410 * cepstrum mean subtraction. 411 * CMS parameters must have been loaded and attached to the wave. 412 ************************************************************************ 413 */ 414 415 416 417 /* 418 ** Wave 419 */ 420 /** 421 ************************************************************************ 422 * CA_Wave methods 423 * 424 * The wave-input object that represents a file or a device. 425 * It maintains sample buffers and data associated with that input stream 426 * such as agc, talk-over etc. 427 * 428 * However the process of getting samples into the CA_Wave object from 429 * a physical device is external to CREC-API. 430 ************************************************************************ 431 */ 432 433 CA_Wave* CA_AllocateWave(char typ); 434 /** 435 * 436 * Params typ A waveform type charcater 437 * 438 * Returns Handle to a new Wave structure 439 * 440 * See CA_FreeWave 441 * CA_ConfigureWave 442 * 443 ************************************************************************ 444 * Creates a Wave structure. 445 * 446 * There are several options for the 'typ' character, each is listed below: 447 * 'M' mu-Law 448 * 'P' PCM (i.e. 8k or 11kHz PCM Files) 449 * 'R' RIFF 450 * 'N' NIST 451 * 452 * Once allocated, the returned object should be configured with a call 453 * to CA_ConfigureWave(). 454 ************************************************************************ 455 */ 456 457 458 void CA_ConfigureWave(CA_Wave *hWave, 459 CA_Frontend *hFrontend); 460 /** 461 * 462 * Params hWave Handle to a previously created Wave structure 463 * hFrontend Handle to valid front-end object 464 * 465 * Returns void 466 * 467 * See CA_UnconfigureWave 468 * 469 ************************************************************************ 470 * Initializes a Wave structure. 471 * 472 * This should be called before any other Wave methods. 473 ************************************************************************ 474 */ 475 476 477 void CA_ConfigureVoicingAnalysis(CA_Wave *hWave, 478 CA_FrontendInputParams *hFrontPar); 479 /** 480 * 481 * Params hWave Handle to a previously created Wave structure 482 * hFrontPar Handle to a valid CRhFrontendInputParams 483 * 484 * Returns void 485 * 486 ************************************************************************ 487 * Initializes a Wave's voicin analysis module. 488 ************************************************************************ 489 */ 490 491 492 void CA_ResetWave(CA_Wave *hWave); 493 /** 494 * 495 * Params hWave Handle to a previously created Wave structure 496 * 497 * Returns Nothing 498 * 499 ************************************************************************ 500 * This prepares the wave object for re-use. The voicing information 501 * is cleared. It is *essential* to call this function if the Wave object 502 * is used for streaming live data, or multiple-utterance wave files. 503 * 504 ************************************************************************ 505 */ 506 507 508 void CA_UnconfigureWave(CA_Wave *hWave); 509 /** 510 * 511 * Params hWave Handle to a previously created Wave structure 512 * 513 * Returns void 514 * 515 * See CA_ConfigureWave 516 * 517 ************************************************************************ 518 * Uninitializes a Wave structure. 519 ************************************************************************ 520 */ 521 522 523 void CA_FreeWave(CA_Wave *hWave); 524 /** 525 * 526 * Params hWave Handle to a previously created Wave structure 527 * 528 * Returns Nothing, the Wave object is no longer valid 529 * 530 * See CA_AllocateWave 531 * 532 ************************************************************************ 533 * Removes a previously allocated Wave structure 534 ************************************************************************ 535 */ 536 537 538 int CA_OpenWaveFromFile(CA_Wave *hWave, 539 char* filename, 540 char typ, 541 int endian, 542 int do_write, 543 int samplerate); 544 /** 545 * 546 * Params hWave Handle to valid Wave structure 547 * filename ASCII, null-terminated filename string 548 * typ File attribute character 549 * endian Binary storage, use 'LITTLE' or 'BIG' 550 * do_write Adds a RIFF header if non-ZERO 551 * samplerate File's sample rate (Hz) 552 * 553 * Returns non-ZERO if successful 554 * 555 * See CA_CloseFile 556 * 557 ************************************************************************ 558 * Initializes the Wave structure for use with a known filename. 559 * 560 * There are several options for the 'typ' character, each is listed below: 561 * 'M' mu-Law Files 562 * 'P' PCM Files (i.e. 8k or 11kHz PCM Files) 563 * 'R' RIFF 564 * 'N' NIST 565 * 566 * It is an error to call this function without first configuring hWave 567 ************************************************************************ 568 */ 569 570 571 void CA_CloseFile(CA_Wave *hWave); 572 /** 573 * 574 * Params hWave Handle to valid Wave structure 575 * 576 * Returns Nothing, the opened file is closed 577 * 578 * See CA_OpenWaveFromFile 579 * 580 ************************************************************************ 581 * It is an error to call this function without first configuring hWave 582 ************************************************************************ 583 */ 584 585 586 int CA_OpenWaveFromDevice(CA_Wave *hWave, 587 int wave_type, 588 int samplerate, 589 int device_id, 590 int device_type); 591 /** 592 * 593 * Params hWave Handle to valid Wave structure 594 * wave_type Audio format 595 * samplerate Device sample rate (Hz) 596 * device_id The Physical device number of the 597 * waveform hardware (normally starting at 0) 598 * device_type The type of device 599 * 600 * Returns non-ZERO if successful 601 * 602 * See CA_CloseDevice 603 * 604 ************************************************************************ 605 * Initializes the Wave structure for use with a known filename. 606 * 607 * 'wave_type' should be either DEVICE_MULAW or DEVICE_RAW_PCM. This 608 * enables correct internal interpretation of the audio samples. If the 609 * device is an output device 'wave_type' should be 0 (ZERO). 610 * 611 * It is an error to call this function without first configuring hWave 612 * 613 * 'device_type' should be one of WAVE_DEVICE_MSWAVE (for real devices) 614 * or WAVE_DEVICE_RAW (if using the raw interface - CA_LoadSamples) 615 ************************************************************************ 616 */ 617 618 619 void CA_CloseDevice(CA_Wave *hWave); 620 /** 621 * 622 * Params hWave Handle to valid Wave structure 623 * 624 * Returns Nothing, the opened device is closed 625 * 626 * See CA_OpenWaveFromDevice 627 * 628 ************************************************************************ 629 * It is an error to call this function without first configuring hWave 630 ************************************************************************ 631 */ 632 633 634 void CA_SetWaveBoostValue(CA_Wave *hWave, 635 int waveBoost); 636 /** 637 * 638 * Params hWave Handle to valid Wave structure 639 * waveBoost The input sample scaling value (in %) 640 * 641 * Returns void 642 * 643 ************************************************************************ 644 * The 'offset' and 'gain' parameters are applied to the current 645 * waveform buffer and the resultant samples clamped to a 16-bit 646 * audio range. 647 * 648 * It is an error to call this function without first configuring hWave 649 ************************************************************************ 650 */ 651 652 653 int CA_GetWaveBoostValue(CA_Wave *hWave); 654 /** 655 * 656 * Params hWave Handle to valid Wave structure 657 * 658 * Returns The input sample scaling value (in %) 659 * 660 ************************************************************************ 661 * It is an error to call this function without first configuring hWave 662 ************************************************************************ 663 */ 664 665 666 int CA_GetSampleRate(CA_Wave *hWave); 667 /** 668 * 669 * Params hWave Handle to valid Wave structure 670 * 671 * Returns Sample rate used by the wave device 672 * 673 * See CA_LoadSamples 674 * CA_ConfigureWave 675 * 676 ************************************************************************ 677 * It is an error to call this function without first configuring hWave 678 ************************************************************************ 679 */ 680 681 682 void CA_CopyWaveSegment(CA_Wave *source, 683 CA_Wave *sink, 684 unsigned long offset, 685 unsigned long length); 686 /** 687 * 688 * Params source Handle to valid Wave structure for source 689 * sink Handle to valid Wave structure for destination 690 * offset Sample number starting the segment (first sample == 0) 691 * length Number of samples in the segment 692 * 693 * Returns Nothing, the wave segment in 'source' is copied to 'sink' 694 * 695 ************************************************************************ 696 * This is useful when copying selected sections of a waveform. It is 697 * employed within the SDXCollect_SinkWaveSegment() method. 698 * 699 * 'source' and 'sinks' must be different objects. 700 * 701 * It is an error to call this function without first configuring 702 * the 'source' and 'sink' wave objects. 703 ************************************************************************ 704 */ 705 706 707 int CA_GetBufferSize(CA_Wave *hWave); 708 /** 709 * 710 * Params hWave Handle to valid Wave structure 711 * 712 * Returns Buffer size (in bytes) used by the wave device for 713 * the construction of a single frame. 714 * 715 * See CA_LoadSamples 716 * CA_ConfigureWave 717 * 718 ************************************************************************ 719 * This function is supplied for use in conjunction with CA_LoadSamples. 720 * The application should call CA_CetBufferSIze on the current input Wave 721 * object and use the result to create the wave sample buffer that it will 722 * supply to CA_LoadSamples. 723 * 724 * It is an error to call this function without first configuring hWave 725 ************************************************************************ 726 */ 727 728 729#ifndef SWIGBUILD 730 int CA_LoadSamples(CA_Wave *hWave, 731 samdata *pPCMData, 732 int sampleCount); 733#else 734 int CA_LoadSamples(CA_Wave *hWave, 735 short *pPCMData, 736 int sampleCount); 737#endif 738 /** 739 * 740 * Params hWave Handle to valid Wave structure 741 * pPCMData Pointer to a buffer created by the application. 742 * sampleCount The number of samples in the supplied buffer. 743 * 744 * Returns Buffer size (in bytes) used by the wave device for 745 * the construction of a single frame. 746 * 747 * See CA_GetBufferSize 748 * CA_ConfigureWave 749 * 750 ************************************************************************ 751 * The buffer contains exactly enough wave data to make one frame of an 752 * utterance. The required buffer size can be got by calling CA_GetBufferSize. 753 * The application is responsible for ensuring that the supplied sample 754 * data is in the correct format. The sample rate should match that of the 755 * recognizer, and the sample size should be of size 16 bits. CA_LoadSamples 756 * will check the sample count, and report an error if it does not match 757 * the front end's required buffer size. 758 * 759 * It is an error to call this function without first configuring hWave 760 ************************************************************************ 761 */ 762 763 764 int CA_ReadSamplesForFrame(CA_Wave *hWave); 765 /** 766 * 767 * Params hWave Handle to valid Wave structure 768 * 769 * Returns The number of samples read; <0 on failure. 770 * 771 * See CA_SaveSamplesForFrame 772 * 773 ************************************************************************ 774 * It is an error to call this function without first configuring hWave 775 ************************************************************************ 776 */ 777 778 779 int CA_SaveSamplesForFrame(CA_Wave *hWave); 780 /** 781 * 782 * Params hWave Handle to valid Wave structure 783 * 784 * Returns The number of samples read; <0 on failure. 785 * 786 * See CA_ReadSamplesForFrame 787 * 788 ************************************************************************ 789 * It is an error to call this function without first configuring hWave 790 ************************************************************************ 791 */ 792 793 794 void CA_ConditionSamples(CA_Wave *hWave); 795 /** 796 * 797 * Params hWave Handle to valid Wave structure 798 * 799 * Returns Nothing. The incoming audio buffer is 'conditioned'. 800 * 801 ************************************************************************ 802 * The 'offset' and 'gain' parameters are applied to the current 803 * waveform buffer and the resultant samples clamped to a 16-bit 804 * audio range. 805 * 806 * It is an error to call this function without first configuring hWave 807 ************************************************************************ 808 */ 809 810 811 void CA_CopyWaveSamples(CA_Wave *hWaveIn, 812 CA_Wave *hWaveOut); 813 /** 814 * 815 * Params hWaveIn Handle to valid Wave object 816 * hWaveOut Handle to valid Wave object 817 * 818 * Returns The audio samples in the In channel are 819 * copied to the Out channel 820 * 821 ************************************************************************ 822 * This method is provided to permit incoming audio sample to be copied 823 * to the sink for file storage. The wave objects should have been 824 * created as appropriate sources or sinks. 825 * 826 * 'hWaveIn' and 'hWaveOut' must be different objects. 827 * 828 * It is an error to call this function without first configuring 829 * the 'hWaveIn' and 'hWaveOut' wave objects. 830 ************************************************************************ 831 */ 832 833 834 int CA_WaveIsOutput(CA_Wave *hWave); 835 /** 836 * 837 * Params hWave Handle to valid Wave structure 838 * 839 * Returns Boolean. 840 * 841 ************************************************************************ 842 * Returns true if the Wave is setup as a sink of data 843 * 844 * It is an error to call this function without first configuring hWave 845 * and setting it up as a device or a file 846 ************************************************************************ 847 */ 848 849 850 int CA_WaveIsInput(CA_Wave *hWave); 851 /** 852 * 853 * Params hWave Handle to valid Wave structure 854 * 855 * Returns Boolean. 856 * 857 ************************************************************************ 858 * Returns true if the Wave is setup as a source of data 859 * 860 * It is an error to call this function without first configuring hWave 861 * and setting it up as a device or a file 862 ************************************************************************ 863 */ 864 865 866 int CA_WaveIsADevice(CA_Wave *hWave); 867 /** 868 * 869 * Params hWave Handle to valid Wave structure 870 * 871 * Returns Boolean. 872 * 873 ************************************************************************ 874 * Returns true if the Wave is setup as a device 875 * 876 * It is an error to call this function without first configuring hWave 877 * and setting it up as a device or a file 878 ************************************************************************ 879 */ 880 881 882 int CA_WaveIsAFile(CA_Wave *hWave); 883 /** 884 * 885 * Params hWave Handle to valid Wave structure 886 * 887 * Returns Boolean. 888 * 889 ************************************************************************ 890 * Returns true if the Wave is setup as a file of data 891 * 892 * It is an error to call this function without first configuring hWave 893 * and setting it up as a device or a file 894 ************************************************************************ 895 */ 896 897 void CA_StartSigCheck(CA_Wave *hWave); 898 void CA_StopSigCheck(CA_Wave *hWave); 899 void CA_ResetSigCheck(CA_Wave *hWave); 900 void CA_GetSigStats(CA_Wave *hWave, int *nsam, int *pclowclip, int *pchighclip, 901 int *dc_offset, int *amp, int *pc5, int *pc95, 902 int *overflow); 903 ESR_BOOL CA_DoSignalCheck(CA_Wave *hWave, ESR_BOOL *clipping, ESR_BOOL *dcoffset, 904 ESR_BOOL *highnoise, ESR_BOOL *quietspeech, ESR_BOOL *too_few_samples, 905 ESR_BOOL *too_many_samples); 906 907 908 909 /* Frontend parameter API 910 */ 911 /** 912 ************************************************************************ 913 * CA_FrontendInputParams methods 914 * 915 * To load the front-end parameters from a par file 916 * 917 * This object holds input parameters (objtained from an ASCII 918 * parameter file) for the Front-End object. 919 * 920 * Apart from allocating and freeing the object it also has a method 921 * used to read a given parameter file. 922 ************************************************************************ 923 */ 924 925 926 927 CA_FrontendInputParams* CA_AllocateFrontendParameters(void); 928 /** 929 * 930 * Params void 931 * 932 * Returns Handle to new front-end input object 933 * 934 * See CA_FreeFrontendParameters 935 * CA_ConfigureFrontend 936 * 937 ************************************************************************ 938 * Creates a new front-end input paramater onject 939 ************************************************************************ 940 */ 941 942 943 void CA_LoadFrontendParameters(CA_FrontendInputParams* hFrontpar, 944 const char* parfile); 945 /** 946 * 947 * Params hFrontpar valid front-end input object handle 948 * parfile par file 949 * 950 * Returns void 951 * 952 * See CA_SaveFrontendParameters 953 * CA_ConfigureFrontend 954 * 955 ************************************************************************ 956 * Loads known front-end parameters from the given .PAR file. 957 * The file is a .par file 958 ************************************************************************ 959 */ 960 961 962 void CA_FreeFrontendParameters(CA_FrontendInputParams* hFrontpar); 963 /** 964 * 965 * Params hFrontpar valid front-end input object handle 966 * 967 * Returns void front-end object is no longer valid 968 * 969 * See CA_AllocateFrontendParameters 970 * 971 ************************************************************************ 972 * Removes a previously allocated parameter object 973 ************************************************************************ 974 */ 975 976 977 void CA_SaveFrontendParameters(CA_FrontendInputParams* hFrontpar, 978 const char* parfile); 979 /** 980 * 981 * Params hFrontpar valid front-end input object handle 982 * parfile parameter (.par) file to read 983 * 984 * Returns void 985 * 986 * See CA_LoadFrontendParameters 987 * CA_ConfigureFrontend 988 * 989 ************************************************************************ 990 * Saves a previously loaded (modified) parameter file 991 * 992 * It is an error to call this function without first loading 993 * front-end input parameters. 994 ************************************************************************ 995 */ 996 997 998 int CA_SetFrontendParameter(CA_FrontendInputParams *hFrontpar, 999 char *key, 1000 char *value); 1001 /** 1002 * 1003 * Params hFrontpar valid Front End Parameter handle 1004 * key parameter key (text label) 1005 * value new parameter value (text) 1006 * 1007 * Returns Zero on error 1008 * 1009 * See CA_GetFrontendStringParameter 1010 * CA_GetFrontendIntParameter 1011 * CA_GetFrontendFloatParameter 1012 * CA_LoadFrontendParameters 1013 * 1014 ************************************************************************ 1015 * Sets/Modifies a known Front End Input parameter. 1016 * 1017 * It is an error to call this function without first loading 1018 * front-end input parameters. 1019 ************************************************************************ 1020 */ 1021 1022 1023 int CA_GetFrontendParameter(CA_FrontendInputParams *hFrontpar, 1024 char *key, 1025 void *value); 1026 /** 1027 * 1028 * Params hFrontpar valid Front End Parameter handle 1029 * key parameter key (text label) 1030 * value pointer to store parameter value (text) 1031 * valueLen size of value buffer 1032 * 1033 * Returns False on error 1034 * 1035 * See CA_SetFrontendParameter 1036 * CA_LoadFrontendParameters 1037 * 1038 ************************************************************************ 1039 * Reads a known Front End Parameter. 1040 * 1041 * It is an error to call this function without first loading 1042 * front-end input parameters. 1043 ************************************************************************ 1044 */ 1045 1046 int CA_GetFrontendStringParameter(CA_FrontendInputParams *hFrontpar, 1047 char *key, 1048 char *value, 1049 int valueLen, 1050 int *bytes_required); 1051 /** 1052 * 1053 * Params hFrontpar valid Front End Parameter handle 1054 * key parameter key (text label) 1055 * value pointer to store parameter value 1056 * value_len number of bytes pointed to by value 1057 * bytes_required holds the number of bytes neededf to store the data 1058 * 1059 * Returns False on error 1060 * 1061 * See CA_SetFrontendParameter 1062 * CA_LoadFrontendParameters 1063 * 1064 ************************************************************************ 1065 * Reads a known Front End Parameter. 1066 * 1067 * It is an error to call this function without first loading 1068 * front-end input parameters. 1069 ************************************************************************ 1070 */ 1071 1072 int CA_LoadSpectrumFilter(CA_Frontend *hFrontend, char *basename); 1073 /** 1074 * 1075 * Params hFrontend valid Frontend handle 1076 * basename basename of filter file (a text file) 1077 * hFrontArs valid Frontend parameters handle 1078 * 1079 * Returns False on error 1080 * 1081 * See CA_SetFrontendParameter 1082 * CA_LoadFrontendParameters 1083 * 1084 ************************************************************************ 1085 * Loads a spectrum filter from a file. 1086 * 1087 * It is an error to call this function without first loading 1088 * front-end input parameters. 1089 ************************************************************************ 1090 */ 1091 1092 void CA_ClearSpectrumFilter(CA_Frontend *hFrontend); 1093 /** 1094 * 1095 * Params hFrontend valid Frontend handle 1096 * 1097 * Returns void 1098 * 1099 * See CA_LoadSpectrumFilter 1100 * 1101 ************************************************************************ 1102 * Clears a front end spectrum filter. 1103 * 1104 * It is an error to call this function without first loading 1105 * front-end input parameters. 1106 ************************************************************************ 1107 */ 1108 1109 int CA_IsSpectrumFilterLoaded(CA_Frontend *hFrontend); 1110 /** 1111 * 1112 * Params hFrontend valid Frontend handle 1113 * 1114 * Returns True if front end is loaded with a spectrum filter. 1115 * 1116 * See CA_LoadSpectrumFilter 1117 * 1118 ************************************************************************ 1119 * 1120 ************************************************************************ 1121 */ 1122 1123 void CA_EnableNonlinearFilter(CA_Frontend *hFrontend); 1124 void CA_DisableNonlinearFilter(CA_Frontend *hFrontend); 1125 void CA_EnableSpectrumFilter(CA_Frontend *hFrontend); 1126 void CA_DisableSpectrumFilter(CA_Frontend *hFrontend); 1127 1128#ifdef __cplusplus 1129} 1130#endif 1131 1132 1133#endif 1134