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 picospho.h
18  *
19  * sentence phonemic/phonetic FSTs PU
20  *
21  * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
22  * All rights reserved.
23  *
24  * History:
25  * - 2009-04-20 -- initial version
26  *
27  */
28 
29 /** @addtogroup picospho
30 itemtype, iteminfo1, iteminfo2, content -> TYPE(INFO1,INFO2)content
31 in the following
32 
33 items input
34 ===========
35 
36 processed:
37 
38 - WORDPHON(POS,WACC)phon
39 
40 - BOUND(BOUNDstrength,BOUNDtype)
41 
42 
43 unprocessed:
44 - all other item types are forwared through the PU without modification
45 
46 
47 
48 - POS
49   a the single, unambiguous POS
50 
51 cf. picodata.h for
52 - WACC    (sentence-level accent (aka prominence))
53   PICODATA_ACC0
54   PICODATA_ACC1
55   PICODATA_ACC2  (<- maybe mapped to ACC1, ie. no ACC2 in output)
56   PICODATA_ACC3
57 
58 
59 - BOUNDstrength
60   PICODATA_ITEMINFO1_BOUND_SBEG (sentence start)
61   PICODATA_ITEMINFO1_BOUND_SEND (at sentence end)
62   PICODATA_ITEMINFO1_BOUND_TERM (replaces a flush)
63   PICODATA_ITEMINFO1_BOUND_PHR0 (no break)
64   PICODATA_ITEMINFO1_BOUND_PHR1 (primary boundary)
65   PICODATA_ITEMINFO1_BOUND_PHR2 (short break)
66   PICODATA_ITEMINFO1_BOUND_PHR3 (secondary phrase boundary, no break)
67 
68 - BOUNDtype    (actually phrase type of the following phrase)
69   PICODATA_ITEMINFO2_BOUNDTYPE_P (non-terminal phrase)
70   PICODATA_ITEMINFO2_BOUNDTYPE_T (terminal phrase)
71   PICODATA_ITEMINFO2_BOUNDTYPE_Q (question terminal phrase)
72   PICODATA_ITEMINFO2_BOUNDTYPE_E (exclamation terminal phrase)
73 
74 
75 output sequence (without CMDs):
76 
77 <output> = { BOUND(BOUND_SBEG,PHRASEtype) <sentence> BOUND(BOUND_SEND,..)} BOUND(BOUND_TERM,..)
78 
79 <sentence> =   <phrase> { BOUND(BOUND_PHR1|2|3,PHRASEtype) <phrase> }
80 
81 <phrase> = WORDPHON(POS,ACC)phon { WORDPHON(POS,ACC)phon }
82 
83 
84 
85 mapping ACC & word-level stress to syllable accent value
86 
87   ACC0 prim -> 0
88   ACC1 prim -> 1
89   ACC2 prim -> 2
90   ACC3 prim -> 3
91 
92   ACC0 sec  -> 0
93   ACC1 sec  -> 4
94   ACC2 sec  -> 4
95   ACC3 sec  -> 4
96 
97 Mapping of values to FST symbol id (has to identical to the symbol table used when compiling the FST)
98 
99 Value                   FST symbol id
100 phoneme_id      ->      phoneme_id     +  256 *  PICOKFST_PLANE_PHONEMES
101 POS_id          ->      POS_id         +  256 *  PICOKFST_PLANE_POS
102 phrasetype_id   ->      phrasetype_id  +  256 *  PICOKFST_PLANE_PHRASETYPES
103 accentlevel_id  ->      accentlevel_id +  256 *  PICOKFST_PLANE_ACCENTS
104 
105 
106 
107 
108 
109 
110 
111 minimal input size (before processing starts)
112 ==================
113 
114 processing (ie. sequencially applying spho transducers to phoneme sequence composed of
115             - phonemes inside WORDPHON items and
116             - pseudo-phonemes derived from boundaries and POS) is possible with
117 
118 - one phrase, consisting of a sequence of maximal 30 non-PUNC items
119   terminated by a PUNC item. A PUNC is artificially enforced if
120   needed to start processing.
121 
122 - as long as the internal buffer is empty, non-processed item types
123   can be processed immediately
124 
125 
126 
127 items output
128 ============
129 - BOUND(BOUNDstrength,BOUNDtype)
130 
131   bound strength may be changed by the fsts
132 
133   in addition, BOUNDs of BOUNDstrength = PHR0 are inserted to mark word boundaries
134 
135 - SYLLPHON(POS,ACC)phon
136   where POS is only set for the first syllable of a word, otherwise NA
137 
138 
139 
140 
141 
142 
143 other limitations
144 =================
145 
146 
147  */
148 #ifndef PICOSPHO_H_
149 #define PICOSPHO_H_
150 
151 #include "picoos.h"
152 #include "picodata.h"
153 #include "picorsrc.h"
154 
155 #ifdef __cplusplus
156 extern "C" {
157 #endif
158 #if 0
159 }
160 #endif
161 
162 
163 picodata_ProcessingUnit picospho_newSentPhoUnit(
164         picoos_MemoryManager mm,
165         picoos_Common common,
166         picodata_CharBuffer cbIn,
167         picodata_CharBuffer cbOut,
168         picorsrc_Voice voice);
169 
170 #ifdef __cplusplus
171 }
172 #endif
173 
174 
175 #endif /*PICOSPHO_H_*/
176