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