Řečový a zvukový syntezátor

Hlasový výstup je pro Eureku plnou náhradou grafického výstupu, a proto mu byla věnována náležitá pozornost. I když z dnešního pohledu to tak nevypadá, byl hlasový výstup Eureky v druhé polovině 80. let chloubou společnosti Robotron. U tehdejších hlasových syntéz bylo mnoho překážek, především nedostatek výkonu a nedostatek paměti počítačů, přičemž bylo většinou snazší vyřešit problémy s výkonem než s pamětí. Proto z počátku převažovali paměťově úspornější syntézy parametrické, jež byly založeny na generování řeči podle matematických modelů hlasového ústrojí. Výsledný hlas byl dosti robotický, což potvrzuje i typický zástupce -z českého prostředí – program MLUV od Jiřího Mojžíška.

Firma Robotron se na svém počátku rozhodla jít jinou cestou. Přidat raději více paměti, v níž budou uloženy nahrané vzorky řeči, čímž se hlas alespoň trochu zlidští a ušetří se i nějaké výpočetní prostředky. Z jednotlivých vzorků hlásek se dle pravidel daného jazyka skládá řeč a jedná se tedy o syntézu v časové oblasti, tzv. konkatenativní. Ta v současné době prakticky dominuje, neboť paměť dnes není problém, a tak vzorky nejen, že mají vyšší kvalitu zvuku, ale jsou uloženy i v rozsáhlých databázích, které obsahují rovnou celé slabiky nebo i delší úseky slov.

Robotron se později od konkatenativních syntéz odklonil a vyvinul vlastní řečový čip s parametrickou syntézou, která byla použita např. v Arii, nástupkyni Eureky. Tento odklon byl učiněn zejména kvůli lepší adaptibilitě matematického modelu na jiný jazyk a jiný typ hlasu. Pro přepnutí na mužský nebo ženský hlas postačuje totiž upravit parametry filtrů a vyměnit generátor základního tónu, což konkatenativní syntéza neumožňuje a musí být kompletně vyměněna sada vzorků. V případě Eureky, kdy se lokalizovala do jiných jazyků z původní angličtiny, byly upraveny nebo vyměněny a přidány vzorky hlásek tak, aby to danému jazyku vyhovovalo. Je to znát i z české verze, kde velké množství vzorků pochází z původní verze anglické, např. vyslovování takových slov jako “braillskou”, “může” atd. Zvuková ukázka je uvedena níže.

Převod textu na řeč

V případě Eureky se celý systém převodu textu na řeč (text to speech – TTS) skládá z výkonné části, kterou programy ovládají skrze systémová volání, a ze zvukových dat, která u anglické standardní Eureky zaujímají polovinu veškeré kapacity instalovaných ROM (96 KB), 128 KB v případě české varianty. Řečový syntezátor je též navázán  na konzolu, tudíž programy, které byly sestaveny pro kompatibilní procesor Z80 a operační systém CP/M, mohou být na Eurece spouštěny a jejich výstup bude čten. Systémová volání konzoly ovšem neumožňují detailněji ovládat podobu hlasového výstupu tak, jak to lze prostřednictvím nativních volání TTS, např. pozastavení řeči a zjištění přesné pozice přerušení.

Zpracování textu, jenž má být vysloven, probíhá v několika krocích:

  1. Konverze textu na fonémy – Text se ze své psané podoby transformuje do fonetického kódu vyvinutého firmou Robotron, který reprezentuje posloupnost hlásek.  Např. slovo “nízko” je přepsáno do kódu “nx-ss-kk-oh”, kde “nx “představuje slabyku skládající se z ň a dlouhého í, “oh “  krátkou samohlásku o a zbývající kódy jsou zřejmé.
  2. Konverze fonému na alofony – Dle pravidel daného jazyka se volí konkrétní varianta fonému v závislosti na fonémech okolních, např. slovo “počítač” si Eureka přepíše s fonémem “ch” (č) uprostřed slova a na jeho konci, ale později přeloží na dva odlišné alofony, neboť koncové č má jiný zvuk než ve slabice čí.
  3. Konverze alofonů na zvukové vzorky – Výsledný zvuk se skládá dle alofonů z jednotlivých řečových vzorků, které jsou dále zpracovávány. Ty jsou přehrávány obslužnou rutinou s časováním, které je závislé na poloze regulátoru výšky hlasu. Čím časovač pracuje na vyšší frekvenci, tím se vzorky přehrávají rychleji.

Dříve ovšem než započne přepis do fonetické podoby, probíhá předzpracování textu, které se řídí následujícími pravidly:

  1. Dle zvoleného režimu vyslovování znaků se znaky jako závorky z textu odstraní nebo nahradí jejich slovním názvem. Název znaku může být ještě ovlivněn režimem matematických symbolů, tj. např. pomlčka může být vyslovena jako “mínus”.
  2. Je-li aktivní režim seskupování znaků, spočtou se opakované znaky a promítne se do promluvy jejich počet např. “12 pomlčka” namísto čtení každé pomlčky izolovaně.
  3. Dle zvoleného režimu vyslovování čísel jsou čísla přepsána na slovní reprezentaci buď po číslicích  (např. 222 jako “dvě dvě dvě), nebo matematicky (např. 222 jako “dvě stě dvacet dvě”).
  4. Pokud text obsahuje některou řídící sekvenci a je správně rozpoznána, předá se příslušné rutině. Počíná znaky !%, za nimiž následuje jednopísmenné označení příkazu a dále jeho parametry. Kromě ovlivňování procesu převodu textu na řeč  lze prostřednictvím těchto sekvencí generovat tóny a další zvuky. Veškerá nastavení učiněná těmito sekvencemi jsou resetována při návratu do hlavního menu na hodnoty,  které byly nastaveny ve funkci Režim.

Generování řeči

Základní vzorkovací frekvence použitých řečových vzorků je 7,5 kHz s 8 bitovým rozlišením, což je kvalita podobná pevné telefonní lince. Aby řeč byla srozumitelnější, mají vzorky obsahující vyšší podíl vysokých frekvencí (např. sykavky) vzorkovací frekvenci dvojnásobnou (15 kHz), což pro změnu se blíží kvalitě hlasových služeb v moderních mobilních sítích. Vzorky jsou adekvátní rychlostí (7,5 či 15 kHz) přehrávány v případě, že regulátor rychlosti v drážce na horní straně Eureky je nastaven na střed. Levá krajní poloha odpovídá zpomalení o čtvrtinu a pravá zrychlení o polovinu, tedy mezi krajními polohami je dvojnásobný rozdíl.  Další změny v rychlosti nastávají z důvodu změny intonace na koncích vět. Tím, že  se mění rychlost přehrávání, mění se zároveň s rychlostí i výška hlasu.

Jak bylo zmíněno, řídící sekvence slouží primárně k ovlivnění jazykové podoby toho, co Eureka říká. Např. sekvence !%n0 přepne na čtení čísel po jednotlivých číslicích nebo !%s1 zapne hláskovací režim. Ovšem zaměříme-li se na výsledný zvuk řeči, je důležité zmínit následující sekvence:

  • !%f (phonemes) – Dovoluje první vrstvu zpracování textu obejít a zadat slova přímo ve fonetickém kódu – např. slovo “počítač” jako !%fpp-oh-ch-ii-tt-ah-ch. Tato sekvence může donutit Eureku číst správně slovo, které by jinak vyslovovala špatně.
  • !%p (pitch) – Dovoluje změnit výšku hlasu, přičemž uvedená rychlost je relativní vůči nastavené výšce regulátorem na horní straně Eureky. Výchozí výška se nastavuje sekvencí !%p56, zatímco uvážíme-li, že regulátor je na středu, simulujeme jeho nejnižší polohu sekvencí !%p65 a nejvyšší !%p42. V doporučeném rozsahu 48-70 výška a tedy i rychlost, postupně klesá, avšak mimo tento rozsah může být hlas v některých případech místo zrychlení pomalejší, zkreslený nebo extrémně pomalý.
  • !%w (wait) – Dovoluje udělat v promluvě pauzu, přičemž uvedená hodnota je násobkem 256 nulových zvukových vzorků. Z toho plyne, že se nejedná o absolutní čas a pauza je ovlivněna rychlostí přehrávání, tedy pozicí regulátoru výšky hlasu. Je-li vzorkovací rychlost 7,5 kHz (regulátor na středu), odpovídá !%w1 (pauza mezi slovy) 34 milisekundám a !%w10 (pauza mezi větami) 340 ms (třetina sekundy).
HlasUkázkaČasování (kHz)
HlubokýPitch 655,625
StředníPitch 567,5
VysokýPitch 4211,25

Generování efektů

Pro generování zvukových efektů slouží řídící sekvence ve tvaru !%e,x kde x je číslo zvuku. Těch je celkem 20 – 16 zvuků cvakavých (tzv. clicks) a 4 znělé (tzv. beeps). Jedná se v podstatě o fragmenty řečových vzorků, které jsou přehrávány stejnou rutinou a se stejným časováním jako generovaná řeč. Z toho důvodu výška vydávaného zvuku je ovlivněna nejen regulátorem výšky hlasu, ale i řídící sekvencí pitch (!%p). Použitím programové změny výšky je možno dosáhnout jiného charakteru vydávaného zvuku. Aby bylo dosaženo efektu nezaměnitelného s řečí, jsou řečové fragmenty přehrávány s dvojnásobnou rychlostí  (15 kHz pro střední polohu regulátoru výšky).

Ukázky výše byly vygenerovány programem v jazyku BASIC (viz CLICKS.BAS) a mají pro každý zvuk demonstrovat následující charakteristiky:

  1. Jak zní zvuk izolovaně.
  2. Jak zní zvuk v sérii opakovaného přehrávání.
  3. Jak zní zvuk v sérii, kdy je zároveň měněna rychlost jeho přehrávání.

Ve třetím sloupci tabulky je vždy uvedena hláska, z jejíchž alofonů je zvuk odvozen.

Generování tónů

Prostřednictvím řídící sekvence !%t umí Eureka generovat souzvuky až čtyř tónů. Obecný tvar je !%tf1:f2:f3:f4/l*w, kde f1-f4 jsou frekvence tónů, které mají zaznít, l délka zvuku v milisekundách a w číslo v rozsahu 0-9 představující jeden z deseti vlnových průběhů. Podle zvolené vlny mají výsledné tóny svou barvu – např. 0 je pilový průběh s říznými tóny, 1 sinusový s tóny podobnými varhanám apod.

Tónový generátor má následující vlastnosti:

  1. Maximální hodnota frekvence tónu, jenž může zaznít, je 4096 Hz (přibližně Čtyřčárkované H). Pokud je zadána hodnota vyšší, generovaný tón je subjektivně nižší, což je typická vlastnost tzv. aliasingu.
  2. Časovač přehrávání by měl mít frekvenci 8192 Hz, avšak kvůli blíže neurčenému omezení běží na 7936 Hz, což má za následek pomalejší přehrávání a tedy celkové podladění generátoru o 55 centů. Např. namísto jednočárkovaného A (440 Hz) vydá Eureka tón o frekvenci 426 Hz. Pokud bychom chtěli prostřednictvím tónového generátoru přehrávat melodie, museli bychom jako referenční frekvenci ladění dle komorního A zvolit 454 Hz pro kompenzaci onoho podladění.
  3. Pro každou barvu tónu  je v paměti ROM uložena jedna perioda vlnového průběhu s rozlišením 64 vzorků. Protože tónový generátor počítá s přehráváním na frekvenci 8192 Hz, je perioda přehrávána bez úprav  při požadavku na tón o frekvenci 128 Hz. Dosažení jiné frekvence má za následek převzorkování periody tak, aby odpovídala dané frekvenci. Toto převzorkování není nijak kvalitní, tudíž ve výsledném zvuku vznikají produkty aliasingu, které jsou tu více, tu méně harmonické.
  4. Periody vln mají 6 bitovou hloubku, což na jednu stranu dovoluje souzvuk čtyř tónů jednoduše sečíst bez rizika přetečení na 8 bitovém výstupu, na druhou stranu se jedná o nezanedbatelnou deformaci. Např. sinusoida nemá svůj ideální oblý tvar, proto je její zvuk specificky zabarven a zkreslený 4 krát více, než je tomu u digitální telefonní linky.
VlnaUkázkaTvar
0Wave 0Pila
1Wave 1Sinusoida
2Wave 2?
3Wave 3?
4Wave 4?
5Wave 5?
6Wave 6?
7Wave 7?
8Wave 8?
9Wave 9?

Ukázky byly vygenerovány programem v jazyku BASIC (viz TONES.BAS) a demonstrují zvukové vlastnosti každého vlnového průběhu v rozmezí od velkého G po tříčárkované H. Ve čtyřech různých polohách si je možno vyslechnout tuto sekvenci:

  1. Referenční tón (od první polohy 128 Hz, přes 256, 512 a po čtvrtou polohu 1024 Hz) -Vykazuje nejméně zkreslení díky přímočarému převzorkovávání.
  2. Postupně jdoucí tóny G, C, F, H – Lze pozorovat nejen to, jak se mění výška tónu, ale i  zkreslení vzniklé nedokonalým převzorkováváním vlny na požadovanou frekvenci.
  3. Souzvuk čtyř tónů (G, C, F, H) – Lze si všimnout, že pro různé vlnové průběhy a polohy se může měnit míra disharmoničnosti vzniklého akordu. Důvodem je to, že čím více je vlna obohacena o vyšší harmonické frekvence, tím více do výsledného zvuku promlouvají artefakty vzniklé převzorkováváním.

Ukázky nejsou dokonale laděné, neboť se vycházelo z ladění komorního A na frekvenci 450 Hz. Ta byla používána jako výchozí pro programy v BASICu přehrávající nejrůznější melodie, přestože se nejedná o dostatečnou kompenzaci podladění.

I když fungování tónového generátoru není pro přehrávání melodií vhodné, může dobře posloužit pro vytváření nejrůznějších zvukových efektů. Naproti tomu funkce Hudební editor nejen, že nemá problémy s podladěním, ale používá i kvalitnější převzorkovávací algoritmus. Navíc vlnové průběhy pro nástroje Hudebního editoru mají 256 vzorků, tj. jsou 4 krát podrobnější než ty pro potřeby tónového generátoru.


Navigace