Logo Search packages:      
Sourcecode: festival-czech version File versions  Download package

README.Festival.cs

Stručný popis převodu textu do zvukové podoby ve Festivalu
==========================================================

Celý proces řečové syntézy Festivalu je velmi podrobně popsán v dokumentu
Building Synthetic Voices, který je k mání na www.festvox.org a lze jej
doporučit každému, kdo chce festivalové mechanismy pochopit do dostatečné
hloubky.  Další informace jsou pak k dispozici v manuálu Festivalu, ty jsou
však v určitých směrech neúplné a bez výše uvedeného dokumentu se při
serióznější práci na novém festivalovém jazyce a/nebo hlasu nelze obejít.

Tento dokument je stručným popisem syntézy a dostupných nástrojů pro ty, kdo
potřebují získat základní orientaci v procesu festivalové syntézy a přitom
nemají čas anebo zájem se věnovat zdlouhavému a podrobnému studiu výše
uvedených dokumentů.  Nejedná se o *uživatelský* úvod do Festivalu, znalost
uživatelské práce s Festivalem je předpokládána.

Konkrétní postupy použité pro češtinu jsou popsány ve zdrojovém kódu
festival-czech (technické informace) a v souboru README.Czech.cs (jazykové
informace).


* Základní principy Festivalu

Festival je systém modulární a celý proces se skládá z provedení libovolné
sekvence modulů.  Každý modul má svůj účel a pro některé části zpracování si
lze vybrat z více alternativních modulů.  Lze též použít libovolné moduly
vlastní.

Moduly se obvykle píšou ve schemovém programovacím jazyce Festivalu zvaném
SIOD.  Tento jazyk je popsán v manuálu Festivalu.


* Fáze zpracování

Zpracování textu se standardně skládá z následujících fází, definovaných
v synthesis.scm:

(defUttType Text
  (Initialize utt)
  (Text utt)
  (Token_POS utt)
  (Token utt)
  (POS utt)
  (Phrasify utt)
  (Word utt)
  (Pauses utt)
  (Intonation utt)
  (PostLex utt)
  (Duration utt)
  (Int_Targets utt)
  (Wave_Synth utt)
  )

Vše se točí okolo tzv. utterance, které představuje jakousi jednotku, více či
méně anotovanou, kterou lze postupným doplňováním anotací (*features*) dostat
až do stavu, kdy je schopna odeslání na zvukový výstup.  Každá z výše uvedených
fází je volání funkce na utterance `utt'.


* Práce s utterance

Potřebujete-li provést syntézu určitého textu, vytvoříte si příslušné utterance
například následujícím způsobem:

  (Utterance Text "nějaký text")

Funkce vrátí nezpracované utterance, které lze nechat plně zanalyzovat voláním
funkce `utt.synth'.  Pozor, ve festivalovém řádkovém rozhraní nelze zadávat
8-bitové znaky, v případě potřeby je nutno syntézu provést přes soubor.

Utterance se skládá z tzv. relací, jejichž jména lze zjistit pomocí

  (utt.relationnames utterance)

Obsah (seznam položek, items) žádané relace se vytáhne pomocí

  (utt.relation.items utterance 'relation-name)

Mnohé položky se vyskytují ve více relacích.  Relace má obecně podobu stromu a
prostřednictvím položek mohou být tyto stromy vzájemně provázány.  Relace
položky lze zjistit pomocí

  (item.relations item)

Základními vlastnostmi položky jsou její jméno a rysy:

  (item.name item)

Rysy položky lze zjistit pomocí

  (item.features item)

Lze si vyzkoušet:

  (mapcar item.features (utt.relation.items utterance 'Word))

Pro vypsání relace je přehlednější výstup z

  (utt.relation.print utterance 'Word)

Lze též použít

  (utt.relation_tree utt 'SylStructure)

Funkce utt.relation_tree vrací kompletnější informaci o dané relaci, obsahuje
celý strom dat obsažených v relaci, zatímco utt.relation.print vypisuje pouze
prvky nejvyšší úrovně.

Občas narážíme na pojem globálního parametru.  Hodnotu globálního parametru lze
získat voláním

  (Param.get 'jméno-parametru)


* Stručný popis fází zpracování

** Initialize

Jen vytvoří prázdné utterance.

** Text

Provede rozdělení textu na tokeny.  Funkce `Text' je napsána v C++, využívá
však proměnné `token.*' definované v token.scm.

Definovaná interpunkční znaménka jsou oddělena od výsledných tokenů a jsou
dostupná jako jejich features.

** Token_POS

Provádí, je-li třeba, kontextové označkování tokenu pro rozlišení různého
významu shodných tokenů.  Tato fáze slouží pro určení správné výslovnosti slov
ve fázi bezprostředně následující, pozdější fáze POS má účel jiný.

** Token

Převádí tokeny na slova.  Převod lze provést definicí funkce token_to_words.
Při konverzi tokenu je možno se podívat na okolní tokeny (nebo lépe využívat
kontextových informací získaných ve fázi Token_POS), takže je možno provádět
i sofistikovanější operace než pouhé mapování jediného tokenu na jedno nebo
více slov.

** POS (POS == Part of Speech)

Provádí tagování konkrétních slov dle jejich pozice v řeči.  Nepovinná část.
Parametrizovatelné pomocí několika proměnných.  Tato fáze, na rozdíl od fáze
Token_POS, určuje význam jednotlivých slov již nikoliv pro určení výslovnosti
slov, nýbrž pro určení jejich role ve vztahu k následnému určení prozodie,
tj. pauz, délek, přízvuku a intonace.

** Phrasify

Identifikace pauz (žádná, normální, dlouhá) mezi slovy.  Mezi většinu slov se
nevkládá žádná pauza, vkládá se za interpunkci, někdy krátká (po čárce), někdy
dlouhá (konec věty).  Tato funkce sama o sobě pauzy nevkládá, to se děje až na
základě jí generovaných informací v Pauses.

** Word

Provádí převod slov na fonémy a slabiky v implicitním festivalovém formátu.
Definováno v lexicon.scm, není-li globálním parametrem Word_Method řečeno
jinak, volá se C++ funkce Classic_Word.

Celý process je poměrně podrobně popsán v dokumentaci, sekce Lexicons.

** Pauses

Vkládá pauzy.  Pro tuto akci se používá funkce definovaná globálním parametrem
Pause_Method.  Implicitní je funkce Classic_Pauses, definovaná v pauses.scm.
Funkce dělá v zásadě to, že vloží počáteční pauzu a pak vloží pauzy dle
informací vytvořených ve fázi Phrasify.  Navíc vyřadí z utterance slova
označená jako interpunkce.

Vkládání úvodní pauzy lze odrušit předefinováním funkce insert_initial_space,
nemělo by se to však dít v jiných než odůvodněných případech, jinak tím utrpí
výsledná kvalita syntézy.

** Intonation

Generuje akcenty pro intonaci (první fáze zpracování intonace), ale nevytváří
ještě intonaci samotnou (druhá fáze zpracování intonace), to dělá až
Int_Targets.  Používá se funkce definovaná globálním parametrem Int_Method.

** PostLex

V této fázi lze aplikovat jakékoliv dodatečné transformace nad utterance,
zařazené v seznamu postlex_rules_hooks.

** Duration

Určí délky trvání jednotlivých segmentů (fonémů) syntetizovaného textu.

** Int_Targets

Určí parametry intonační křivky, obvykle po slabikách.

** Wave_Synth

Samotné sestavení zvuku na základě již všech dostupných anotací.  Funkce, která
se pro syntézu zavolá, je definována globálním parametrem `Synth_Method'.
Kostra funkce Wave_Synth je napsána ve Scheme a nachází se v synthesis.scm.


* Praktické poznámky.

Docstringy umí vypsat funkce `doc'.

Readline umí doplňovat jména funkcí, což je často užitečné.


-- Milan Zamazal

Generated by  Doxygen 1.6.0   Back to index