Copyright (c) 2000-2003 Yleisen kielitieen laitos, Helsingin yliopisto, ja Vieraiden kielten laitos, Joensuun yliopisto This program is distributed under Gnu Lesser General Public License (cf. the file LICENSE in distribution). This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Tekijät: Nicholas Volk (nvolk@ling.helsinki.fi) Martti Vainio muita? 2004-10-22: Festival on ohjelman kirjoittamisen ja julkaisun välillä ehtinyt versiosta 1.4.3 versioon 1.96. Pitäisi toimia myös uusissa versiossa. En ole testannut. (NV) FESTIVALIN SUOMENKIELISTEN SUOPUHE-ÄÄNTEN KÄYTTÖOHJE MANUAL FOR FINNISH FESTIVAL VOICES (in Finnish) Yleisen kielitieteen laitos, Helsingin Yliopisto Joensuukin???? Nicholas Volk, others??? 1. JOHDANTO Tässä paperissa esitellään Festival-puhesynteesijärjestelmän, , päälle Suopuhe-projektissa rakennetut suomenkieliset äänet. Työ tehtiin Helsingin yliopiston yleiisen kielitieteen laitoksella ja Joensuun yliopiston vieraiden kielten laitoksella. Tavallaan tämä paperi siis laajentaa Festivalin oman dokumentaation () kattamaan myös suomenkieliset äänet. Kun nyt kirjoitan tätä omalla ajallani, niin mitään kauhean hääviä dokumentaatiota on turha odottaa Suomenkielisen äänen kehitys aloitettin kevät-kesällä 2000. Tällöin Festivalista oli käytössä versio 1.4.1. Nyt kevättalvella 2003 on Festivalista olemassa versio 1.4.3. Suomenkielinen Festival-laajennus tukee ainakin tätä uusinta versiota, uskoaksemme myös aikaisempia versioita ainakin versioon 1.4.1 asti. Suomenkielistä ääntä tehdessä käytettiin omien kehitystyökalujen lisäksi uusien Festival-äänien tekemiseen tarkoitettua' Festvox-työkalupakettia , käytännössä paketin versiota 1.2 - 1.6. Suomenkielisestä laajennuksesta julkaistiin ensimmäinen "vakaa" versio 5.2.2003 ja siihen ensimmäinen bugikorjaus heti seuraavana päivänä. Ohjelman lopullista lisenssiä ei ole vielä tätä kirjoitettaessa päätetty, mutta lisenssin pitäisi ratketa vielä tämän kuun aikana. Joku open source -lisenssi sen tulisi kuitenkin olla. Suomenkieliset äänitietokannat ja ohjelmat löytyvät Helsingin yliopiston yleisen kielitieteen laitoksen sivulta (). Toistaiseksi projektin tekeleitä jaetaan vain projektin osapuolille ja yhteistyöyliopistoille. Lisäksi projektin yhteydessä valmistettiin erillinen tekstin lavennin (), jonka tuottamaa XML-muotoista tekstiä suomenkielinen järjestelmä ymmärtää. Helsingissä 23.5.2003 Tekijät 2. TTYÖNJAOSTA Ensimmäinen suomea puhunut versio syntetisaattoristamme taisi olla kokonaan Martti Vainion (MV) käsialaa. Tämän rungon päälle rakennetut modulit, kuten tavutus, tauotus ja alkukahdennus, ovat kaikkine virheineen pääsääntöisesti Nicholas Volkin (NV) käsialaa. Grafeemi-foneemio -konversiosäännöt perustuivat MV:n aikaisemmin tekemmän työhön, jotka NV jatkoi projektin yhteydessä edelleen. Äännekestomalleissa käytettiin ensin MV:n aiemmin toisessa yhteydessä laskemia keskiarvokestostoja (Ks. MV:n väitöskirja). Pian tämän jälkeen Jarmo Välikangas ja MV rakensivat ensimmäiset CART-pohjaiset äännekestomallit Festvoxin työkalujen avulla (VIITE), joita käytettiin suurimman osan projektin ajasta. Lopullinen versio on Nicholas Volkin Festoxilla rakentamat CART-puut, joissa huomioitiin erityisesti suomen kielessä lingvististen teorioiden mukaan olevia merkitseviä piirteitä, kuten moraa. Lisätyt lingvistiset piirteet perustuivat NV:n ja MV:n intuitiohin. Festivalin Scheme-tulkin ja lingvistisen datan yhdistäminen oli tietyin osin kivulaista, eikä esim. alkukahdennusta saatu kunnolla mukaan kestomalliin, vaan se tehdään tavallaan kestomallista huolimatta. Kestomallin rakentamisessa käytettiin MV:n aikaisemmin (jossain aiemmassa projektissa(?)) nauhoittamaa n. 700 lauseen puhetietokantaa. Kaikki intonaatiomallit, mukaan lukien valituksi tullut Fujisakin malli, olivat MV:n kirjoittamia, NV tosin on muokannut niitä ja intonaatiobugit ovat yleensä hänen syytään :) Tämä manuaali ja virheet koodissa ovat kaikki todennäköisesti Nicholas Volkin kirjoittamia. 3. MODULIT Syntesoinnin eri osavaiheet on jaettu moduleihin. Kukin moduli huolehtii omasta kokonaisuudestaan ja moduleita on suhteellisen helppo korvata keskenään. Festivalin tiedostot festival/lib/synthesis.scm määrittää tavallisen puhunnokset rakenteen seuraavasti: (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) ) Festival ei kuitenkaan ole niin kieliriippumaton kuin miltä se näyttää, esimerkiksi tekstin lavennus tehdään tyypillisesti Token-modulissa ennen POS-modulia. Suomessa ei kuitenkaan voida laventaa oikein, ennen kuin morfologinen tieto on kerätty: Initialize ---------- Luo Utterance-olion. Ei muutettu. (Alkuperäistä C++-koodia.) Text ---- Festivalin omaa, kieliriippuvaista C++-koodia, jota ei kivutta voi kirjoittaa uudelleen Schemessä. Tekee alkuperäisestä merkkijonosta Token-relaation. Sananloppuiset pisteet käsitellään (järjestysluvuissa ja tietyissä lyhenteissä väärin) täällä, eli poistetaan ja laitetaan tilalle sopiva tauon ilmaiseva feature (mikä-sen-nimi-nyt-olikaan). Kieliriippuvainen koodi aiheuttaa ongelmia järjestyslukujen ja pisteeseen päättyvien lyhenteiden tunnistuksen kanssa. Token_Pos --------- Englannin kieltä varten rakennettu moduli, jota käsittääkseni mikään muu kieli ei koskaan käytä. Asettaa token_pos-featuren päälle kullekin tokenille. Token ----- POS --- Phrasify -------- Word ---- 15 miehen 15 soitti 15. tammikuuta klo 15.15 puhelimella numeroon 15 15 15. Word-modulissa tavutetaan sana ja määritellään eri tavujen painot. Suomen sanat taipuvat liikaa, jotta voitaisiin käyttää kiinteää sanastoa, mutta toisaalta suomen kirjoituksen ja puheen välinen suhde on selkeä ja sanapaino määräytyy ensimmäiselle tavulle, tämä ei ole suuri ongelma. Sanalistojen avulla tehdään ero sisältö- ja merkityssanojen välille. Yleisimmät sisältösanat on poimittu morfologisen perustein ja listattu, jotta osattaisiin olla laittamatta niille lausepainoa. Tavutus on totetutettu LTS-sääntöjen avulla (vrt. espanjankielinen ääni). Sääntöjen avulla "väärennetään" Festivalin tukema Lisp-lista-muotoinen sanakirjamerkintä. Ensimmäisen tavun pääpainon (2) lisäksi sanoille merkitään myös mahdollinen sivupaino (1) ja painottomat tavut (0): ("takaraivo" "content" (((t a) 2) ((k a) 0) ((r a i) 1) ((v o) 0))) ("mittari" "content" (((m i) 2) ((t: a) 0) ((r i) 0))) ("mato" "content" (((m a) 2) ((t o) 0))) ("matto" "content" (((m a) 2) ((t: o) 0))) Tarkempi määritys sanaston merkinnöille löytyy Festivalin dokumentaatiosta. Kannattaa kuitenkin huomatata, että kirjoitetun ja puhutun kielen tavutus ei mene aivan yksi yhteen: kaksi samaa kirjainta vastaa tavallisesti yhtä pitkää äännettä, esim. äskeisen mittari-sanan t:-kirjaimet realistuvat puheessa yhtenä pitkänä t-äänteenä. Festivalissa ei äänteitä voi kuvata ambisyllaabisina eli kahteen tavuun kuuluvina, joten olemme käyttäneet jälkimmäistä tavua äänteen paikkana. Tällöin lyhyet ja pitkät äänteet käyttäytyvät samalla tavalla (vrt. mato ~ matto). Tämä tosin monimutkaistaa äännekestomallissa käytettyjen morien laskentaa. Todettaakoon myös, ettei äännekestomalli hyödyntänyt sivupainotietoa, tosin tätä tietoa ei onnistuttu myöskään eristämään parhaalla mahdollisella tavalla opetusta varten. Pauses ------ Intonation ---------- Post_Lex -------- Duration -------- Oma kestomoduli Duration_Finnish. Periaatteessa äännekestot haetaan tavalliseen tapaan CART-puusta. Lisäksi moduli huolehtii, että äänteiden tietty minimipituus säilyy (nyt 30ms) ja venyttää viimeistä äännettä. (Viimeinen äänne sisältää segmentointiteknisistä syistä hiljaista loppuaspiraatiota ja lisäksi kestomalli ei välttämättä venytä äännettä itsekseen tarpeeksi.) Int_Targets ----------- Wave_Synth ---------- Signaalin generointi kerättyjen tietojen perusteella. Festivalin omaa C++-koodia. 4. MARK-UP Suomenkielisiä ääniä varten kehitettiin oma XML-moodi, nimeltään Suopuhe. 5. ÄÄNET Kaksi ääntä, miesääni hy_fi_mv_diphone ja naisääni suo_fi_lj_diphone. Äänten lisenssitilanteesta en ole tietoinen. 6. TEHOKKUUS Testaamatta. 7. TIEDOSTOT festival/lib/voices/finnish/hy_fi_mv_diphone/festvox/COPYING Lisenssi, jahka päätetty... festival/lib/voices/finnish/hy_fi_mv_diphone/festvox/finnish_duration.scm Suomen kielen äännekestomalli. Laskee CART-puun avulla äänteiden kestot. Lisäksi taukoa edeltäviä äänteitä venytään erikseen, sillä opetetun puun tekevä venytys ei tuntunut riittävältä. RMSE 0.7680 Correlation is 0.6294 Mean (abs) Error 0.5780 (0.5058) festival/lib/voices/finnish/hy_fi_mv_diphone/festvox/finnish_lex.scm Sanastotiedosto. Sanastojen avulla tunnistetaan sisältö- ja merkityssanat. Lisäksi yksittäisten kirjainten leksikkoentryt. festival/lib/voices/finnish/hy_fi_mv_diphone/festvox/finnish_lts.scm Sisältää Letter.to-sound -säännät, jotka muuttavat grafeemit eli merkit foneemeiksi. LTS-konversion yhteydessä tehdään myös tavutus. "Väärentää" Festivalin sanastoon kuulumattomille sanoille (käytännössä kaikki sanat pl. yksittäiset aakkkoset) leksikkomerkinnät. Merkinnän sanaluokka määritty finnish_lex-tiedoston tietojen påerusteella tai suopuhe-moodilta saatujen tietojen perusteella. festival/lib/voices/finnish/hy_fi_mv_diphone/festvox/finnish_mv_int.scm Intonaatiomalli eli Fujisakin malli. Laskee perustaajuuden tavallisesti 50 millisekuntin välein, lyhyissä tavuissa tiheämmin. Intonaation yhteydessä myös nimeää tavut. festival/lib/voices/finnish/hy_fi_mv_diphone/festvox/finnish_mv_phrase.scm Lisää puhunnokseen tauot ja tauotuksen jälkeen huolehtii myös alkukahdennuksesta. festival/lib/voices/finnish/hy_fi_mv_diphone/festvox/finnish_phones.scm Suomenkielisten äänteiden määritelmät. Käytetään mm. kestomallin apuna. Äänteiden nimien pohjana toimii Sampa-aakkosto, mutta yhdenmukaisuus ei ole täydellinen. Meidän tiettyjen äänteiden nimet ovat intuitiivisesti helpompia muistaa. festival/lib/voices/finnish/hy_fi_mv_diphone/festvox/hy_fi_mv_diphone.scm festival/lib/voices/finnish/hy_fi_mv_diphone/festvox/suo_fi_lj_diphone.scm Mies- (hy_fi_mv_diphone) ja naisäänen (suo_fi_lj_diphone) määritelmät. Naisäänen "tiedosto" on vain symbolinen linkki miesääneen. festival/lib/voices/finnish/hy_fi_mv_diphone/festvox/suopuhe.dtd Suopuhe-XML-moodin käyttämä DTD. festival/lib/voices/finnish/hy_fi_mv_diphone/festvox/suopuhe_filter.perl Suopuhe-moodin käyttämä tekstin esikäsittelijä. Siivoaa syötettä erinäisin osin. Siivous on helpompi tehdä Perlillä kuin Schemellä... festival/lib/voices/finnish/hy_fi_mv_diphone/festvox/suopuhe_mode.scm/ Suopuhe-moodin tulkitseva scheme-koodi festival/lib/voices/finnish/hy_fi_mv_diphone/group/mvlpc.group Miesäänen äänitietokanta. festival/lib/voices/finnish/suo_fi_lj_diphone/group/ljlpc.group Naisäänen äänitietokanta, 8. SUOPUHEEN FUNKTIOT (= N1 N2) Return true if N1 and N2 are equal numbers. (Duration_Finnish) Lengthens the final phone after the duration cart tree. (SayText TEXT) TEXT, a string, is rendered as speech. (Suopuhe redifinion) (accented_p SYL) Sees if the syllable is accented... (add_linguistic_break WORD) Adds a phrase break after the word, if the context is appropriate. If the word is final return nil. If there already is a pause return the word itself. Also is pause is added, return the word itself. If pause couldn't be added, try the same with the next word. Simple! (baptize SYL) Baptizes the given syllable by concatenating together the names of it's daughters (phones) (calculate_fujisaki acc_list phrase list point alpha beta f_min) Calculates the Fujisaki parameter values for a given point. Returns an absolute Hertz value (compound_stress WORD) Handles the exception stress placement in compounds. The few compounds supported are recognized by the '-' separator. However secondary word stress did not show up in duration and intonation models... We could also add boundary detection based on vowel positions in neighboring syllables. (distance_from_prev_pause WORD) Distance (in syllables) from the previous word. (distance_to_next_pause WORD) Counts the distance from the end of the word to the next pause in syllables. (end_of_phrase PHONE) Used by the duration tree to detect phrase boundary. Returns either 1 (last syllable), 2 (penultimate syllable of the phrase) or 0 (other). Somehow I'm sure that there are easier and faster ways to do this... (extract_feats relname feats utt outfd) Extract the features and write them to the screen. No documentation available for user-defined function. (find_phrase_break WORD) If the distance from previous break to the next break is long enough (now 25 syllables), try to add more pauses in between. New pauses are added between certain word classes. (define (find_phrases utt) Returns a list of phrases from an utterance in the form of lists whose car is the break level followed by start and end times (finnish_lts WORD) Creates the lexical entry for the given WORD. (finnish_number INT) Converts the INT into a corresponding string. Very simple. Does not handle cases. (finnish_token_to_words token name) A few simple ad hoc solutions for the most common simple T2W-problems. It was much nicer to use an external Perl text normalizer than scheme. (finnish_tosyl_brackets phones) Takes a list of phones containing - as syllable boundary. Should we add a compound boundary? Probably... Construct the Festival bracket structure. Used by finnish_lts-function. (fujisaki_targ_func UTT STREAMITEM) Returns a list of targets for the given syllable. (general_fi_diphone) Shared settings for all Suopuhe voices. (general_fi_diphone) Shared settings for all Suopuhe voices. (get_accent_list UTT) (get_amplitude point beta) Calculate the amplitude from time and beta information: (get_phrase_amplitude time alpha) calculate phrase amplitude for a given point in time. (get_phrase_list utt) Returns a list of phrase commands for an utterance. The first command is higher than the following ones. (initial_doubling WORD) Checks wheter the current WORD can triggers initial doubling on the next word or not. (insert_pause2 WORDITEM) Insert a little break (pause segment) after the last segment in WORDITEM in UTT. (intro-finnish) Synthesize an introduction to the Festival Speech Synthesis System in Finnish. (lab_body PHONE) Writes the LAB data for a given phone and recursively call itself while there are phones left (ortographically right:). The header is done in lab_header procedure which typically is the caller of this function. (lab_header UTT) Returns the contents for the to-be *.lab file based on the UTTerance. Saving the output to a file is done somewhere higher. (language_finnish) Set up language parameters for Finnish. (list2string LIST) Construct a string from a list of symbols (make_number INT) Splits numbers into 3-letter chunks, which are converted into a number. Also adds an appropriate quantifier (like thousands) to each triplet, thus producing any int between 1 - 999999999. (make_number2 INT) Converts an up-to-three digit sequence into a number. (max num1 num2) Returns the greater of the two. (min num1 num2) Returns the smaller of the two. (monotone UTT SYL) Monotonous intonation model. (mora PHONE) Counts the number of morae in the syllable. Used by the duration model. (mora2 list_of_phones) Counts the moras (morae?) in a given list of phones. Does not support ambisyllabic long consonants. (neg number) Negates a number -- Festival SIOD doesn't understand (- number), but requires TWO arguments to the '-' operator (number_list DIGIT) Returns the corresponding string for a given DIGIT (one_by_one WORD) Speaks the letters in the given WORD one by one. (parts_of_speech UTT) Returns a list of sublists. Each sublist consists of a word's name and part-of-speech based on the UTTerance. (phone_durations PHONE) Prints the name and duration of a given PHONE. The recursively goes through the next phones and does the same for them also. (phones UTT) Prints a list of phone names in UTTerance and returns the original utterance unchanged.. (pop_accent) Removes and returns the topmost whatever from the suopuhe_accent_stack. (pop_pos) Removes and returns the topmost whatever from the suopuhe_pos_stack. (push_accent alkio) Adds alkio to the top of the suopuhe_accent_stack. (push_pos alkio) Adds alkio to the top of the suopuhe_pos_stack. (remove_head_and_tail_spaces string) Removes unspoken space sequences from the beginning and end of a give string. (save_suopuhe_output UTT) Saves the UTT and some textual data about it to files. (skip_pause WORD) Returns the word after the next pause or nil if there are no intersentence pauses left. (sqr NUM) NUM ** 2. (suopuhe_Pauses utt) Converts the punctuation marks into appropriate pauses. Does the list intonation too. (suopuhe_add_break UTT) Adds pauses if necessary to a (overlong) utterance. Applies some linguistic intelligence in the process... (suopuhe_adjust_volume utt) Amplify or attenutate signale based on value of suopuhe_vol_factor and suopuhe_vol_type (absolute or relative). (suopuhe_exit_func) Exit function for SUOPUHE mode (suopuhe_init_func) Initialisation for SUOPUHE mode (suopuhe_init_globals) Initialize various global variables. (suopuhe_setup) Reset tts hooks for suopuhe mode. (suopuhe_token_to_words token name) SUOPUHE mode token specific analysis. (suopuhe_voice_param_setup) Set up original values for various voice parameters. (syllable stress UTT) Returns a list of sublists. Each sublist consists of a syllable name and a syllable stress value based on the UTTerance. (syllables_in_word SYL) Counts the number of syllables in a given word. Actually counts the numebr of syllables from a given syllable to the end of word. (tts FILE MODE) Convert FILE to speech. MODE identifies any special treatment necessary for FILE. This is simply a front end to tts_file but puts the system in sync audio mode first. [see TTS] (utt.length utt) Returns the length of an utterance in syllables (wavesurf UTT) Saves the utterance UTT as a wav file and the creates the corresponding lab file. The files are placed in the /tmp dir. Then starts the wavesurfer-program for speech analysis. (word durations2 WORD) Returns the name and start and end times of the given word. Then recursively calls the next word if any and finally returns a string consisting of data from all words visited. (word_has_break? WORD) True, if the WORD is followed by # or ## "phone". (word_list_entry? STRING LIST) Checks whether the STRING is member of any of the sublists of LIST. 9. SUOPUHEEN MUUTTUJAT suopuhe_output_file_prefix Määrittää hakemistot, johon suopuhe-moodin mukaiset tiedostot talletetaan. Oletusarvo "/tmp" suopuhe_max_sentences Määrittää ylärajan levylle talletettaville puhunnoksille. Oletusarvo 1000. Arvolla 0 tiedostoja ei pitäisi päätyä kovalevylle laisinkaan, eli tällöin puhunnokset vain soitetaan. suopuhe_aloud Jos tosi niin syntetisoitava ääni soitetaan ulos kaiuttimista, muuten (arvolla epätosi) se vain talletetaan levylle. Oletusarvoisesti tosi. [Vajavainen] 10. TUNNETUT BUGIT Festival README.tiedosto kertoo seuraavaa: INSTALL Festival should run on any standard Unix platform. It has already run on Solaris, SunOS, Linux and FreeBSD. It requires a C++ compiler (GCC 2.7.2, 2.8.1, 2.95.[123], RedHat "gcc-2.96" and egcs are our standard compilers) to install. A port to Windows NT/95/98 and 2000 using either Cygnus GNUWIN32 and Visual C++ is included, this is still new but many people are successfully using it. Joillain gcc:n versiolla (3.2x) ei Festivalin versio 1.4.2 käänny. Ongelma ratkeaa siirtymällä uudempaan Festivalin versioon (1.4.3) Verkosta löytyy valmiita RPM-tiedostoja, mutta näissä on ääkkösiin liittyvä bugi (7-bittinen ascii...), joka johtuu SIOD:n käyttämän editline-komentoriviohjelman rajoituksista. Lähdekoodin tehtävä bugikorjaus on kerrottu www:ssä (Ks. kpl 12), mutta RPM:ään tätä ei voine tehdä. Syntetisaattori käyttää ensisijaisesti lavennukseen ulkoista lavennin-modulia, joten sen omat tekstin lavennussäännöt ovat sangen huonot. Alkuperäinen koodimme on kirjoitettu ISO-8859-1 -standardilla (vai oliko se 8859-15). Uudemmat unixit yrittävät tukea UTF-8:aa. UTF-8-tuki puuttuu... Korjaukset tulisi tehdä tiedostoon editline.cc, mutta niitä tuskin ehditään tekemään/testaamaan projektin puitteissa, 11. KÄYTTÖ Lukee laventimen tekemät suo- tai suopuhe-prefiksillä varustetut tiedostot suopuhe-moodissa, käskyllä $ festival --tts foo.suo Muuten käyttö festivalin ohjekirjojen mukainen 12. WWW-SIVUT Syntisaattorit ohjesivut tulevat vastaisuudessa löytymään osoitteen http://www.ling.helsinki.fi/suopuhe alta. MUUTA VERSIOHISTORIA Notaatio: numerot kertovat versionumerot, kirjaimet viittavat pieniin päivityksiin/bugikorjauksiin. 22.10.2004 Lisenssitekstin liimailua 1.0f 23.5.2003 Äänipakettin polku festvox-paketteja vastaavaksi. Puuttuvat funktioiden dokumentoinnit koodiin sekä funtioiden dokumentaatio tähän dokumenttiin. README-tiedostot siirtyneet yhtä hakemistoa ylemmäs. 1.0e 22.4.2003 Duration_Method paremmin ääniriippumattomaksi. Versio naisäänestä pihalle 1.0d 16.4.2003 Korjattu suopuhe-moodissa ollut tauotusvirhe. Korjattu paketintekoskriptissä ollut virhe, jonka takia edellinen julkaistu versio (1.0c) ei sellaisenaan toiminut. 1.0c 10.4.2003 Korjattu virhe LTS-säännöistä. Poistettu 1 tarpeettomaksi käynyt funktio. Mahdollisesti muitakin pieniä muutoksia 1.0b 10.2.2003 Tämä tiedosto osaksi pakettia. Muutamaa äännekestoa korjattu käsin. (mm. pitkä l) 1.0a 6.2.2003 Suopuhe-moodista unohtuneet funktiot lisätty pakettiin. Muutama bugikorjaus. 1.0 5.2.2003 julkaistu alustava versio Ennen helmikuuta 2003 julkaistut beta-versiot oli nimetty julkaisupäivän mukaan.