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