FreeTTS: fyrstu skrefin

Markmið: Að búa til lítið forrit sem er fært um að tjá setningar á ensku.
Forkröfur eru: grunnþekking á java og hlutbundinni forritun.
Tól sem þarf: Java SDK 1.4.2, FreeTTS 1.2 og einhvern ritil t.d. Textpad

FreeTTS er raddgervill (e. speech synthesizer) sem að vísindamenn hjá Sun Microsystems hafa þróað. Fyrir þá sem ekki eru vel að sér í tölvuhugtökum þá er raddgervill í stuttu máli aðferð til að láta tölvuna tala. Hér á eftir verður sýnt hvernig á að nota FreeTTS til að fá tölvuna til að bera fram setningu sem við skilgreinum. Fyrir þá sem vilja vita meira um FreeTTS þá er hægt að nálgast frekari upplýsingar hér.

Þegar forrit sem notar FreeTTS er búið til, er að nokkru að hyggja. Fyrst og fremst þarf að velja hvaða rödd forritið á að nota. En hvernig veit forritarinn hvaða rödd á að nota, eða hvaða raddir eru í boði til að nota? Það er auðvelt, við spyrjum VoiceManager í FreeTTS og prentum þær út á skjáinn. Til að nota FreeTTS pakkana í forritinu okkar þá þurfum við að byrja á að skilgreina þá. Við komum eingöngu til með að nota Voice og VoiceManager hlutina í þessu kennsluforriti og því sækjum við bara þá. Við gætum náð í þá alla en til að spara minni þá forðumst við að sækja aðra hluti en þá sem við þurfum að nota.

import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;

Fyrsta línan nær í Voice java-pakkann (e. package) og sú seinni í VoiceManager java-pakkann. Næst búum við til fall sem sér um að prenta, þær raddir sem eru innbyggðar í FreeTTS og hvaða "mengi" þær tilheyra, út á skjáinn.

public void listAllVoices()
{
    System.out.println();
    System.out.println( "All available voices:" );
    VoiceManager voiceManager = VoiceManager.getInstance();
    Voice[] voices = voiceManager.getVoices();

    for ( int i=0; i < voices.length; i++ )
    {
        System.out.println("    "
            + voices[i].getName() + " (" + voices[i].getDomain() + " domain)" );
    }
}

Þegar þetta fall er keyrt ætti úttakið sem birtist á skjánum að líta svona út:

All voices available:
    alan (time domain)
    kevin (general domain)
    kevin16 (general domain)

Nú höfum við prentað út hvaða raddir eru í boði í FreeTTS. Það er rétt að benda á að það eru til fleiri raddir fyrir FreeTTS og einnig er hægt að búa til sínar eigin raddir. Hvernig það er gert verður sýnt í seinni kennsluforritum. Nú skulum við vinda okkur í það að láta tölvuna segja eitthvað. Við höfum séð hvaða raddir eru í boði og nú getum við valið einhverja af þeim röddum til að bera fram streng sem við gefum tölvunni. Í þessu sýnidæmi komum við til með að nota röddina kevin16. Rétt er að benda á að röddin alan er með mun fallegri framburð en hinar raddirnar en á hinn bóginn kann alan eingöngu að bera fram mjög takmarkaðan fjölda orða. Eins og mengið time gefur til kynna þá hafa þau orð flest eitthvað að gera með tíma.

public void speak( String sentence )
{
    VoiceManager voiceManager = VoiceManager.getInstance();
    Voice helloVoice = voiceManager.getVoice("kevin16");
    helloVoice.allocate();
    helloVoice.speak(sentence);
    helloVoice.deallocate();
}

Hér náum við í rödd úr VoiceManager, tökum frá auðlindir í stýrikerfinu fyrir hana, notum hana og skilum svo auðlindunum aftur til baka. Eins og sést þá er þetta rosalega auðvelt og mjög lítill kóði sem þarf til að láta tölvuna segja það sem okkur dettur í hug. Hægt er að nálgast kóðann fyrir þetta kennsluforrit hér.

Nú höfum við sýnt hvernig nota má innbyggðar raddir í FreeTTS til að bera fram skrifaðar setningar. Þetta er að sjálfsögðu ekki allt sem FreeTTS getur gert og eru möguleikarnir nánast óteljandi. Eitt af því sem hægt er að gera er að láta forritið tjá sig á öðru tungumáli en ensku og er hægt að nota MBROLA. Einnig er hægt að búa til sínar eigin raddir með forrit sem nefnist FestVox. Það er þó eitt sem þarf að nefna sérstaklega í sambandi við FestVox, en það er að það virkar EKKI að svo stöddu á Windows. Hér er umfjöllun um grunnvirkni FreeTTS lokið og nú ætti að vera ljóst hvernig búa á til forrit í Java sem notar innbyggðar raddir í FreeTTS til að bera fram einfaldan texta á ensku.

 

CADIA
cadia@ru.is  |  Ofanleiti 2, IS -103 Reykjavík
Tel: +354 510 6427  |  Fax: +354 510 6201