1b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* 2b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland 3b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 4b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Licensed under the Apache License, Version 2.0 (the "License"); 5b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * you may not use this file except in compliance with the License. 6b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * You may obtain a copy of the License at 7b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 8b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * http://www.apache.org/licenses/LICENSE-2.0 9b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 10b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Unless required by applicable law or agreed to in writing, software 11b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * distributed under the License is distributed on an "AS IS" BASIS, 12b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * See the License for the specific language governing permissions and 14b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * limitations under the License. 15b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 16b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 17b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @file picodata.h 18b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 19b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland 20b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * All rights reserved. 21b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 22b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * History: 23b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - 2009-04-20 -- initial version 24b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 25b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 26b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef PICODATA_H_ 27b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_H_ 28b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 29b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#include "picodefs.h" 30b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#include "picoos.h" 31b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#include "picotrns.h" 32b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#include "picokfst.h" 33b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#include "picorsrc.h" 34b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 35b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifdef __cplusplus 36b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenextern "C" { 37b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 38b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#if 0 39b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 40b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 41b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 42b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 43b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* *************************************************************** 44b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Constants * 45b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *****************************************************************/ 46b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 47b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_MAX_ITEMS_PER_PHRASE 30 48b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 49b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 50b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @addtogroup picodata 51b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * <b> Pico Data : Item Format </b>\n 52b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 53b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen The item header is identical for all item types and PUs. Item types 54b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen that are not handled by a PU are copied. 55b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 56b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Item Header structure\n 57b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen --------------------- 58b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - Byte Content 59b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - 0x00 item type 60b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - 0x01 item info 1 61b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - 0x02 item info 2 62b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - 0x03 item length in bytes (not including the header) 63b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 64b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen depending on the item type/info, a specific subheader may follow 65b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen (included in length) 66b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen*/ 67b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 68b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* item header fields (tmp.: use item functions below to acces header fields */ 69b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMIND_TYPE 0 70b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMIND_INFO1 1 71b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMIND_INFO2 2 72b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMIND_LEN 3 73b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 74b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* *************************************************************** 75b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * CharBuffer * 76b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *****************************************************************/ 77b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chentypedef struct picodata_char_buffer * picodata_CharBuffer; 78b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 79b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpicodata_CharBuffer picodata_newCharBuffer(picoos_MemoryManager mm, 80b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_Common common, picoos_objsize_t size); 81b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 82b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid picodata_disposeCharBuffer(picoos_MemoryManager mm, 83b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picodata_CharBuffer * this); 84b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 85b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* should not be used for PUs but only for feeding the initial cb */ 86b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpico_status_t picodata_cbPutCh(register picodata_CharBuffer this, picoos_char ch); 87b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 88b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* should not be used for PUs other than first PU in the chain (picotok) */ 89b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpicoos_int16 picodata_cbGetCh(register picodata_CharBuffer this); 90b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 91b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* reset cb (as if after newCharBuffer) */ 92b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpico_status_t picodata_cbReset (register picodata_CharBuffer this); 93b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 94b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* ** CharBuffer item functions, cf. below in items section ****/ 95b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 96b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* *************************************************************** 97b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * items * 98b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *****************************************************************/ 99b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 100b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* item header size */ 101b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEM_HEADSIZE 4 102b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 103b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chentypedef struct picodata_itemhead 104b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 105b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_uint8 type; 106b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_uint8 info1; 107b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_uint8 info2; 108b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_uint8 len; 109b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} picodata_itemhead_t; 110b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 111b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 112b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* -------------- System wide defines referred to by items -------- */ 113b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* ---- These maybe better stored in a knowledge module/resoruce*/ 114b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ACC0 '\x30' /* 48 '0' */ 115b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ACC1 '\x31' /* 49 '1' */ 116b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ACC2 '\x32' /* 50 '2' */ 117b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ACC3 '\x33' /* 51 '3' */ 118b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ACC4 '\x34' /* 52 '4' */ 119b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 120b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* reserved for future use: 121b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * user-imposed Part-Of-Speech ids for user lexica and phoneme tags 122b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * These values should be applied BEFORE POS-disambiguation. The POS lingware either assigns the same 123b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * ids to corresponding internal unique or composed POS or else the POS-D will consider these values 124b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * "default" */ 125b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_POS_XNPR 20 126b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_POS_XN 21 127b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_POS_XV 22 128b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_POS_XA 23 129b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_POS_XADV 24 130b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_POS_XX 25 131b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 132b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* ------------------------- item types ---------------------------- */ 133b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* new item types, info1, info2 to be defined during PU development */ 134b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* make sure this stays in sync with "is_valid_itemtype" function */ 135b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEM_WSEQ_GRAPH '\x73' /* 115, 's' */ 136b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEM_TOKEN '\x74' /* 116 't' */ 137b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEM_WORDGRAPH '\x67' /* 103 'g' */ 138b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEM_WORDINDEX '\x69' /* 105 'i' */ 139b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEM_WORDPHON '\x77' /* 119 'w' */ 140b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEM_SYLLPHON '\x79' /* 121 'y' */ 141b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEM_BOUND '\x62' /* 98 'b' */ 142b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* #define PICODATA_ITEM_BOUND_DUR '\x64' */ /* 100 'd' */ /* duration-constrained bound */ 143b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEM_PUNC '\x70' /* 112 'p' */ 144b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEM_CMD '\x63' /* 99 'c' */ 145b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEM_PHONE '\x68' /* 104 'h' */ /*reserved for PAM*/ 146b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEM_FRAME_PAR '\x6b' /* 107 'k' */ /*reserved for CEP*/ 147b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEM_FRAME '\x66' /* 102 'f' */ /*reserved for SIG*/ 148b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEM_OTHER '\x6f' /* 111 'o' */ 149b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEM_ERR '\x00' /* 0 '^@' */ 150b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 151b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* generic iteminfo1 */ 152b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_ERR '\x00' /* 0 '^@' */ /* error state */ 153b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_NA '\x01' /* 1 '^A' */ /* not applicable */ 154b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 155b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* generic iteminfo2 */ 156b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_ERR '\x00' /* 0 '^@' */ /* error state */ 157b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_NA '\x01' /* 1 '^A' */ /* not applicable */ 158b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 159b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* ------------------------- PUNC item type ---------------------------- */ 160b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* iteminfo1 */ 161b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_PUNC_SENTEND '\x73' /* 115 's' */ 162b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_PUNC_PHRASEEND '\x70' /* 112 'p' */ 163b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_PUNC_FLUSH '\x66' /* 102 'f' */ 164b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* iteminfo2 */ 165b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_PUNC_SENT_T '\x74' /* 116 't' */ 166b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_PUNC_SENT_Q '\x71' /* 113 'q' */ 167b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_PUNC_SENT_E '\x65' /* 101 'e' */ 168b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_PUNC_PHRASE '\x70' /* 112 'p' */ 169b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_PUNC_PHRASE_FORCED '\x66' /* 102 'f' */ 170b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* len for PUNC item is ALWAYS = 0 */ 171b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* ------------------------- BOUND item type ---------------------------- */ 172b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* iteminfo1 : phrase strength*/ 173b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_BOUND_SBEG '\x62' /* 98 'b', at sentence begin */ 174b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_BOUND_SEND '\x73' /* 115 's', at sentence end */ 175b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_BOUND_TERM '\x74' /* 116 't', replaces a flush */ 176b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_BOUND_PHR0 '\x30' /* 48 '0', no break, no item */ 177b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_BOUND_PHR1 '\x31' /* 49 '1', pri. phrase bound. */ 178b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_BOUND_PHR2 '\x32' /* 50 '2', short break */ 179b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_BOUND_PHR3 '\x33' /* 51 '3', sec. phr. bound., no break*/ 180b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* iteminfo2 : phrase type*/ 181b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_BOUNDTYPE_P '\x50' /* 80 'P' */ 182b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_BOUNDTYPE_T '\x54' /* 84 'T' */ 183b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_BOUNDTYPE_Q '\x51' /* 81 'Q' */ 184b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_BOUNDTYPE_E '\x45' /* 69 'E' */ 185b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* len for BOUND item is ALWAYS = 0 */ 186b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* ------------------------- CMD item type ---------------------------- */ 187b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* iteminfo1 */ 188b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_CMD_FLUSH 'f' /* 102 flush command (all PUs)*/ 189b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_CMD_PLAY 'p' /* 112 play command : PU in info 2 will read items from file-->Filename in item content.*/ 190b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_CMD_SAVE 's' /* 115 save command : PU in info 2 will save items to file-->Filename in item content.*/ 191b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_CMD_UNSAVE 'u' /* 117 save command : PU in info 2 will stop saving items to file*/ 192b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_CMD_PROSDOMAIN 'd' /* 100 prosody domain : domain type in info 2, domain name in item content */ 193b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_CMD_SPELL 'e' /* 101 spell command : info 2 contains start/stop info, 194b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen spell type/pause len as little endian uint16 in item content */ 195b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_CMD_IGNSIG 'i' /* ignore signal command : info 2 contains start/stop info */ 196b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_CMD_PHONEME 'o' /* phoneme command : info 2 contains start/stop info, phonemes in item content */ 197b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_CMD_IGNORE 'I' /* ignore text command : info 2 contains start/stop info */ 198b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_CMD_SIL 'z' /* silence command : info 2 contains type of silence; 199b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen silence duration as little endian uint16 in item content */ 200b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_CMD_CONTEXT 'c' /* context command : context name in item content */ 201b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_CMD_VOICE 'v' /* context command : voice name in item content */ 202b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_CMD_MARKER 'm' /* marker command : marker name in item content */ 203b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_CMD_PITCH 'P' /* 80 pitch command : abs/rel info in info 2; pitch level as little endian 204b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen uint16 in item content; relative value is in promille */ 205b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_CMD_SPEED 'R' /* 82 speed command : abs/rel info in info 2, speed level as little endian 206b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen uint16 in item content; elative value is in promille */ 207b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_CMD_VOLUME 'V' /* 86 volume command : abs/rel info in info 2, volume level as little endian 208b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen uint16 in item content; relative value is in promille */ 209b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_CMD_SPEAKER 'S' /* 83 speaker command : abs/rel info in info 2, speaker level as little endian 210b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen uint16 in item content; relative value is in promille */ 211b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 212b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* iteminfo2 for PLAY/SAVE */ 213b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_CMD_TO_TOK 't' /* CMD+PLAY/SAVE+TOKENISATION*/ 214b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_CMD_TO_PR 'g' /* CMD+PLAY/SAVE+PREPROC*/ 215b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_CMD_TO_WA 'w' /* CMD+PLAY/SAVE+WORDANA*/ 216b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_CMD_TO_SA 'a' /* CMD+PLAY/SAVE+SENTANA*/ 217b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_CMD_TO_ACPH 'h' /* CMD+PLAY/SAVE+ACCENTUATION&PHRASING*/ 218b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_CMD_TO_SPHO 'p' /* CMD+PLAY/SAVE+ACCENTUATION&PHRASING*/ 219b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_CMD_TO_PAM 'q' /* CMD+PLAY/SAVE+PHONETIC-ACOUSTIC MAPPING*/ 220b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_CMD_TO_CEP 'c' /* CMD+PLAY/SAVE+CEP_SMOOTHER*/ 221b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_CMD_TO_SIG 's' /* CMD+PLAY/SAVE+SIG_GEN */ 222b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 223b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#if 0 224b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_CMD_TO_FST 'f' /* CMD+PLAY/SAVE+FST for Syll and Phonotactic constraints*/ 225b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 226b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 227b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_CMD_TO_UNKNOWN 255 228b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 229b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* iteminfo2 for start/end commands */ 230b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_CMD_START 's' 231b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_CMD_END 'e' 232b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 233b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* iteminfo2 for speed/pitch/volume commands */ 234b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_CMD_ABSOLUTE 'a' 235b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO2_CMD_RELATIVE 'r' 236b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 237b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* len for CMD item could be >= 0 */ 238b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* ------------------------- TOKEN item type ---------------------------- */ 239b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* iteminfo1: simple token type : */ 240b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_TOKTYPE_SPACE 'W' 241b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_TOKTYPE_LETTERV 'V' 242b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_TOKTYPE_LETTER 'L' 243b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_TOKTYPE_DIGIT 'D' 244b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_TOKTYPE_SEQ 'S' 245b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_TOKTYPE_CHAR 'C' 246b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_TOKTYPE_BEGIN 'B' 247b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_TOKTYPE_END 'E' 248b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_TOKTYPE_UNDEFINED 'U' 249b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* iteminfo2 : token subtype */ 250b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* len for WORDTOK item is ALWAYS > 0, if len==0 an error should be raised */ 251b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 252b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 253b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @addtogroup picodata 254b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 255b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * ------------------------- WORDGRAPH item type ---------------------------- 256b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - iteminfo1 : POS and multi-POS values defined in lingware 257b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - iteminfo2 : not applicable 258b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - len for WORDGRAPH item is ALWAYS > 0, if len==0 an error should be raised 259b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * (currently picopr may produce empty WORDGRAPH that is eliminated by picowa) 260b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * \n------------------------- WORDINDEX item type ---------------------------- 261b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - iteminfo1 : POS and multi-POS values defined in lingware 262b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - iteminfo2 : not applicable 263b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - len for WORDINDEX item is ALWAYS > 0, if len==0 an error should be raised 264b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * \n------------------------- WORDPHON item type ---------------------------- 265b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - iteminfo1 : POS values defined in lingware 266b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - iteminfo2 : Uses PICODATA_ACC0 .. ACC4 267b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * -len WORDPHON item is ALWAYS > 0, if len==0 an error should be raised 268b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * \n------------------------- SYLLPHON item type ---------------------------- 269b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - iteminfo1 : not applicable 270b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - iteminfo2 : Uses PICODATA_ACC0 .. ACC4 271b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - len for SYLLPHON item is ALWAYS > 0, if len==0 an error should be raised 272b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * \n------------------------- PHONE item type (PRODUCED BY PAM)----------------- 273b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - iteminfo1 : phonId : the phonetic identity of the phone 274b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - iteminfo2 : n_S_P_Phone : number of states per phoneme 275b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - len for PHON item is ALWAYS > 0, if len==0 an error should be raised 276b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * \n------------------------- FRAME_PAR item type (PRODUCED BY CEP) -------- 277b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - iteminfo1 : format (float, fixed) 278b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - iteminfo2 : vector size 279b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - len for FRAME_PAR item is ALWAYS > 0, if len==0 an error should be raised 280b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * \n------------------------- FRAME item type (PRODUCED BY SIG) ----------- 281b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - iteminfo1 : number of samples per frame 282b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - iteminfo2 : number of bytes per sample 283b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - len for FRAME item is ALWAYS > 0, if len==0 an error should be raised 284b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 285b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 286b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_FRAME_PAR_DATA_FORMAT_FIXED '\x78' /* 120 'x' fixed point */ 287b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_ITEMINFO1_FRAME_PAR_DATA_FORMAT_FLOAT '\x66' /* 102 'f' floating point */ 288b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 289b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* *************************************************************** 290b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * items: CharBuffer functions * 291b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *****************************************************************/ 292b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 293b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* gets a single item (head and content) from a CharBuffer in buf; 294b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen blenmax is the max length (in number of bytes) of buf; blen is 295b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen set to the number of bytes gotten in buf; return values: 296b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_OK <- one item gotten 297b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EOF <- no item available, cb is empty 298b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EXC_BUF_UNDERFLOW <- cb not empty, but no valid item 299b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EXC_BUF_OVERFLOW <- buf not large enough 300b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen*/ 301b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpico_status_t picodata_cbGetItem(register picodata_CharBuffer this, 302b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_uint8 *buf, const picoos_uint16 blenmax, 303b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_uint16 *blen); 304b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 305b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* gets the speech data (without item head) from a CharBuffer in buf; 306b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen blenmax is the max length (in number of bytes) of buf; blen is 307b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen set to the number of bytes gotten in buf; return values: 308b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_OK <- speech data of one item gotten 309b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EOF <- no item available, cb is empty 310b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EXC_BUF_UNDERFLOW <- cb not empty, but no valid item 311b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EXC_BUF_OVERFLOW <- buf not large enough 312b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen*/ 313b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpico_status_t picodata_cbGetSpeechData(register picodata_CharBuffer this, 314b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_uint8 *buf, const picoos_uint16 blenmax, 315b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_uint16 *blen); 316b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 317b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* puts a single item (head and content) to a CharBuffer; clenmax is 318b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen the max length (in number of bytes) accessible in content; clen is 319b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen set to the number of bytes put from content; return values: 320b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_OK <- one item put 321b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EXC_BUF_UNDERFLOW <- no valid item in buf 322b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EXC_BUF_OVERFLOW <- cb not large enough 323b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen*/ 324b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpico_status_t picodata_cbPutItem(register picodata_CharBuffer this, 325b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen const picoos_uint8 *buf, const picoos_uint16 blenmax, 326b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_uint16 *blen); 327b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 328b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* unsafe, just for measuring purposes */ 329b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpicoos_uint8 picodata_cbGetFrontItemType(register picodata_CharBuffer this); 330b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 331b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* *************************************************************** 332b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * items: support function * 333b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *****************************************************************/ 334b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 335b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* checks, whether item of type 'ch' is a valid item type */ 336b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpicoos_uint8 is_valid_itemtype(const picoos_uint8 ch); 337b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 338b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* gets from buf a single item, values in head set and item content 339b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen copied to content; blenmax and clenmax are the max lengths (in 340b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen number of bytes) accessible in buf and content; clen is set to the 341b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen number of bytes gotten in content; return values: 342b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_OK <- all ok 343b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EXC_BUF_UNDERFLOW <- blenmax problem, or no valid item 344b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EXC_BUF_OVERFLOW <- overflow in content 345b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen*/ 346b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpico_status_t picodata_get_itemparts_nowarn( 347b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen const picoos_uint8 *buf, const picoos_uint16 blenmax, 348b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picodata_itemhead_t *head, picoos_uint8 *content, 349b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen const picoos_uint16 clenmax, picoos_uint16 *clen); 350b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 351b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* gets from buf a single item, values in head set and item content 352b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen copied to content; blenmax and clenmax are the max lengths (in 353b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen number of bytes) accessible in buf and content; clen is set to the 354b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen number of bytes gotten in content; return values: 355b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_OK <- all ok 356b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EXC_BUF_UNDERFLOW <- blenmax problem, or no valid item 357b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EXC_BUF_OVERFLOW <- overflow in content 358b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen*/ 359b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpico_status_t picodata_get_itemparts( 360b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen const picoos_uint8 *buf, const picoos_uint16 blenmax, 361b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picodata_itemhead_t *head, picoos_uint8 *content, 362b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen const picoos_uint16 clenmax, picoos_uint16 *clen); 363b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 364b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* puts a single item to buf; values in head and content copied to 365b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen buf; clenmax is the max length (in number of bytes) accessible in 366b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen content; blenmax is the max length (bytes) accessible in buf; blen 367b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen is set to the number of bytes put to buf; return values: 368b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_OK <- all ok 369b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EXC_BUF_UNDERFLOW <- clenmax problem, or no valid item 370b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EXC_BUF_OVERFLOW <- overflow in buf 371b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen*/ 372b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpico_status_t picodata_put_itemparts(const picodata_itemhead_t *head, 373b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen const picoos_uint8 *content, const picoos_uint16 clenmax, 374b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_uint8 *buf, const picoos_uint16 blenmax, picoos_uint16 *blen); 375b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 376b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* gets from buf info of a single item, values in head are set and 377b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen content is set to the start of content in buf (not copied!); 378b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen content is set to NULL if the content length is 0; blenmax is the 379b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen max lengths (in number of bytes) accessible in buf; return values: 380b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_OK <- all ok 381b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EXC_BUF_UNDERFLOW <- blenmax problem, or no valid item 382b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen*/ 383b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpico_status_t picodata_get_iteminfo( 384b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_uint8 *buf, const picoos_uint16 blenmax, 385b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picodata_itemhead_t *head, picoos_uint8 **content); 386b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 387b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* copies the item in inbuf to outbuf after first checking if there is 388b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a valid item in inbuf; inlenmax and outlenmax are the max length 389b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen (in number of byte) accessible in the buffers); in *numb the total 390b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen number of bytes copied to outbuf (incl. header) is returned; return 391b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen values: 392b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_OK <- item copied 393b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EXC_BUF_OVERFLOW <- overflow in outbuf 394b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_ERR_OTHER <- no valid item in inbuf 395b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen*/ 396b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpico_status_t picodata_copy_item(const picoos_uint8 *inbuf, 397b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen const picoos_uint16 inlenmax, picoos_uint8 *outbuf, 398b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen const picoos_uint16 outlenmax, picoos_uint16 *numb); 399b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 400b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* sets the info1 field in the header contained in the item in buf; 401b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return values: 402b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_OK <- all ok 403b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EXC_BUF_UNDERFLOW <- underflow in buf 404b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen*/ 405b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpico_status_t picodata_set_iteminfo1(picoos_uint8 *buf, 406b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen const picoos_uint16 blenmax, const picoos_uint8 info); 407b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 408b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* sets the info2 field in the header contained in the item in buf; 409b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return values: 410b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_OK <- all ok 411b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EXC_BUF_UNDERFLOW <- underflow in buf 412b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen*/ 413b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpico_status_t picodata_set_iteminfo2(picoos_uint8 *buf, 414b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen const picoos_uint16 blenmax, const picoos_uint8 info); 415b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 416b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* sets the len field in the header contained in the item in buf; 417b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return values: 418b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_OK <- all ok 419b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICO_EXC_BUF_UNDERFLOW <- underflow in buf 420b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen*/ 421b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpico_status_t picodata_set_itemlen(picoos_uint8 *buf, 422b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen const picoos_uint16 blenmax, const picoos_uint8 len); 423b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 424b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* check item validity and return TRUE if valid; return FALSE if 425b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen invalid; ilenmax is the max index to be used in item 426b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen*/ 427b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpicoos_uint8 picodata_is_valid_item(const picoos_uint8 *item, 428b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen const picoos_uint16 ilenmax); 429b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 430b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* return TRUE if head is a valid item head, FALSE otherwise */ 431b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpicoos_uint8 picodata_is_valid_itemhead(const picodata_itemhead_t *head); 432b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 433b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 434b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* *************************************************************** 435b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * ProcessingUnit * 436b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *****************************************************************/ 437b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* public */ 438b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 439b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_MAX_ITEMSIZE (picoos_uint16) (PICODATA_ITEM_HEADSIZE + 256) 440b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 441b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* different buffer sizes per processing unit */ 442b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_BUFSIZE_DEFAULT (picoos_uint16) PICODATA_MAX_ITEMSIZE 443b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_BUFSIZE_TEXT (picoos_uint16) 1 * PICODATA_BUFSIZE_DEFAULT 444b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_BUFSIZE_TOK (picoos_uint16) 2 * PICODATA_BUFSIZE_DEFAULT 445b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_BUFSIZE_PR (picoos_uint16) 2 * PICODATA_BUFSIZE_DEFAULT 446b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_BUFSIZE_WA (picoos_uint16) 2 * PICODATA_BUFSIZE_DEFAULT 447b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_BUFSIZE_SA (picoos_uint16) 2 * PICODATA_BUFSIZE_DEFAULT 448b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_BUFSIZE_ACPH (picoos_uint16) 2 * PICODATA_BUFSIZE_DEFAULT 449b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_BUFSIZE_SPHO (picoos_uint16) 4 * PICODATA_BUFSIZE_DEFAULT 450b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_BUFSIZE_PAM (picoos_uint16) 4 * PICODATA_BUFSIZE_DEFAULT 451b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_BUFSIZE_CEP (picoos_uint16) 16 * PICODATA_BUFSIZE_DEFAULT 452b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_BUFSIZE_SIG (picoos_uint16) 16 * PICODATA_BUFSIZE_DEFAULT 453b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_BUFSIZE_SINK (picoos_uint16) 1 * PICODATA_BUFSIZE_DEFAULT 454b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 455b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* different types of processing units */ 456b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chentypedef enum picodata_putype { 457b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICODATA_PUTYPE_TEXT, /* text */ 458b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICODATA_PUTYPE_TOK, /* tokenizer output */ 459b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICODATA_PUTYPE_PR, /* preprocessor output */ 460b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICODATA_PUTYPE_WA, /* word analysis */ 461b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICODATA_PUTYPE_SA, /* sentence analysis */ 462b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICODATA_PUTYPE_ACPH, /* accentuation and phrasing */ 463b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICODATA_PUTYPE_SPHO, /* sentence phonology (textana postproc) */ 464b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICODATA_PUTYPE_PAM, /* phonetics to acoustics mapper processing unit */ 465b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICODATA_PUTYPE_CEP, /* cepstral smoothing processing unit */ 466b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICODATA_PUTYPE_SIG, /* signal generation processing unit*/ 467b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICODATA_PUTYPE_SINK /* item sink unit*/ 468b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} picodata_putype_t; 469b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 470b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpicoos_uint16 picodata_get_default_buf_size (picodata_putype_t puType); 471b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 472b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* result values returned from the pu->puStep() methode */ 473b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chentypedef enum picodata_step_result { 474b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICODATA_PU_ERROR, 475b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* PICODATA_PU_EMPTY, *//* reserved (no internal data to be processed) */ 476b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICODATA_PU_IDLE, /* need more input to process internal data */ 477b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICODATA_PU_BUSY, /* processing internal data */ 478b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICODATA_PU_ATOMIC, /* same as pu_busy, but wants to get next time slot (while in an "atomar" operation) */ 479b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICODATA_PU_OUT_FULL /* can't proceed because output is full. (next time slot to be assigned to pu's output's consumer) */ 480b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} picodata_step_result_t; 481b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 482b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chentypedef struct picodata_processing_unit * picodata_ProcessingUnit; 483b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 484b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpicodata_ProcessingUnit picodata_newProcessingUnit( 485b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_MemoryManager mm, 486b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_Common common, 487b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picodata_CharBuffer cbIn, 488b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picodata_CharBuffer cbOut, 489b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picorsrc_Voice voice); 490b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 491b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid picodata_disposeProcessingUnit( 492b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_MemoryManager mm, 493b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picodata_ProcessingUnit * this); 494b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 495b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpicodata_CharBuffer picodata_getCbIn(picodata_ProcessingUnit this); 496b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpicodata_CharBuffer picodata_getCbOut(picodata_ProcessingUnit this); 497b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpico_status_t picodata_setCbIn(picodata_ProcessingUnit this, picodata_CharBuffer cbIn); 498b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpico_status_t picodata_setCbOut(picodata_ProcessingUnit this, picodata_CharBuffer cbOut); 499b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 500b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* protected */ 5017bc39b0d41efe0d8733490d54e14bc392d9f0b6dJean-Michel Trivitypedef pico_status_t (* picodata_puInitializeMethod) (register picodata_ProcessingUnit this, picoos_int32 mode); 502b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chentypedef pico_status_t (* picodata_puTerminateMethod) (register picodata_ProcessingUnit this); 503b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chentypedef picodata_step_result_t (* picodata_puStepMethod) (register picodata_ProcessingUnit this, picoos_int16 mode, picoos_uint16 * numBytesOutput); 504b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chentypedef pico_status_t (* picodata_puSubDeallocateMethod) (register picodata_ProcessingUnit this, picoos_MemoryManager mm); 505b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 506b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chentypedef struct picodata_processing_unit 507b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 508b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* public */ 509b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picodata_puInitializeMethod initialize; 510b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picodata_puStepMethod step; 511b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picodata_puTerminateMethod terminate; 512b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picorsrc_Voice voice; 513b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 514b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* protected */ 515b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_Common common; 516b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picodata_CharBuffer cbIn, cbOut; 517b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picodata_puSubDeallocateMethod subDeallocate; 518b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen void * subObj; 519b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 520b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} picodata_processing_unit_t; 521b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 522b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* currently, only wav input and output is supported */ 523b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_TEXT_OUTPUT_EXTENSION (picoos_uchar*)".txt" 524b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_TOK_INPUT_EXTENSION PICODATA_PUTYPE_TEXT_OUTPUT_EXTENSION 525b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_TOK_OUTPUT_EXTENSION (picoos_uchar*)".tok" 526b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_PR_INPUT_EXTENSION PICODATA_PUTYPE_TOK_OUTPUT_EXTENSION 527b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_PR_OUTPUT_EXTENSION (picoos_uchar*)".pr" 528b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_WA_INPUT_EXTENSION PICODATA_PUTYPE_PR_OUTPUT_EXTENSION 529b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_WA_OUTPUT_EXTENSION (picoos_uchar*)".wa" 530b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_SA_INPUT_EXTENSION PICODATA_PUTYPE_WA_OUTPUT_EXTENSION 531b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_SA_OUTPUT_EXTENSION (picoos_uchar*)".sa" 532b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_ACPH_INPUT_EXTENSION PICODATA_PUTYPE_SA_OUTPUT_EXTENSION 533b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_ACPH_OUTPUT_EXTENSION (picoos_uchar*)".acph" 534b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_SPHO_INPUT_EXTENSION PICODATA_PUTYPE_ACPH_OUTPUT_EXTENSION 535b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_SPHO_OUTPUT_EXTENSION (picoos_uchar*)".spho" 536b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_PAM_INPUT_EXTENSION PICODATA_PUTYPE_SPHO_OUTPUT_EXTENSION 537b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_PAM_OUTPUT_EXTENSION (picoos_uchar*)".pam" 538b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_CEP_INPUT_EXTENSION PICODATA_PUTYPE_PAM_OUTPUT_EXTENSION 539b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_CEP_OUTPUT_EXTENSION (picoos_uchar*)".cep" 540b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_SIG_INPUT_EXTENSION PICODATA_PUTYPE_CEP_OUTPUT_EXTENSION /*PP 11.7.08*/ 541b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_SIG_OUTPUT_EXTENSION (picoos_uchar*)".sig" 542b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_SINK_INPUT_EXTENSION PICODATA_PUTYPE_SIG_OUTPUT_EXTENSION 543b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 544b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/*wav input is for play wav files in sig */ 545b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_WAV_INPUT_EXTENSION (picoos_uchar*)".wav" /*PP 11.7.08*/ 546b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 547b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/*wav output is for saving wav (binary) files in sig*/ 548b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PUTYPE_WAV_OUTPUT_EXTENSION (picoos_uchar*)".wav" /*PP 14.7.08*/ 549b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 550b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* *************************************************************** 551b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * auxiliary routines * 552b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *****************************************************************/ 553b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 554b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpicoos_uint8 picodata_getPuTypeFromExtension(picoos_uchar * filename, picoos_bool input); 555b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 556b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_XSAMPA (picoos_uchar *)"xsampa" 557b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_SAMPA (picoos_uchar *)"sampa" 558b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_SVOXPA (picoos_uchar *)"svoxpa" 559b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 560b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/*----------------------------------------------------------*/ 561b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** @brief maps an input phone string to its internal representation 562b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 563b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param transducer initialized SimpleTransducer 564b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param xsampa_parser fst converting xsampa char input to xsampa ids 565b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param svoxpa_parser 566b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param xsampa2svoxpa_mapper 567b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param inputPhones input phone string in alphabet 'alphabet' 568b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param alphabet input alphabet 569b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @retval outputPhoneIds output phone string in internal representation 570b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param maxOutputPhoneIds 571b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return PICO_OK=mapping done, PICO_ERR_OTHER:unknown alphabet, unknown phones 572b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 573b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/*---------------------------------------------------------*/ 574b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpico_status_t picodata_mapPAStrToPAIds( 575b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picotrns_SimpleTransducer transducer, 576b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_Common common, 577b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picokfst_FST xsampa_parser, 578b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picokfst_FST svoxpa_parser, 579b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picokfst_FST xsampa2svoxpa_mapper, 580b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_uchar * inputPhones, 581b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_uchar * alphabet, 582b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_uint8 * outputPhoneIds, 583b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 maxOutputPhoneIds); 584b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 585b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* number of binary digits after the comma for fixed-point calculation */ 586b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PRECISION 10 587b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* constant 0.5 in PICODATA_PRECISION */ 588b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_PREC_HALF 512 589b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 590b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid picodata_transformDurations( 591b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_uint8 frame_duration_exp, 592b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int8 array_length, 593b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_uint8 * inout, 594b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen const picoos_uint16 * weight, /* integer weights */ 595b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 mintarget, /* minimum target duration in ms */ 596b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 maxtarget, /* maximum target duration in ms */ 597b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 facttarget, /* factor to be multiplied with original length to get the target 598b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen the factor is fixed-point with precision PRECISION, i.e. 599b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen the factor as float would be facttarget / PRECISION_FACT 600b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if factor is 0, only min/max are considered */ 601b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 * dur_rest /* in/out, rest in ms */ 602b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ); 603b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 604b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 605b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 606b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* *************************************************************** 607b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * For Debugging only * 608b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *****************************************************************/ 609b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 610b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#if defined (PICO_DEBUG) 611b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 612b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* convert (pretty print) item head 'head' and put output in 'str', 613b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen strsize is the maximum length of 'str' in bytes */ 614b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpicoos_char * picodata_head_to_string(const picodata_itemhead_t *head, 615b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_char * str, picoos_uint16 strsize); 616b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 617b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* put 'pref6ch' (max. 6 char prefix) and a pretty print output of 618b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 'item' in 'str', strlenmax is the maximum length of 'str' in 619b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen bytes */ 620b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid picodata_info_item(const picoknow_KnowledgeBase kb, 621b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen const picoos_uint8 *pref6ch, 622b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen const picoos_uint8 *item, 623b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen const picoos_uint16 itemlenmax, 624b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen const picoos_char *filterfn); 625b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 626b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 627b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_INFO_ITEM(kb, pref, item, itemlenmax) \ 628b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICODBG_INFO_CTX(); \ 629b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picodata_info_item(kb, pref, item, itemlenmax, (picoos_char *)__FILE__) 630b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 631b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 632b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 633b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#else 634b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 635b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODATA_INFO_ITEM(kb, pref, item, itemlenmax) 636b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 637b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 638b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 639b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifdef __cplusplus 640b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 641b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 642b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 643b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif /*PICODATA_H_*/ 644