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 picoacph.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 
27 
28 /**
29  * @addtogroup picoacph
30  *
31 itemtype, iteminfo1, iteminfo2, content -> TYPE(INFO1,INFO2)content
32 in the following
33 
34 items input
35 ===========
36 
37 processed by sa (POS disambiguation):
38 - WORDGRAPH(POSes,NA)graph
39 - WORDINDEX(POSes,NA)POS|1ind1...POSN|indN
40 - CMD(PICODATA_ITEMINFO1_CMD_FLUSH,PICODATA_ITEMINFO2_NA)
41 
42 processed by sa (Phrasing, Accentuation):
43 - PUNC(PUNCtype,PUNCsubtype)
44 
45 unprocessed:
46 - all other item types are forwarded through the PU without modification:
47   CMD
48 
49 
50 minimal input size (before processing starts)
51 ==================
52 
53 processing (POS disambiguation, g2p, lexind, phrasing, accentuation)
54 is possible with
55 
56 - one punctuation-phrase, consisting of a sequence (see below for
57   limits) of items terminated by a PUNC item.
58 
59 (possible but not implemented: as long as the internal buffer is
60 empty, non-processed item types can be processed immediately)
61 
62 Ensuring terminal PUNC item:
63 - when reading items from the external buffer a CMD(...FLUSH...) is
64   converted to a PUNC(...FLUSH...) item
65 - If needed, a PUNC(PHRASE) is artificially added to ensure a phrase
66   fits in the PUs memory and processing can start.
67 
68 
69 items processed and output
70 ==========================
71 
72 precondition:
73 CMD(...FLUSH...) already converted to PUNC(...FLUSH...) and trailing
74 PUNC item enforced if necessary.
75 
76 ----
77 -# PROCESS_POSD: processing input WORDGRAPH or WORDINDEX items, after
78 POS disambiguation (POSes -> POS), results in a sequence of:
79   -
80   - WORDGRAPH(POS,NA)graph
81   - WORDINDEX(POS,NA)POS|ind
82   -
83   .
84 -# PROCESS_WPHO: then, after lex-index lookup and G2P in a
85 sequence of:
86   - WORDPHON(POS,NA)phon
87 
88 (phon containing primary and secondary word-level stress)
89 
90 ----
91 3. PROCESS_PHR: then, after processing these WORDPHON items,
92 together with the trailing PUNC item results in:
93 
94 -> BOUND(BOUNDstrength,BOUNDtype)
95 
96 being added in the sequence of WORDPHON (respectively inserted instead
97 of the PUNC). All PUNC, incl PUNC(...FLUSH...) now gone.
98 
99 ----
100 4. PROCESS_ACC: then, after processing the WORDPHON and BOUND items
101 results in:
102 
103 -> WORDPHON(POS,ACC)phon
104 
105 A postprocessing step of accentuation is hard-coded in the
106 accentuation module: In case the whole word does not have any stress
107 at all (primary or secondary or both) then do the following mapping:
108 
109   ACC0 nostress -> ACC0
110   ACC1 nostress -> ACC3
111   ACC2 nostress -> ACC3
112   ACC3 nostress -> ACC3
113 
114 ----
115 - POS
116   a single, unambiguous POS
117 
118 cf. picodata.h for
119 - ACC    (sentence-level accent (aka prominence)) %d
120   - PICODATA_ACC0
121   - PICODATA_ACC1
122   - PICODATA_ACC2  (<- maybe mapped to ACC1, ie. no ACC2 in output)
123   - PICODATA_ACC3
124 
125 - BOUNDstrength %d
126   - PICODATA_ITEMINFO1_BOUND_SBEG (at sentence start)
127   - PICODATA_ITEMINFO1_BOUND_SEND (at sentence end)
128   - PICODATA_ITEMINFO1_BOUND_TERM (replaces a flush)
129   - PICODATA_ITEMINFO1_BOUND_PHR1 (primary boundary)
130   - PICODATA_ITEMINFO1_BOUND_PHR2 (short break)
131   - PICODATA_ITEMINFO1_BOUND_PHR3 (secondary phrase boundary, no break)
132   - PICODATA_ITEMINFO1_BOUND_PHR0 (no break, not produced by sa, not existing
133           BOUND in item sequence equals PHR0 bound strength)
134 
135 - BOUNDtype    (created in sa base on punctuation, indicates type of phrase
136                 following the boundary) %d
137   - PICODATA_ITEMINFO2_BOUNDTYPE_P
138   - PICODATA_ITEMINFO2_BOUNDTYPE_T
139   - PICODATA_ITEMINFO2_BOUNDTYPE_Q
140   - PICODATA_ITEMINFO2_BOUNDTYPE_E
141 
142 
143 output sequence (without CMDs):
144 
145 <output> = { BOUND(BOUND_SBEG,PHRASEtype) <sentence> BOUND(BOUND_SEND,..)} BOUND(BOUND_TERM,..)
146 
147 <sentence> =   <phrase> { BOUND(BOUND_PHR1|2|3,BOUNDtype) <phrase> }
148 
149 <phrase> = WORDPHON(POS,ACC)phon { WORDPHON(POS,ACC)phon }
150 
151 Done in later PU: mapping ACC & word-level stress to syllable accent value
152   - ACC0 prim -> 0
153   - ACC1 prim -> 1
154   - ACC2 prim -> 2
155   - ACC3 prim -> 3
156   - ACC0 sec  -> 0
157   - ACC1 sec  -> 4
158   - ACC2 sec  -> 4
159   - ACC3 sec  -> 4
160 
161 other limitations
162 =================
163 
164 - item size: header plus len=256 (valid for Pico in general)
165 - see defines below for max nr of items. Item heads plus ref. to contents
166   buffer are stored in array with fixed size elements. Two restrictions:
167   - MAXNR_HEADX (max nr elements==items in headx array)
168   - CONTENTSSIZE (max size of all contents together
169  */
170 
171 
172 #ifndef PICOACPH_H_
173 #define PICOACPH_H_
174 
175 #include "picoos.h"
176 #include "picodata.h"
177 #include "picorsrc.h"
178 
179 #ifdef __cplusplus
180 extern "C" {
181 #endif
182 #if 0
183 }
184 #endif
185 
186 /* nr item restriction: maximum number of extended item heads in headx */
187 #define PICOACPH_MAXNR_HEADX    60
188 
189 /* nr item restriction: maximum size of all item contents together in cont */
190 #define PICOACPH_MAXSIZE_CBUF 7680
191 
192 
193 
194 picodata_ProcessingUnit picoacph_newAccPhrUnit(
195         picoos_MemoryManager mm,
196         picoos_Common common,
197         picodata_CharBuffer cbIn,
198         picodata_CharBuffer cbOut,
199         picorsrc_Voice voice);
200 
201 #ifdef __cplusplus
202 }
203 #endif
204 
205 #endif /*PICOACPH_H_*/
206