1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269
|
LIBDUMBTTS
Libdumbtts to biblioteka, rozszerzająca możliwości tzw. "głupich syntezatorów",
które potrafią jedynie wypowiedzieć podany na wejściu napis zawierający
wyłącznie znaki z alfabetu języka, którym operuje syntezator. Wzbogaca
możliwości syntezatora o:
1) tłumaczone nazwy klawiszy.
2) Wymawianie pojedynczych znaków. Rozpoznaje wszystkie znaki
z zakresu 0x20-0x17f.
W przypadku liter możliwe jest rozpoznawanie
wielkich liter zarówno poprzez poprzedzenie litery prefiksem 'wielka',
jak i zasygnalizowanie funkcji wywołującej że wymawiana jest wielka
litera (przydatne przede wszystkim, gdy poprzedzamy wielkie litery
ikona dźwiękową).
Akcentowane litery są wymawiane poprzez złożenie litery i nazwy akcentu
(np. 'č' dla języka polskiego może być wymawiane jak 'ce z haczkiem').
3) Konwersja wprowadzonego tekstu w kodowaniu UTF-8 do jednobajtowego
kodowania syntezatora. Wymowa wszystkich liter jest konfigurowalna
(np "maček" w języku polskim będzie wymawiane jako "maczek").
Zaimplementowane jest również prosta metoda transliteracji cyrylicy
(dla znaków z zakresu 0x400 - 0x47f).
Biblioteka zaprojektowana została do obsługi syntezatora Ivona i współpracy
ze speech-dispatcherem, jednak powinna być na tyle uniwersalna, aby
możliwe było generowanie tekstów dla dowolnego syntezatora.
FUNKCJE:
struct dumbtts_conf *dumbtts_TTSInit(char *lang);
Inicjalizuje strukturę dumbtts_conf oraz wczytuje plik
danych. Pliki danych znajduje się w /usr/share/dumbtts/xx.conf.
gdzie "xx" to dwuliterowy kod języka. Po wczytaniu tego pliku
funkcja próbuje znaleźć kolejno pliki /etc/dumbtts/xx.conf oraz
~/.dumbtts_xx.conf i koryguje wczytane uprzednio elementy.
Zwraca nowo przydzielony obszar pamięci, który nie może być
zwalniany przez free()!
void dumbtts_TTSFree(struct dumbtts_conf *conf);
Zwalnia pamięć przydzieloną przez dumbtts_TTSInit.
int dumbtts_WCharString(
struct dumbtts_conf *conf,
wchar_t wc,
char *outbuf,
int len,
int capMode,
int *isCap);
int dumbtts_CharString(
struct dumbtts_conf *conf,
char *ch,
char *outbuf,
int len,
int capMode,
int *isCap);
Literuje znak (w przypadku CharString pierwszy znak napisu).
Wynikowy napis umieszczany jest w obszarze wskazanym przez
parametr outbuf o wielkości co naajmniej len znaków.
Parametr capMode oznacza sposób oznaczania wielkich liter.
Może przyjmować jedną z trzech wartości:
0 - brak oznaczania wielkich liter
1 - oznaczenie wielkiej litery przez aplikację
2 - poprzedzenie wielkiej litery słowem "capital"
(lub odpowiednikiem dla konkretnego języka).
Aktualnie wartość 1 i 0 mają identyczne działanie.
Parametr isCap powinien zawierać wskaźnik do zmiennej typu int
lub NULL. Jeśli nie jest NULL, wartość zmiennej zostanie
ustawiona na 1 w przypadku wielkiej litery lub na 0 w przypadku
innego znaku.
Wartość zwracana:
Jeśli konwersja się powiodła, zwracane jest 0. Jeśli parametr
outbuf był NULL lub podana wielkość wskazanego obszaru jest zbyt
mała aby pomieścić skonwertowany napis, zwracana jest minimalna
potrzebna wielkość obszaru. W przypadku błędu zwracana jest
wartość ujemna.
int dumbtts_KeyString(
struct dumbtts_conf *conf,
char *str,
char *outbuf,
int len,
int capMode,
int *isCap);
Konwertuje nazwę klawisza (np "space", "underscore") zawarty w str
na wymawialny przez syntezator napis. Znaczenie parametrów i
wartość zwracana jak dla CharString.
int dumbtts_GetString(
struct dumbtts_conf *conf,
char *str,
char *outbuf,
int len,
int punctMode,
char *punctChars,
char *punctLeave);
Konwertuje podany w str napis na postać wymawialną przez syntezator.
Parametr punctMode może przyjąć jedną z trzech wartości:
0 - znaki interpunkcyjne są pomijane;
1 - czytane są wyłącznie znaki interpunkcyjne podane
w parametrze punctChars;
2 - czytane są wszystkie znaki interpunkcyjne.
Parametr punctLeave to napis składający się ze znaków, które
muszą być pozostawione w wynikowym napisie bez względu na
wartość punctMode - są to podstawowe znaki interpunkcyjne
sterujące wymową. Dla Ivony wartością napisu powinno być ".,!?;:"
Znaczenie parametrów outbuf i len oraz wartość zwracana
jak dla CharString.
PLIKI DANYCH
Plik podzielony jest na sekcje. Nazwa każdej sekcji ujęta jest w
nawiasy kwadratowe. Przy wczytywaniu rozpoznawane są pierwsze cztery litery
nazwy. Puste linie są pomijane. Komentarze rozpoczynają się od ciągu "//".
Pliki muszą być w kodowaniu UTF-8.
Pliki znajdujące się w /usr/share/dumbtts nie powinny być edytowane,
zamiast tego należy skopiować je do katalogu /etc/dumbtts i tam
nanieść konieczne poprawki.
Znaczenie sekcji:
SEKCJA [clist]
Zawiera deklarację wszystkich liter rozpoznawanych przez syntezator
w postaci:
#numer znak
gdzie "numer" jest reprezentacją danego znaku w kodowaniu używanym
przez syntezator, "znak" jest pojedynczą małą literą.
Przykładowo dla języka polskiego sekcja będzie miała postać:
[clist]
xB1 ą
xEA ę
xB6 ś
xE6 ć
xF1 ń
xF3 ó
xBC ź
xBF ż
xB3 ł
SEKCJA [spell]
Zawiera pary znak - nazwa używane przy wymawianiu pojedynczych znaków.
Znak może być zakodowany w notacji #numer (dziesiętnie) lub
#xnumer (szesnastkowo). Odczytany numer odpowiada kodowi znaku w UNICODE.
Przykład:
y igrek
Sekcja [pronunciation]
Zawiera tabele wymowy poszczególnych znaków przy czytaniu tekstów.
Przykłady:
ń ń
č cz
SEKCJA [diacritics]
Zawiera nazwy modyfikatorów oraz kilka słów zastrzeżonych.
ill nielegalny // nielegalny symbol itp.
let litera // przed literą czytaną numerycznie
cap wielkie // przed pojedynczą wielką literą
caplet wielka litera // przed wielką literą czytaną numerycznie
lig ligatura // przed ligaturą
caplig wielka ligatura // przed wielką ligaturą
sym znak // przed pozostałymi znakami czytanymi numerycznie
ced cedilla // cedilla
bre brewis // breve
dot z kropką // dot above
dia umlałt // diaeresis, umlaut
acu ostre // acute
gra ciężkie // grave
ac2 hungarumlałt // double acute
cir z daszkiem // circumflex
mac nadkreślone // macron
rin z kółkiem // ring above
str skreślone // stroke
ogo z ogonkiem // ogonek
til z tyldą // tilde
car z haczkiem // caron, hacek
SEKCJA [keys]
Zawiera pary nazwa - tłumaczenie przy odczytywaniu klawiszy.
Przykład:
space spacja
underscore podkreślenie
double-quotes cudzysłów
SEKCJA [cyrillic]
Zawiera pary znaki - transliteracja przy czytaniu cyrylicy.
"Znaki" to jedna lub dwie małe litery w cyrylicy, transliteracja
może być pusta.
SEKCJA [roman]
Zawiera konfigurację konwersji liczb rzymskich:
minlen <n>
minimalna długość liczby rzymskiej
maxval <n>
największa liczba interpretowana jako rzymska
ignore <zakresy>
te liczby nie będą interpretowane jako rzymskie.
<zakresy> to ciąg zapisów typu:
n1-n2 (wartości od n1 do n2 nie będą interpretowane
jako rzymskie)
nn (ta wartośc nie będzie interpretowana jako rzymska)
Liczby mogą być podawane w notacji rzymskiej lub arabskiej
Przykład:
ignore 100-200 300-1900 XL LX
ignore reset
niweluje działanie poprzednich linii "ignore" (przydatne we własnych
plikach konfiguracyjnych)
SEKCJA [dictionary]
Zawiera linie zawierające ścieżki do plików słownika:
path /ścieżka/do/słownika
(opisy słownika - todo)
SEKCJA [formats]
Zawiera formatowania czytania dat, godzin oraz liczb mianowanych
(todo)
Wszelkie sugestie i poprawki mile widziane.
Bohdan R. Rau <ethanak@polip.com>
|