České vysoké učení technické v Praze Fakulta elektrotechnická
Bakalářská práce Program pro výuku psaní na stroji pro nevidomé
Václav Kozák Vedoucí práce: Ing. Miroslav Balík, Ph.D.
leden 2008 1
Abstrakt Tato práce se zabývá problematikou psaní zrakově postižených osob na psacím stroji (počítači). V první části popisuje teoretická východiska z hlediska potřeb zdravotně postižených a jejich možnosti s ohledem na stávající nabídku výukových programů k výuce psaní a stanovením cílů bakalářské práce Druhá část se popisuje návrh softwaru, ovládání programu a jeho implementací. Závěrečná část charakterizuje využití programu v praxi.
Abstract This thesis is focused on problems of type-writing (computer) of blind persons. In the first part are described theoretical ways out with a point of view of handicapped persons and their possibilities with regard to todays teaching type-writing programs offer. There are also aims of this thesis. The design of a software, the controll of this program and the implementation are described in the second part of this thesis. How to use the program in practice is mentioned at the end.
2
Prohlášení
Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem podklady (literaturu, software, komponenty třetích stran atd.) uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu § 60 zákona č. 121/Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorských zákonů).
V Kladně dne 16. ledna 2008
……………………………. Václav Kozák
3
Poděkování Chtěl bych na tomto místě poděkovat všem, kteří mi jakýmkoli způsobem pomáhali při tvorbě bakalářského projektu a při vzniku této práce. Zvláště děkuji vedoucímu mé bakalářské práce Ing. Miroslavu Balíkovi za odbornou pomoc.
4
Obsah Úvod
………………………………………………………………….
1.1 Teorie…………………………………………………………………………………………… 1.2 Výběr slov………………………………………………………………………………………
2. Popis softwaru………………………………………………………………………… …. 2.1 Flexibilita………………………………………………………………………………………. 2.1.1 Zvuky………………………………………………………………………………………. 2.1.2 Portabilita………………………………………………………………………………..... 2.1.3 Možnosti natavení vzhledu………………………………………………………………. 2.1.4 Přednastavené módy…………………………………………………………………….. 2.2 Psaní…………………………………………………………………………………………… 2.2.1 Diktování písmen…………………………………………………………………………. 2.2.2 Diktování slov……………………………………………………………………………...
3 3 4 6 6 6 6 7 8 9 9 10
3. Ovládání programu………………………………………………………………………. 11 3.1 Seznámení s klávesnicí……………………………………………………………………... 11 3.2 Základní postavení prstů na klávesnici………………………………………………….. 11 3.3 První spuštění programu…………………………………………………………………… 11 3.4 Ovládání programu pro slabozraké osoby………………………………………………. 13 3.5 Ovládání programu pro nevidomé osoby……………………………………………….. 13 3.6 Ovládání programu obecně………………………………………………………………… 14 3.7 Zpětná vazba…………………………………………………………………………………. 14 3.8 Nastavování vlastností……………………………………………………………………… 14 3.9 Přiřazení barvy klávesám - „obarvení kláves“…………………………………………. 15 3.10 Zrušení zvuku……………………………………………………………………………….. 15 3.11 Ukončení 15 lekce........................................................................................................... 3.12 Jednoduchá hra….....................................................................................................
16
4. Implementace…………………………………………………………………………......
17 4.1 Obecné…………………………………………………………………………………………. 17 4.2 Formát zvuků…………………………………………………………………………………. 17 4.3 Seznam a popis dialogů……………………………………………………………………. 17 4.4 Objektové modely……………………………………………………………………………. 18 4.4.1 Model používání programu…………………………………………………………….... 18 4.4.2 Model nastavování……………………………………………………………………….. 20 4.4.3 Model objektů ukládání………………………………………………………………….. 21 4.5 Ukázky důležitých částí zdrojových kódu……………………………………………….. 22 4.5.1 Vlastnosti zvuku…………………………………………………………………………... 22 4.5.2 Nastavení zvuku………………………………………………………………………….. 24 4.5.3 Překreslování pozadí…………………………………………………………………….. 25 4.6 Třídy…………………………………………………………………………………………….. 25 4.7 Vlákna……………………………………………………………………………………… 26
…... 4.8 Použité komponenty………………………………………………………………………….
5
27
5. Struktura programu……………………………………………………………………… 28 5.1 Soubory a adresáře programu………………………………………………………......... 28 5.2 Soubor manifest (vygener. vývoj. prostř. NetBeans 5.5.1)…………………………… 29 6. Technické parametry……………………………………………………………………. 6.1 Použitý software……………………………………………………………………………… 6.2 Nároky a požadavky…………………………………………………………………………. 6.3 Srovnání s programem „Talking Typer“…………………………………………………. 6.4 Testování………………………………………………………………………………………
30 30 30 31 32
7. Závěr………………………………………………………………………………………..
33
8. Seznam příloh…………………………………………………………………………….. 34 8.1 CD ROM – Psaní lidí se zrakovým postižením………………………………………….. 34 8.2 Seznam tabulek……………………………………………………………………………….
34
8.3 Seznam obrázků………………………………………………………………………………
34
8.5 Program na výpis slov……………………………………………………………………….
34
8.6 Přehled slov a čísel, které umí program nadiktovat……………………………………
34
8.7 Seznam zvuků pro nastavování……………………………………………………………
34
8.8 Odkazy a použité zdroje……………………………………………………………………..
34 35
9. Přílohy
6
1. Úvod 1.1 Teorie 21. století je typické doslova závratným rozvojem informačních a komunikačních technologií. Moderní společnost by měla nabídnout rovné příležitosti pro uplatňování svých produktů také lidem se zdravotním postižením. I přesto, že v této oblasti dochází zejména v posledních letech k výrazným změnám, existuje spousta aplikací potřebných pro ovládání počítače, které možnosti a potřeby nevidomých a slabozrakých osob zatím nezohledňují. Typickým příkladem je aplikace CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) pomocí které lze rozlišit člověka a počítač a která se většinou využívá k registraci či zapsání příspěvku. Uživatel počítače z obrázku vyčlenění text, jehož opsáním se zaregistruje nebo zapíše příspěvek. Uvedený způsob kontroly rozlišení člověk – počítač, ale neumožňuje použít tuto aplikaci nevidomým. Některé velké firmy (např. Yahoo, Google) již do svých aplikací implementovali možnost přečtení tohoto textu. Jindy je CAPTCHA nahrazena jednoduchou otázkou či matematickým příkladem. Při psaní na počítači lze případně ještě použít program na opravu jazyka upravený pro potřeby zrakově postiženého člověka. Nevidomý uživatel Nevidomý uživatel se při psaní na počítači či na klasickém psacím stroji potýká především s minimální zpětnou vazbou. V případě, že využije počítače, dostane při využití běžného programu pouze zvukovou informaci o stisknuté klávese. Základním předpokladem pro kvalitní výukový program pro nevidomé je dostatečná zpětná vazba s využitím zvuku. Pro nevidomé uživatele je rovněž velmi důležité zautomatizování klávesnicového prstokladu. Jeho bezchybné osvojení je pro uživatele se zrakovým postižením ve srovnání se zdravými lidmi mnohem důležitější, neboť je předpokladem nejen pro dostatečně rychlé psaní, ale i pro minimalizaci chybovosti (chybí zraková zpětná vazba). Slabozraký uživatel Požadavky na výukový program pro slabozrakého uživatele se budou lišit v závislosti na stupni postižení. U nejtěžších vad budou v podstatě stejné jako v případě osob nevidomých a osob se zbytky zraku (rozlišování světla a tmy). Do kategorie slabozrakých patří lidé, kterým pro korigování zrakové vady stačí brýle a lidé, kteří potřebují další pomůcky. U nejtěžších vad je to lupa, jejíž účinnost je mnohdy ještě podpořena prosvětlením plochy popř. textu. Vyvíjený výukový program by měl zohledňovat skupinu lidí s těžkou slabozrakostí. Musí být tedy nastaven, aby jim poskytl potřebnou podporu, kterou je prostředí s dostatečně velkým kontrastem pozadí – text a možnost libovolně nastavitelné velikosti písma. Sluchová zpětná vazba tuto podporu ještě posílí. Při vývoji výukového programu jsem tedy vycházel z výše uvedených potřeb a stanovil si dílčí cíle:
dostatečná zpětná vazba s využitím zvuku dostatečně kontrastní prostředí (možnost volby) dostatečně velké písmo (možnost volby) respektování dosažené stupně úrovni psaní – možnost volby nastavení počtu opakování, stupně obtížnosti a četnosti zpětné vazby
Dalším úkolem bylo stanovit pořadí nacvičovaných písmen, aby bylo procvičeno co nejvíce slov. Pro tyto účely bylo nutné vyvinout další samostatný program.
7
1.2 Výběr slov Pro program bylo nutné vybrat slova, která budou pro nácvik správného postavení prstů na klávesnici diktována. Nejefektivnější způsob, jak získat slova obsahující pouze nacvičovaná písmena, je jednoduchý program [příloha č. 4], jenž využívá seznamu českých slov. Slovník, ze kterého byla vybírána, obsahoval celkem 161 074 slov. Počet vybraných slov je v následující tabulce seřazen vzestupně podle jejich délky a zahrnuje všechny tvary slov a předložky.
Počet analyzovaných slov: 161 074 Délka slov 1 písmeno 2 písmena 3 písmena 4 písmena 5 písmen 6 písmen 7 písmen 8 písmen a více
Počet výskytů 8 129 1134 4950 13701 24503 36665 79984
Tabulka č. 1 - Počet analyzovaných slov Volba pořadí nových písmen v lekcích je kompromisem mezi slovy, která mohu být v dané lekci použita a logickým postupem na klávesnici při přidávání jednotlivých písmen. Při malém počtu písmen (méně než osm) je počet slov velmi malý i při libovolné kombinaci písmen. Nejlepším kompromisem mezi počtem možných slov v prvních lekcích, logickým postupem a nutností naučit uživatele základní postavení prstů na klávesnici je tento:
Číslo lekce
Nová písmena
Číslo lekce
Nová písmena
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
a,ů l,s d,k f,j r,u e,i g,h t,z w,o q,p
11. 12. 13. 14. 15. 16. 17. 18. 19. 20
b,n m,v c,ú y,x ž,ý á,ř í,č š,é ě 1,2,3,4,5,6,7,8,9,0
Tabulka č. 2 – Zařazení písmen a číslic v lekcích Níže je uveden počet slov, která mohou být dle programu[příloha č. 4] v jednotlivých lekcích (od první lekce do páté) diktována. Pak již vzniká kombinací písmen dostatek slov pro nácvik. Seznam českých slov, který program používal, obsahoval dvě formy téhož slova s diakritickými znaménky a bez nich (např. kočka – kocka), proto bylo nutné ještě slova ručně vytřídit.
8
Číslo lekce
Počet možných slov
1
1
2
10
3
74
4
93
5 Tabulka č. 3 – Počet slov v lekci
324
Uvedené pořadí písmen se poněkud v počáteční fázi nácviku liší od jiných programů, kdy se postupuje od písmen f-j k písmenům a-ů. Tedy od podle tohoto programu od čtvrté lekce k první. Od čtvrté lekce by měl uživatel zvládat správné postavení rukou na klávesnici. Pro první lekce, kdy je možné použít k diktování jen málo slov, byly vybrány i různé tvary vybraných slov. Bylo třeba zvažovat např. i taková úskalí jako je psaní tvaru slovesa, který končí na “y/i” (příčestí minulé), neboť bez znalosti dalších větných členů nemůže uživatel vědět, jaké i/y má napsat. Program proto obsahuje minimum slov, jejichž správné napsání vyžaduje znalost i obtížnějších gramatických jevů, aby zrakově postižený uživatel, který dané slovo nevidí jako předlohu, nebyl stresován jejich případnou neznalostí. Diktována jsou pouze česká slova s výjimkou slov „hardware” a „software” z důvodu naučit se i využívání klávesy pro psaní písmene „w”, žádné české slovo obsahující toto písmeno program [příloha č. 4] jsem v daném slovníku nenalezl. Lekce, kde to bylo možné (viz výběr slov programem), obsahují alespoň 35 slov. Celkem program umí uživateli nadiktovat 591 českých slov a 41 čísel s využitím všech číslic. Slova byla vybírána tak, aby pokryla co nejvíce různých písmen z předchozích lekcí. Při zkoušení jsou pak volena náhodná slova z dané lekce. Pro procvičení nových písmen je zvolena 70% pravděpodobnost výskytu slov s písmenem z poslední lekce a 30% pravděpodobnost pro slova z předchozích lekcí pro zopakování. Při psaní velkých a malých písmen je problém při informování nevidomého uživatele o velkém či malém písmenu. Diktováním postupu, resp. sdělováním informace, že má uživatel použít velké písmeno, se rychlost psaní snižuje. Nabízejí se dvě možnosti, jak uživatele naučit psát velká písmena. Jednou je diktování zeměpisných názvů, kdy by měl uživatel sám poznat, zda má napsat velké písmeno či nikoliv. Nevýhodou je nemožnost pokrytí prvních lekcí, kdy neexistují zeměpisné názvy pro danou kombinaci písmen a neúměrně větší databáze diktovaných slov. Program tedy umožňuje nastavit zkoušení z velkých písmen a v tomto případě je na začátku každého slova očekávané velké písmeno. Další možností by bylo, aby po uživateli byla požadována všechna písmena velká (problém se zapnutou klávesou CapsLock by se dal softwarově odstranit). Tato metodika by ale odpovídajícím způsobem nesimulovala pravděpodobný výskyt velkých písmen v běžném textu. Jestli program očekává nebo neočekává mezeru za každým slovem, lze nastavit v menu zkoušení.
9
2. Popis softwaru 2.1 Flexibilita Filosofie programu vychází z individuálních potřeb zrakově postižených osob a umožňuje individuální volbu nastavení programu (velikost písma, barvy pozadí, vzhledu, četnosti zpětné vazby, dosažené úrovně dovedností apod.). 2.1.1 Zvuky Zvuky je možné v programu libovolně měnit, bez narušení jeho funkčnosti. Do každé lekce lze přidat vlastní další slova, stačí je nakopírovat do {program}\Lekce\Slova\Lekce{CisloLekce}. Nově přidané slovo musí být ve formátu MP3 a název musí odpovídat slovu, které má být napsáno. Program nekontroluje, zda dané slovo patří do lekce. V případě přidání slova, je tedy nutné zkopírovat jej do správné lekce. Program je omezen na 800 slov. Lekce, kde jsou diktovány jednotlivá písmena, načítá konfiguraci ze souborů umístěných {program}\Lekce\Písmena\Lekce{CisloLekce}.txt. Do těchto souborů je možné přiřadit libovolná písmena do libovolné lekce. Lekce lze tedy libovolně upravovat. Program s menší obměnou pořadí nacvičovaných písmen postupuje na klávesnici logicky za sebou, není třeba toto nastavení měnit [tabulka č. 2]. Toto nastavení je možné jen pro nácvik psaní písmen, protože nelze reálně mít databázi libovolných slov pro libovolnou kombinaci písmen. Obsah souboru s definicí lekce vypadá takto: 6 e,i a,l,s,ů,d,k,f,j,r,u Lekce 6
Na prvním řádku je očekávané číslo lekce (int), na druhém řádku jsou nová nacvičovaná písmena, tedy písmena, jejichž výskyt bude v programu pravděpodobnější. Na třetím řádku jsou vypsána všechna písmena, která lze použít (lze je pro větší pravděpodobnost výskytu opakovat). Na dalším řádku může být komentář k lekci. Tato nabídka není z důvodu nemožnosti použití při diktování slov dostupná nevidomému uživateli. Zvuk jednotlivých diktovaných písmen nelze jednoduše změnit – jedná se o soubor, kde se posunuje program dle času. Tento postup byl zvolen, kvůli rychlosti programu. Pokud bude chtít uživatel změnit zvuky jednotlivých písmen, pak musí v souboru „pismena.wav“ dodržet časovou osu (případně změnit konstanty reverzním inženýrstvím). Zvuky navigace lze libovolně měnit, zaměněním MP3 souborů. Obrázky a ikonky lze rovněž změnit a to záměnou souborů GIF a JPG v adresáři imgs. 2.1.2 Portabilita Program nezapisuje žádné informace do registru či jiných speciálních míst a je tedy možné ho používat po zkopírování, není potřeba žádný instalátor. Je možné ho používat na USB disku i uživatelem, který nemá práva k instalování. Program potřebuje pro zápis nastavení i statistik práva a možnost ukládání do vlastní složky. I bez splnění těchto podmínek lze ale program spustit. Program může být nastaven pro používání zdravým člověkem, ale také tak aby vyhovoval slabozrakému či nevidomému uživateli. V programu lze změnit velikost písma, barvu písmen, barvu pozadí a zobrazení panelů. Následující obrázky ukazují různé nastavení programu. 10
2.1.3 Možnosti nastavení vzhledu programu
Obr. č. 1 – Ukázka nastavení 1
Obr. č. 2 – Ukázka nastavení 2
Obr. č. 3 – Ukázka nastavení 3
Obr. č. 4 – Ukázka nastavení 4
Obr. č. 5 – Ukázka nastavení 5
Obr. č. 6 – Ukázka nastavení 6 11
2.1.4 Přednastavené módy Program obsahuje čtyři přednastavené módy, které by měly pokrýt všechny uživatele s různou vadou zraku. Mód číslo 1 Tento mód je určen pro uživatele bez zrakového postižení či slabozraké. V programu jsou zobrazeny všechny panely – klávesnice, statistika, informace o chybách a text k opisování. Pokud uživatel nastaví tento mód a vypne zvuky, lze ho používat jako program, který není určen pro slabozraké či nevidomé. Jako výchozí je nastaveno diktování, takže i tento mód může používat nevidomý uživatel. Je to jediný mód, který zobrazuje i statistiky a výpis chyb, které uživatel v průběhu lekce udělal.
Obr. č. 7 – Ukázka programu v modu číslo 1 Mód číslo 2 Tento mód zobrazuje pouze klávesnici a slouží ke zdokonalení psaní všemi deseti prsty. Uživatel, pokud mu to zrak umožňuje, může sledovat na obrazovce rozložení klávesnice. Je zde nastaveno diktování, mód tedy může používat člověk s jakoukoli vadou zraku.
12
Obr. č. 8 – Ukázka programu v modu číslo 2 Mód číslo 3 Je zobrazen pouze panel opisování. Tento mód je určen pro slabozraké v případě, že si nastaví velký font (až 500 px), zkušenější uživatel si může nastavit i delší lekci. Využití módu pro zdravého uživatele je ještě širší, lze si nastavit i menší velikosti písma. Mód číslo 4 Tento mód je určen pro nevidomé uživatele. Není zobrazován žádný panel a text je pouze diktován. (může být velkým fontem zobrazen výpis chyb)
2.2 Psaní Nejdůležitějším úkolem programu je naučit uživatele základní postavení prstů na klávesnici a naučit ho správnému psaní. Rychlost psaní, kterou je možné se v tomto programu naučit, se odvíjí od typu lekce a nastavení. 2.2.1 Diktování písmen Pokud je spuštěna lekce, kde jsou diktována jednotlivá písmena, bude maximální rychlost, které lze dosáhnout, mnohem menší. Je třeba počítat s nějakou dobou pro reakci na sluchem přijatou informaci, která se běžně pohybuje kolem 0,2 - 0,3 sekundy. Průměrná délka vyslovení písmene trvá („délka zvuku“) 0,2 - 0,4 sekundy a je třeba ještě započítat dobu nutnou pro realizaci samotného stisknutí. Ta může být velmi různá. Teoreticky lze tedy při diktování dosáhnout až rychlosti psaní 90-100 úhozů za minutu. Myslím, že v praxi se hodnota bude pohybovat kolem 60-70 úhozů za minutu. Tedy přibližně 1 úhoz za sekundu. Při tomto typu diktování vyšších hodnot, resp. počtu úhozů za jednu minutu, nelze dosáhnout. Diktovaná písmena byla v programu [příloha č. 4] ořezána na nejmenší možnou délku. Zvuk nelze ořezat úplně přesně, aby nebyl problém s časovým maskováním (temporal masking). Časové maskování neznamená velký problém pro rychlost psaní. 13
Toto fyziologické „omezení“ se podílí na rychlosti psaní pouze 2,5 - 3%. 2.2.2 Diktování slov Pokud je spuštěna lekce, ve které jsou diktována celá slova, může být rychlost psaní uživatele větší, protože je počet reakcí na vyslechnutý zvuk nižší a celkový zvuk je kratší. Diktovaná slova mají průměrně 5 písmen. Počet reakcí tedy klesne o cca 80 %. Délka zvuku v tomto případě se pohybuje mezi 0,55 a 0,7 sekundami. Teoretická rychlost psaní, které lze při tomto módu dosáhnout, by se měla pohybovat až kolem 200 úhozů za minutu. Této hodnoty mohou dosáhnout uživatelé, kteří psali bezchybně a slova tedy nemusí být opakována nebo rušena, popř. si nemusí uživatel vyslechnout chybové hlášení nebo zvukový signál označující chybu. Skutečná rychlost psaní ale také velmi záleží na nastavení programu, konkrétně na tom jakou zpětnou vazbu si nastavil uživatel v dialogovém okně nastavení zvuku a nastavení zkoušení.
14
3. Ovládání programu Ovládání programu je možné dvěma způsoby - s využitím sluchu (zvukem) a ovládáním pomocí tří základních kláves: ESC pro zrušení volby, mezerník pro potvrzení volby a libovolnou jinou klávesou pro změnu hodnoty. Program lze ovládat také pomocí myši a grafického prostředí.
3.1 Seznámení s klávesnicí Ještě před výukou psaní je pro uživatele se zrakovým postižením důležité, aby si klávesnici tzv. „osahal". Na to program obsahuje speciální mód. Uživatel může stiskávat libovolné klávesy, jejich popis se zobrazí na obrazovce a do sluchátek; program informuje, která klávesa byla stisknuta, jaký prst má být použit a případně jaké jsou další funkce klávesy. Tento mód by si měl spustit každý uživatel jako první. Je v něm celkem 34 kláves – základní klávesy (písmena) a nejdůležitější klávesy pro ovládání počítače.
3.2 Základní postavení prstů na klávesnici Psaní s využitím všech deseti prstů je rychlé. Při jejich správném postavení na klávesnici je možné dosahovat rychlosti dosahující se až na hranici 400 úhozů za minutu. Pro takto rychlé psaní se už ale nehodí klasická klávesnice. Další výhodou psaní deseti prsty je rozložení zátěže na všechny prsty, celkové pohodlí při psaní a velká efektivita. Naučit se psát všemi deseti prsty a zautomatizovat si tuto dovednost je snazší, pokud člověk dodržuje správné postavení prstů od začátku nácviku, než když se musí přeučovat vlastní nesprávný styl. Pro člověka se zrakovým postižením je tento princip ještě mnohem důležitější než pro člověka zdravého. Uvedený postup je třeba dodržet i přes to, že „vlastní styl” bývá v první fázi nácviku rychlejší. Základní postavení prstů vyplývá ze snahy pokrýt celou klávesnici. Důležité je, naučit se z této pozice stisknout písmena vychýlením prstu a okamžitě se vrátit do základní pozice. Další velmi obtížnou částí je psaní velkých písmen a synchronizace stisknutí klávesy Shift jednou rukou a druhou rukou daného písmene. Při základním postavení prstů máme obě ruce položeny uprostřed klávesnice s postavením prstů uvedeným v následující tabulce:
Levá ruka
Znak
Pravá ruka
malíček a malíček prsteníček s prsteníček prostředníček d prostředníček prsteníček f prsteníček palec mezerník palec Tabulka č. 4 - Postavení prstů na klávesnici
Znak ů l k j mezerník
3.3 První spuštění programu Při prvním spuštění programu se otevře dialogové okno, ve kterém je uživatel se zrakovým postižením seznámen s ovládáním programu zvukem. Pokyny, resp. základní principy pro ovládání programu, vyvolání nabídek a nastavení programu jsou mu nadiktovány do sluchátek. Toto 15
dialogové okno se vyvolá stisknutím klávesy F1 - standardní klávesa pro nápovědu (vzhledem k jejímu postavení na klávesnici vhodná i pro zrakově postižené uživatele). Úvodní dialog lze zavřít buď klávesou Esc nebo libovolnou jinou klávesou. Uzavře-li ho uživatel jakoukoli jinou klávesou než Esc, bude aktivní po každém spuštění programu. Při ukončení úvodního dialogu klávesou Esc, úvodní dialog se už po spuštění programu naopak neotevře (předpokládá se, že pokud uživatel použije klávesu Esc, je s klávesnicí již trochu seznámen). Po ukončení tohoto dialogu lze už spustit libovolnou lekci. Pokud je uživatel schopen ovládat program v grafickém prostředí, může program ovládat přes klasické menu. Uživatel se zrakovým postižením, který není schopen takto program ovládat, zmáčkne po spuštění programu libovolnou klávesu, kterou vyvolá nabídku typu výuky. Dále již pokračuje podle zvukové navigace. Program zobrazuje grafická okna, i když je ho možné ovládat pouze podle zvukových instrukcí. Zobrazování dialogu umožňuje používat programu i uživatelům s menší zrakovou vadou i bez zrakového postižení. Výchozí nastavení programu i ostatní nabídky jsou přizpůsobeny nevidomým a slabozrakým uživatelům: velkým písmem zobrazené informace v navigačním menu velkým písmem zobrazený diktovaný text pro nácvik psaní krátké lekce možnost nastavit program tak, že přechází na diktování jiného slova v případě, že uživatel udělá chybu (lze nastavit pro počet 1 až 6 chyb v jednom slově) zpětná vazba o chybě (informování uživatele, která klávesa měla být použita) ignorování mezerníku při psaní (diktování) jednotlivých slov nepoužívání velkých písmen Po spuštění programu a stisknutí libovolné klávesy se zobrazí dialog s výběrem typu lekce:
Obr. č. 9 – Dialogové okno „Výběr typu lekce“ Zde si může uživatel vybrat libovolnou klávesou typ lekce. Při každé změně má zvukovou zpětnou vazbu, kde se právě nachází (např. Písmena, Hra). Pro spuštění pak použije klávesu mezerník. Pro posun je v operačním systému běžně používána klávesa Tab, tuto klávesu lze použít také. Po výběru typu lekce se zobrazí okno s výběrem čísla lekce. I zde se uživatel vybírá lekci libovolnou klávesou při každé změně hodnoty je informován do sluchátek (např. „Lekce číslo tři“). Pro spuštění lekce pak použije uživatel mezerník.
16
Obr. č. 10 – Dialogové okno „Výběr lekce“ Po spuštění lekcí Písmena či Slova se otevře dialog s informací, která písmena jsou v lekci nová, kde se nacházejí na klávesnici a jakým způsobem se správně píší, resp. jaké je jejich správné postavení na klávesnici. Tyto pokyny jsou nadiktovány. Po jejich vyslechnutí může uživatel stisknout libovolnou klávesu a bude informován o prvním slovu v lekci. Může začít psát.
3.4 Ovládání programu pro slabozraké Program umožňuje libovolné nastavení velikosti písma do velikosti fontu 500. Každému písmenu je přidělena jiná barva. Je možné také nastavit krátkodobou změnu (bliknutí) pozadí, na kterém je text napsán. Bliknutí slouží jako zpětná vazba. Barva pozadí je při bliknutí stejná jako barva právě napsaného písmena. Pozadí může být nastaveno přes celou obrazovku. Využití nabídky programu závisí na potřebách slabozrakého uživatele. Pokud není schopen ani při nastavení písma na maximální velikost ovládat program v grafickém prostředí, může se řídit pouze zvukovými pokyny. Doporučovaná volba je černé písmo na žlutém pozadí.
3.5 Ovládání programu pro nevidomé Až na několik nabídek, které nemají pro nevidomé význam, je program možné plně ovládat pomocí klávesnice a mít zpětnou vazbu do sluchátek. Uživatel je informován v jaké nabídce se právě nachází. Nastavení programu, při kterém uživatel postupuje pouze podle pokynů vnímaných sluchem, trvá déle, neboť uživatel si musí vyslechnout všechny nabídky a možnosti. Okno nabídky je možné zavřít klávesou Esc. Tato klávesa je standardní a vzhledem k svému postavení na klávesnici i vhodná pro uživatele se zrakovým postižením. Změna hodnoty nastavení se provádí klávesou mezerník, taktéž standardní klávesou pro tuto akci. Vzhledem ke svému umístění na klávesnici je také vhodná pro nevidomé. Pro změnu položky může uživatel použít libovolnou jinou klávesu (kromě speciálních kláves typu Win či klávesových zkratek operačního systému). Standardní klávesa pro tuto akci je tabulátor a tuto klávesu lze použít v programu také, ale domnívám se, že je pro nevidomé méně vhodná než klávesa mezerník. Proto program preferuje užívání klávesy mezerník. Zavření a uložení dialogu se provádí standardně klávesou Enter, v programu je sice možné ji použít, ale uživatel ji používat nepotřebuje, neboť může pomocí libovolné klávesy přejít na nabídku uložení a potvrdit ji mezerníkem. O každém tomto kroku je 17
informován.
Klávesa
Funkce
Klávesa ruší dialog či volbu. ESC Klávesa mění či potvrzuje volbu mezerník Spouští lekci, posun na další nastavení Libovolná klávesa F1 Vyvolá nápovědu Výběr nastavení F2 F3 Nastavení klávesnice F4 Nastavení zkoušení F5 Nastavení zvuků F6 Nastavení zobrazení F7 Teorie psaní na klávesnici F8 Teorie psaní velkých písmen F9 Teorie psaní Tabulka č. 5 – Tabulka kláves (tučně jsou označeny klávesy nutné pro používání programu) Nevidomému uživateli je přístupná nabídka nastavení hlasitosti pro přehrání zvukového souboru. Ani při nastavení zvuku na minimum, by nemělo dojít k tomu, aby uživatel zvuk vůbec neslyšel (v závislosti na nastavení hlasitosti v operačním systému či hardwaru počítače).
3.6 Ovládání programu obecně Program není primárně určen pro lidi bez zrakového postižení, přesto lze tento program používat jako jakýkoli jiný výukový software na psaní. Všechny zvuky je možné vypnout jednou jedinou volbou v nastavení. Uživateli jsou dostupné i dvě nabídky, které pro zrakově postiženého nemají význam a tím je nastavení barev a textu pro panel informace a log špatně napsaných písmen.
3.7 Zpětná vazba Pro zpětnou vazbu jsou využívány kompenzační mechanizmy zrakově postižených lidí, tj. hmatové a sluchové vnímání. Uživatel má možnost nastavení několika způsobů reakce programu na chyby. Kromě standardního upozornění na chybu (zvukový signál – cinknutí), lze nastavit program nastavit i tak, aby byl měl uživatel možnost ihned si chybu opravit, tzn. stisknout správnou klávesu s využitím správného prstokladu. Proto je mu rovněž prostřednictvím sluchu předána informace, jak má postupovat – jaké písmeno má napsat, kterým prstem má stisknout klávesu pro napsání právě diktovaného písmene a jak toto písmeno napsat (jaký je třeba vychýlit prst z jeho základního postavení na klávesnici). Program lze také nastavit, aby chybu ignoroval. V jiných programech je stisknutí klávesy provázeno zvukem. Tento program samotný zvuk stisknutí klávesy neumožňuje. Jako zpětná reakce je rovnou (pokud je takto program nastaven) nadiktováno písmeno, které bylo stisknuto. Je to mnohem efektivnější způsob informování nevidomého uživatele, pro kterého ho izolovaná informace – „stisknuto – nestisknuto“ nemá potřebný formativní význam zpětné vazby.
3.8 Nastavování vlastností Problém s nastavením vlastností programu u nevidomého je nutnost kontinuálního vyslechnutí každé nabídky. Proto je nastavení programu rozděleno do 4 dialogů, které urychluje volbu. 18
Pro ovládání těchto dialogů jsou potřebné dvě klávesy: mezerník pro potvrzení či změnu volby a libovolná klávesa pro posun na další položku. Lze používat i standardních kláves - klávesu Tab pro posunu na další položku, klávesu Ecs pro zavření okna bez uložení nového nastavení a klávesu Enter pro uložení nastavení. Při ovládání programu je uživatel zvukem informován při těchto akcích:
Typ akce
Zvuk
Pokyny
Otevření okna ANO Informace o ovládání a zavření nabídky Návrat do okna ANO Informace o návratu Zavření okna ANO Informace o zavření okna Posun na jinou položku ANO Informace o aktuální položce a jejím nastavení. Změna hodnoty ANO Informace o nové hodnotě položky Změna položky NE Uživatel zvukovou nápovědu zřejmě nepotřebuje. kurzorem Zavření okna přes X NE Uživatel zřejmě zvukovou nápovědu nepotřebuje Tabulka č. 6 – Události dialogů a jejich reakce
3.9 Přiřazení barvy klávesám - „obarvení kláves“ Dobrou pomůckou, jak usnadnit učení slabozrakému uživateli a uživateli bez zrakového postižení je přiřazení barvy ke každé klávese. Optimální postup je následující: prsty jedné ruky se používají pouze pro klávesy stejného odstínu barvy. Např. prsty levé ruky jsou určeny pouze pro klávesy, kterým byl přiřazen tmavý odstín barvy, logicky tedy prsty pravé ruky jsou určeny pro použití kláves, kterým byl přiřazen světlý odstín barvy. Pokud je v nabídce označena volba „obarvovat klávesy”, jsou písmena, která má dotyčný napsat, obarvena právě touto barvou. Další možností, jak využít barvy při nácviku psaní, je zabarvení celého „plátna“ touto barvou po stisknutí klávesy. Je to zpětná informace pro slabozraké uživatele. „Plátno“ lze roztáhnout na celou obrazovku a podle barvy je pak možné sledovat, zda byla klávesa stisknuta bez nutnosti čtení písmen na obrazovce.
3.10 Zrušení zvuku Přehrání zvukového souboru trvá nějaký čas. Jsou dvě možnosti, jak zrušit zvuk. Zablokováním klávesnice a vyčkáním, dokud se nahrávka nepřehraje do konce. Tento krok je neefektivní. Program umožňuje stisknutím klávesy zvukový soubor ukončit. Toto umožňuje zkušenějšímu uživateli rychlejší práci, začátečník si ale může vyslechnout celou nahrávku. Pro nevidomého uživatele, který používá program pomocí klávesnice a zvuku je program nastaven tak, že není přístupná položka vypnutí zvuku. Není tedy možné zvuk vypnout nechtěně a dostat se do žádné neozvučené nabídky a tudíž ani do situace, kdy by nebyl uživatel informován o tom, kterou klávesou má pokračovat. Uživatel je informován o každé otevřené nabídce. Pokud se omylem přepne do jiné aplikace (myš či kombinace kláves Alt+Tab), je mu to sděleno a program ho navede zpět. Pokud uživatel neví, kde se právě nachází, dostane tuto informaci po stisknutí libovolné klávesy nebo klávesy Esc.
3.11 Ukončení lekce O ukončení lekce je uživatel informován a současně dostává zpětnou vazbu o rychlosti psaní a počtu chyb. O rychlosti psaní – počtu úhozů za jednu minutu - je informován s odstupňováním po pěti úhozech (rychlost je zaokrouhlena na nejbližší hodnotu, kterou je schopen program přehrát). Zpětná vazba o počtu chyb je odstupňována po jedné v rozmezí od 1 do 10 chyb. Pokud uživatel 19
udělá více než 20 chyb, je mu sděleno „více než 10 chyb”.
Obr. č. 11 – Dialogové okno „Konec lekce“ Program umí „přečíst“ chyby (chybné úhozy) a sděluje je formou: „Místo X jste napsal Y” nebo se ozve pouze zvukový signál (cinknutí). Formu si nastaví uživatel. Takto umí program přečíst celý log – tedy všechny chyby, které v průběhu lekce uživatel udělal. Zpětnou vazbu o chybě lze nastavit různými způsoby, v závislosti na dosažené úrovni dovednosti uživatele. V počáteční fázi nácviku je vhodnější nastavit si četnější zpětnou vazbu. Pokud uživatel v jednom slově udělá více jak jím nastavený počet chyb, po kterém následuje zvuková informace o chybách, psaní slova se zruší. Zpětnou vazbu lze nastavit i až na konec lekce. Tato volba je vhodná pro velmi pokročilého uživatele-žáka, naopak je nevhodná, pokud četnost chyb je vysoká. Pokud dělá uživatel mnoho chyb, je možné si nastavit i jen velmi krátkou lekci (5 slov). 3.12 Jednoduchá hra Program obsahuje jednoduchou hru. Diktovaná slova je nutné napsat ve stanovém časovém limitu. Hra vyžaduje dvoukanálový zvuk. Do jednoho sluchátka je diktováno slovo, ve druhém běží informace o časovém limitu. Lze nastavit stupeň náročnosti, tj. délku časového limitu a lekci, ze které mají být slova použita. Uživatel má 5 životů obdobně jako v počítačové hře. Po vypršení časového limitu, přijde uživatel o jeden život. Úkolem je dostat se na konec lekce. Pro vidícího uživatele je zobrazena jednoduchá postavička typu PacMan. A font je zvolen přes celou obrazovku. Pro hru platí podobná nastavení jako pro zkoušení psaní slov či písmen.
20
4. Implementace 4.1 Obecné informace Program je vytvořen ve vývojovém prostředí NetBeans (www.NetBeans.org). Není ale použita prostředí Mantisse k tvorbě dialogů. Program je tedy přenositelný do jiného vývojového prostředí. Nepotřebuje žádnou knihovnu pro rozmístění komponent, potřebuje ale jiné komponenty (viz podkap. 4.8 Použité komponenty). Hlavní metoda public static void main(String[] args) je umístněna v souboru Main.java. V tomto souboru jsou také definovány dialogy [tabulka č. 8] a hlavní proměnné. Např. cesty ke zdrojům, zda je aplikace spuštěna poprvé či nikoliv. 4.2 Formát zvuků V programu jsou použity dva formáty zvuků: MP3 a WAV. Formát MP3 je používán pro diktování slov, textů a nastavení, kvalita je 128kb/s 44 100 Hz Stereo. Program obsahuje následující zvuky:
Typ zvuku
Počet
Diktovaná slova Diktovaná písmena Navigace Teorie Tabulka č. 7 - Počet zvuků v programu
632 34 392 3 + 20
Formát WAV je použit pouze k diktování jednotlivých písmen. Diktovaná písmena jsou uložena v jednom jediném souboru (pismena.wav) a jsou spouštěna pomocí posouvání se v souboru.
4.3 Seznam a popis dialogů Krátký popis hlavních dialogů. hlavniOkno – Hlavní okno programu, na kterém jsou zobrazeny panely klávesnice, výpis chyb, text který má být opisován a panel informace (v závislosti na nastavení uživatelem). oknoZkouseni, oknoZvuky, oknoZobrazeni a oknoKlavesnice – Tyto dialogy slouží k nastavení vlastností programu uživatelem. Nevidomý uživatel se pohybuje po jednotlivých položkách pomocí libovolné klávesy a hodnotu mění mezerníkem. Aktuální pozice je naznačena červeným pozadím. oknoKonecLekce – Okno [obrázek č. 11], které zobrazuje informace o skončené lekci (nevidomý uživatel si může nechat tyto informace přečíst). Toto okno nabízí volby: Návrat do okna hlavní aplikace, zopakovat lekci a spustit další lekci. oknoXVyberMenu – Okno, které slouží pouze pro nevidomé uživatele pro výběr typu nastavení programu, ostatní uživatelé mohou spustit dialogy pro výběr nastavení z hlavního okna aplikace. oknoPisTo – Okno, které slouží ke spuštění hry, podobně jako v ostatních oknech s nastavením se uživatel pohybuje po položkách pomocí libovolné klávesy a hodnoty mění mezerníkem. oknoUniverzalni – Okno, které zobrazuje informační text, parametrem je číslo informace, která má být zobrazena a přehrána. 21
Následující tabulka ukazuje seznam všech dialogů, který program obsahuje. Dialogy jsou definovány v souboru Main.java. Jsou zděděny od třídy JDialog (v případě hlavního okna od JFrame) a využívají komponenty z palety Swing.
Jméno okna
Jméno souboru
Zvuková navigace
hlavniOkno HlavniOkno.java oknoAbout OknoAbout.java oknoBarvaPisma OknoBarvaPisma.java oknoKlavesnice OknoKlavesnice.java oknoKonecLekce OknoKonecLekce.java oknoPismenaSlova OknoPismenaSlova.java oknoPisTo OknoPisTo.java oknoPrstoklad OknoPrstokla.java oknoPrvniSpusteni OknoPrvniSpusteni.java oknoSlepSpusteni OknoSlepSpusteni.java oknoTeorie OknoTeorie.java oknoSpusteniLekce OknoSpusteniLekce.java oknoUkoncitLekci OknoUkoncitLekci.java oknoUniverzalni OknoUniverzalni.java oknoVelikostPisma OknoVelikostPisma.java oknoXVyberMenu OknoXVyberMenu.java oknoZkouseni OknoZkouseni.java oknoZobrazeni OknoZobrazeni.java oknoZvuky OknoZvuky.java oknoStatistiky Statistiky.java Tabulka č. 8 – Seznam dialogů
ANO ANO ANO ANO ANO ANO ANO NE ANO ANO ANO ANO ANO ANO ANO ANO ANO ANO ANO NE
Popis funkce Hlavní okno programu Zobrazení informace o aplikaci Změna barvy písma Nastavení klávesnice Po skončení lekce Výběr typu zkoušení Spuštění hry Obrázek psaní deseti prsty Informace o programu Informace po prvním spuštění Teorie psaní na klávesnici Informace o spuštění lekce Dotaz na ukončení lekce Okno pro informování. Nastavení velikosti písma Výběr menu nastavení Nastavení zkoušení. Nastavení zobrazení Nastavení zvuků Statistika programu
4.4 Objektové modely 4.4.1 Model používání programu Model, který ukazuje postup nevidomého uživatele při používání programu, pokud nenastavuje vlastnosti programu.
22
Obr. č. 12 - Model používání
23
4.4.2 Model nastavování Model procházení nevidomého uživatele programovou nabídkou.
Obr. č. 13 – Model nastavování
24
4.4.4 Model objektů ukládání Program si ukládá nastavení do serializovaných souborů s koncovkou „dat”. Pro každé nastavení je vytvořen vlastní soubor: klavesnice.dat zkouseni.dat
zvuky.dat zobrazeni.dat
Objekty, které jsou do soborů ukládány, jsou definovány v souborech: ObjectKlavesnice.java ObjectZkouseni.java
ObjectZvuky.java ObjectZobrazeni.java
Ukládání a načítání těchto objektů ze souboru je definováno v souboru Load.java, kde k tomu slouží funkce: void loadKlavesnice() void saveKlavesnice() void loadZobrazeni() void saveZobrazeni()
void loadZkouseni() void saveZkouseni() void loadZvuky() void saveZvuky()
25
4.5 Ukázky důležitých částí zdrojových kódů 4.5.1 Vlastnosti zvuku Přehrávání souborů MP3 v Javě Formát MP3 byl vybrán vzhledem k jeho menší velikosti oproti formátů WAV. Nevýhodou tohoto formátu je nutnost jeho dekování. Domnívám se, že při rychlosti dnešních počítačů to není problém. Podle měření javazoom je třeba na dekování MP3 1% výkonu CPU na Intel Pentium IV 2Ghz s JRE 1.5.0 a 12% výkonu CPU na Intel Pentium III 1Ghz s JRE 1.4.1 26
Jazyk Java nemá podporu přehrávání souborů MP3 a je proto nutné použít nějakou externí knihovnu, která toto umožňuje. Použil jsem knihovnu MP3SPI, jejíž výhodou je snadná práce s MP3 soubory a velké množství funkcí. MP3SPI potřebuje ke své práci JRE verze 1.3 a vyšší. Aby bylo možné přehrávat formát MP3 je nutno nastavit proměnnou CLASSPATH a přidal do ní cestu ke knihovnám JLayer, Tritonus a MP3SPI, tedy soubory jl1.0.jar, share_tritonus a mp3spi1.9.4.jar. Tento kód je minimální pro přehrání souboru MP3 v Javě s využitím MP3SPI. import java.io.IOException; import javax.media.GainControl; import javax.sound.sampled.*; public class ObjectZvuky2 implements Runnable { AudioInputStream as; AudioFileFormat aff; AudioFormat decodedFormat; FloatControl m_gainControl; SourceDataLine line; AudioInputStream din = null; public void run() { try{ AudioFormat baseFormat = as.getFormat(); decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,baseFormat.getSampleRate(),16, baseFormat.getChannels(),baseFormat.getChannels() * 2,baseFormat.getSampleRate(),false); din = AudioSystem.getAudioInputStream(decodedFormat,this.as); byte[] data = new byte[4096]; line = getLine(decodedFormat); if (line != null) { line.start();} int nBytesRead = 0, nBytesWritten = 0; while (nBytesRead != -1) { nBytesRead = din.read(data, 0, data.length); if (nBytesRead != -1) nBytesWritten = line.write(data, 0, nBytesRead); } line.drain(); line.stop(); line.close();din.close(); } as.close(); }catch (Exception e) {e.printStackTrace();}
Je využito tříd AudioFormat a AudioInputStream. Zvuk je pak dekódován pomocí třídy AudioFormat, jehož konstruktor je: AudioFormat(AudioFormat.Encoding encoding, float sampleRate, int sampleSizeInBits, 27
int channels, int frameSize, float frameRate, boolean bigEndian) Parametry jsou v programu: AudioFormat.Encoding.PCM_SIGNED – způsob kódování, baseFormat.getSampleRate – počet vzorků za sekundu, 16 – počet bitů každého rámce, baseFormat.getChannels() - počet kanálů (mono =1, stereo = 2), baseFormat.getChannels() * 2 – velikost rámce, baseFormat.getSampleRate() - počet rámců za sekundu, false – zvuk není ve formatu BigEnddian. Toto nastavení jsem získal z javazoom.net Následující důležitý řádek udává, jak velká data se mají přečíst (buffer), než se zapíší do proměnné line (třída SourceDataLine). Toto číslo jsem nalezl v příkladu javavazoom.net a domnívám se, že je optimální. byte[]data = new byte[4096];
Spuštěný zvuk lze pak zastavit pomocí metod: line.flush(); line.stop();
4.5.2 Nastavení zvuku V programu je možné nastavit hlasitost. Změna hlasitosti se provádí přes třídu FloatControl, která umožňuje i další nastavení zvuku, jako je vyvážení (také použito) či equalizér (není použito – využívá se třídy javazoom.spi.PropertiesContainer). MP3SPI umožňuje také čtení informací o MP3 pomocí tříd TAudioFileFormat a baseFileFormat. Nastavení hlasitosti FloatControl gain = (FloatControl)line.getControl(FloatControl.Type.MASTER_GAIN); Rozsah hodnot se dá zjistit pomocí funkcí: float gain.getMaximum(), float gain.getMinimum() a float gain.getPrecision(). V programu si může uživatel nastavit hlasitost v nastavení zvuku. Minimální hodnota je posunuta, aby nedošlo k nechtěnému ztlumení na neslyšitelnou mez nevidomým uživatelem a neznemožnilo to používání programu. Nastavení vyvážení zvuku
28
FloatControl balance = (FloatControl)line.getControl(FloatControl.Type.BALANCE); Rozsah hodnot se dá zjistit pomocí funkcí: float balance.getMaximum(), float balance.getMinimum() a float balance.getPrecision(). Rozsah hodnot se pohybuje od hodnoty -1.0 (pouze levý kanál zvuku). Do hodnoty +1.0 (pouze pravý kanál zvuku). Výchozí nastavení je hodnota 0.0 (stejná hlasitost zvuku z obou kanálů). Uživatel si tuto hodnotu může libovolně nastavit. Těchto funkcí je také využito při hře, kdy je do jednoho kanálu (-1.0) diktováno slovo a ve druhém (+1.0) běží časový limit. 4.5.3 Překreslování pozadí Pro zabránění blikání obrazovky při překreslování plátna (java.awt.Canvas) je použit DoubleBuffering při překreslování pozadí. public final synchronized void update( Graphics g ) { int width = size().width; int height = size().height; if( (OSImage == null) || (width != OSSize.width) || (height != OSSize.height) ) { OSImage = createImage( width, height ); OSSize = size(); OSGraphics = OSImage.getGraphics(); OSGraphics.setFont( getFont() ); } OSGraphics.setColor( Main.oknoZobrazeni.barvaPozadiC ); OSGraphics.fillRect( 0, 0, width, height ); paint( OSGraphics ); g.drawImage( OSImage, 0, 0, null ); }
4.6 Třídy V programu jsou dodržovány konvence, dle doporučení firmy Sun. Všechny třídy, které představí okna aplikace, mají prefix „Okno” a všechny panely mají prefix „panel” a objekty „object“. V následujícím přehledu jsou uvedeny nejdůležitější třídy s popisem a funkcí. Název třídy: AutomatZkouseni.java Popis: Třída slouží k obsluze zkoušení – vyhodnocuje, zda bylo stisknuto správné tlačítko a dle nastavení programu spouští obsluhu. Třída obsahuje funkce, jejichž vstupem je stisknutá klávesa a jejichž funkcí je vyhodnotit správnost a posunout ukazatel na další slovo, případně informovat 29
o chybě dle nastavení: insert(char pismeno) insertToGame(char pismeno)
insertToSlovo(char pismeno)
Třída vyhodnocuje chyby u slov, písmen a hry jinými způsoby. Některé nastavení (rušení slova, opakování atd.) nemají efekt na drkotání Další funkce v této třídě, jejichž úkolem je vygenerovat text, který má být diktován a opisován, jsou: public String nahodne(String[] pouzivanaPismena, String[] novaPismena) public void startNaplnit(String[] pouzivanaPismena, String[] novaPismena, int pocetGener, int delkaSlova, boolean fix) Název třídy:Spousteni.java Popis: Vlákno sloužící ke spouštění jednotlivých písmen (písmena.wav) pomocí posouvání se v souboru a metod Clip.setFramePosition(int pozice) a Clip.start(). Název třídy: BufferPlayer Popis: Tato třída umožňuje předem nastavit zvuky k přehrávání. Tomuto účelu je určena funkce add, jejímž parametrem je adresa k zvukovému souboru a doba, za kterou má být zvukový soubor spuštěn. Po zavolání této funkce se záznam vloží na konec fronty. Metoda clear slouží k vymazání celé fronty. Název třídy: DefiniceKlavesnice.java Popis: Zde je uloženo nastavení klávesnice, tj. informace o klávesách - jejich barva, velikost, umístění a popis. Funkce public void resizeIt(int i, int velikostMezer, int velikostKlavesy, int velikostY, boolean qwerty, boolean cisla) slouží k přepočítání velikosti kláves při změně velikosti okna. Název třídy: GameThread Popis: Slouží ke hře a spouští dva thready SmartPlayer (jeden s časovým limitem do pravého kanálu a druhý s diktovaným slovem do levého kanálu). Název třídy: HlavniOkno.java. Popis: Hlavní okno programu, které obsahuje menu, navigaci, rozmístění komponent a pomocné funkce pro spuštění lekce: preLoading(int i), preLoadingPismena(int i), preLoadigSlova(int i), jejichž vstupem je číslo lekce. Pro spuštění hry slouží funkce void spustitHru(int i, int i0) s parametry číslo lekce (int i) a rychlost hry (int 0). Název třídy: JFontChooser. Popis: Použitá třída [4.8], dialogové okno pro výběr dostupného fontu. Název třídy: Uhozy.java Popis: Vlákno, které se stará o počítání rychlosti psaní. Počet úhozů za minutu se zjišťujte a aktualizuje vždy jednou za 100ms. Rychlost psaní se počítá od první stisknuté klávesy.
30
4.7 Vlákna Program obsahuje několik vláken, která jsou potřeba pro správný chod programu. Nejvíce vláken současně běží při hře, kdy je použito vlákno pro spuštění levého a pravého kanálu zvuku. V kritických sekcích je použito zámku pomocí příkazu „synchronized“, který zaručuje, že během takto označené metody či části kódu nemůže dojít k jejímu přerušení.
Vlákno
Popis
Hlavní vlákno
Instalace po spuštění programu
Úhozy
Vlákno počítající rychlost psaní
ObjectZvuky2
Vlákno spouštěcí zvuky
Bliknuti
Vlákno starající se o bliknutí plátna
GameThread
Vlákno obsluhující hru
Spousteni
Slouží ke spouštění zvuku písmene
Tabulka č. 9 – Typy vláken a jejich popis 4.8 Použité komponenty MP3SPI Nejdůležitější komponenta je knihovna MP3SPI (Service Provider Interface - or „Driver“ for JavaSound API), která přidává možnost přehrávání formátu MP3 do JavaSE. Tato knihovna je Open Source (jsou publikovány zdrojové kódy) a pod licencí LGPL a je tedy možné používat tuto knihovnu v libovolně licencovaném programu a upravovat zdrojové kódy – jejich šíření jen pod stejnou licencí. Přehrávání MP3 pomocí MP3SPI není dle jejího tvůrce náročné na procesor (využití CPU se pohybuje v jednotkách procent). MP3SPI umožňuje i pokročilou práci se soubory MP3 editace Idv3 a ekvalizér či čtení/zápis vlastností tohoto zvukového souboru. JFontChooser Druhou použitou komponentou je třída JFontChooser – dialog určený k výběru písma, který Java neobsahuje. Je podobný standardnímu dialogu výběru fontu z operačního systému Windows, slouží k vybrání písma pro hlavní menu či písma, kam se píši chyby. Tato nabídka nemá význam pro nevidomé a není jim tedy dostupná. Autorem této třídy je Masahiko SAWAI.
31
5. Struktura programu 5.1 Soubory a adresáře programu
Adresář chyby obsahuje nadiktované chyby ve tvaru 0chyb.mp3 -10chyb.mp3. Adresář info obsahuje hlavní zvuky programu. Adresář imgs obsahuje ikonky a obrázky ve tvaru jpg či gif. Adresář infoLekce obsahuje teoretitcké-úvodní slovo k lekcím ve tvaru lekce1-lekce20.mp3. Adresář klavesy obsahuje zvuky jednotlivých kláves ve tvaru pismeno.mp3. Adresář knihovny obsahuje nezbytné knihovny pro spuštění programu. Adresář lekce obsahuje diktovaná slova a písmena rozdělená do podadresářů dle lekce. 32
Adresář navigace obsahuje zvuky k navigaci. Bakalarka.jar je soubor, kterým jde spustit samotný program. Soubor klavesnice.dat - je v něm uloženo nastavení klávesnice. Soubor spusteno – soubor se vytvoří, pokud již byla aplikace jednou spuštěna. Soubor Spustit - spouští aplikaci. Soubor statistiky – slouží k ukládání statistik. Soubor zkouseni.dat – je v něm nastavení zkoušení. Soubor zobrazení.dat – nastavení zobrazení. Soubor zvuky.dat – nastavení zvuků.
6.2 Soubor manifest (vygeneroval vývojové prostředí NetBeans 5.5.1 []) Manifest-Version: 1.0 Ant-Version: Apache Ant 1.6.5 Created-By: 1.6.0_03-b05 (Sun Microsystems Inc.) Main-Class: bakalarka.Main Class-Path: lib/mp3spi1.9.4.jar lib/tritonus_share.jar lib/jl1.0.jar l ib/junit-4.1-src.jar X-COMMENT: Main-Class will be added automatically by build
Main-Class: Hodnota udává cestu, kde je umístěna funkce main. Class-Path: Hodnota udává cestu ke knihovnám programu.
33
6. Technické parametry 6.1 Použitý software K tvorbě tohoto programu bylo použito vývojového prostředí NetBeans 5.5.1(www.NetBeans.org). K nahrání a stříhání zvuků byl použit program GoldWave (www.GoldWave.com). Zvuky byly následně upraveny softwarem MP3Gain (mp3gain.sourceforge.net), aby měly stejnou hlasitost v celém programu. K tvorbě a úpravě obrázků byl použit program Gimp (www.Gimp.org) a IfranView (www.IranView.de). 6.2 Nároky a požadavky Pro správný chod programu je nutné alespoň 256 MB RAM. Rychlost procesoru alespoň 1,2 Ghz (v závislosti na typu). Velikost programu je 40 MB. Jediným softwarovým požadavkem je Java Runtime Environment (JRE), který je potřeba pro běh aplikací psaných v Javě. Pro ukládání 34
nastavení jsou potřeba práva na zápis to vlastní složky. Pro diktování je nutný jeden reproduktor, pro hraní hry dva reproduktory. Volné místo na daném médiu pro ukládání musí být pouze pro uložení nastavení a statistik (v řádu jednotek KB), program nepotřebuje žádné místo pro swap.
Minimální konfigurace Procesor
Pentium IV – 1,2 GHz nebo ekvivalentní Operačních paměť 256 MB RAM Volné místo na disku 40 MB Operační systém Libovolný s JRE Java Runtime Environment 1.4 a vyšší. Ostatní Libovolná zvuková karta Tabulka č. 10 – Minimální konfigurace
Doporučená konfigurace Procesor
Pentium IV – 1,8 GHz nebo ekvivalentní Operačních paměť 512 MB RAM Volné místo na disku 40 MB Operační systém Libovolný s JRE Java Runtime Environment 1.4 a vyšší. Ostatní Libovolná zvuková karta Tabulka č. 11 – Doporučená konfigurace Spuštění programu v operačním systému MS Windows V novějších instalací JRE je Java asociována se soubory jar a je možné program spustit přes soubor Bakalarka.jar. Pokud není soubor .jar asociován, pak lze program spustit pomocí souboru Psani.VBS, který obsahuje jednoduchý script na spuštění: Dim SysVarReg, Value Set SysVarReg = WScript.CreateObject("WScript.Shell") verze = SysVarReg.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\CurrentVersion") cesta=SysVarReg.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\"& verze & "\JavaHome") cesta=cesta & "\bin\java.exe" set objShell = CreateObject("Shell.Application") objShell.ShellExecute cesta, "-jar Bakalarka.jar", "", "open", 0 Tento script si přečte z registrů operačního systému MS Windows aktuální verzi JRE a hodnotu „Java Home“. Poté spustí program pomocí metody „ShellExecute“ java.exe s příslušnými parametry. Program lze také spustit pomocí příkazového řádku: 35
{cesta}\java -jar “{cesta}\Bakalarka.jar” Uvozovky jsou nutné pouze tehdy, pokud cesta obsahuje mezery. Příklad spuštění: C:\Program Files\Java\jre1.6.3_0\java -jar “C:\Vyuka\Psani\Bakalarka.jar” Spuštění na operačním systému Linux Pro spuštění lze využít terminál/bash. ./{cesta}java -jar “{cesta}Bakalarka.jar” Bakalářská práce neřeší samotné spuštění programu z operačního systému. 6.3 Srovnání s programem „Talking Typer“ Srovnání Žádný český počítačový výukový program pro psaní osob se zrakovým postižením jsem na Internetu nenalezl. V anglickém jazyce existuje software s názvem „Talking Typer” od „American Printing House for the Blind”. Program „Psaní pro zrakově postižené“ je ve srovnání s programem „Talking Typer” mnohem jednodušší na ovládání. V programu jsem se vyhnul jakýmkoliv klávesovým zkratkám, které nejsou nutné k jeho ovládání, aby nedošlo k nechtěnému vyvolání okna nabídky. Také se domnívám, že klávesové zkratky v programu „Talking Typer” jsou pro nevidomého uživatele příliš obtížné. Program „Psaní pro zrakově postižené“ je přenositelný na libovolný operační systém, ve kterém lze pustit Java aplikace. (Možnost instalace JRE, podpora Swing....). Nevyžaduje instalaci, která u programu „Talking Typer” není přizpůsobena nevidomým uživatelům. Program nemá tak velké požadavky ohledně konfigurace počítače, dle uživatelského manuálu je nutná následující minimální konfigurace pro spuštění tohoto programu:
Komponenta
Minimální hodnota
CPU 300 Mhz a více Operační paměť 96 MB a více Volné místo na disku 20 MB, 700 MB pro nejkvalitnější zvuky Zvuková karta libovolná Prohlížeč Internet Explorer 5.5 a vyšší Tabulka č. 12 - Minimální konfigurace pro program „Talking Typer” Menší požadavky programu „Talking Typer“ jsou proto, že pro jeho běh není nutný běh virtuálního stroje Javy. Zvuky má program uloženy ve formátu WAV a není nutné je dekódovat. „Talking Typer“ má také menší nároky na zobrazení grafického prostředí. „Talking Typer” umožňuje používání programu více uživateli, tuto funkci jsem ve své práci neimplementoval, považoval jsem ji za zbytečnou. Program „Talking Typer“ se mi podařilo spustit pouze v operačním systému Windows XP. V prostředí Windows 2000 a Windows Vista nebylo 36
možné program spustit. „Talking Typer“ je komplexnější software, který umí strojově přečíst libovolný text a umožňuje i zobrazení Braillova písma. Tento program může být při uplatnění metody TTS – Text To Speech využit pro čtení knih. Tato funkce je implementována již v operačních systémech jako standardní funkce. 6.4 Testování programu „Psaní pro zrakově postižené“ Funkčnost programu jsem vyzkoušel na operačních systémech Windows 2000 SP4, Windows XP, Windows Vista a Linux. Ve všech zkoušených operačních systémech fungoval korektně. Program neobsahuje žádné speciální funkce, které by nemohli fungovat v jiném systému. Program v operační paměti počítače zabírá cca 40 MB.
Graf č. 1 - Znázornění využití CPU (na Intel Pentium M 1,6 Ghz 1024 MB RAM, Windows 2000 SP4)
Graf č. 2 - Znázornění využití CPU (Intel Duo 7500 2,2Ghz 2048 MB RAM, Windows Vista)
7. Závěr Téma práce mě velmi zaujalo proto, že statistiky organizace WHO uvádějí, že je v Evropě 2,7 milionu nevidomých lidí. Počet slabozrakých se odhaduje na 12 milionů. Moderní společnost by měla nabídnout rovné příležitosti všem lidem. Jednou z cest, jak tuto výzvu naplnit, je vytvářet optimální podmínky pro vzdělávání, pracovní uplatnění i soukromý život i těm občanům, kteří jsou zdravotně postiženi. Svým výukovým programem jsem chtěl pomoci tuto výzvu naplnit. Při tvorbě bakalářské práce jsem vycházel ze seznámení se s potřebami a problémy lidí se zrakovým postižením při ovládání počítače a ty jsem se snažil při tvorbě programu zohlednit (toto zohlednění jsem formuloval v cílech své práce). Nemožnost zrakové kontroly u lidí se zrakovým postižením, popřípadě omezení v jejím uplatňování, jsem v programu kompenzoval tím, že veškerá zpětná vazba je vázána na sluchové vnímání. 37
Domnívám se, že se mi podařilo vytvořit dostatečně flexibilní program, který umožňuje individuální volbu nastavení podmínek v závislosti na potřebách uživatele.
38
9. Seznam příloh Příloha č. 1 - CD ROM „ Psaní pro zrakově postižené“ Příloha č. 2 – Seznam tabulek Příloha č. 3 - Seznam obrázků Příloha č. 4 - Program na výpis slov, která obsahují pouze daná písmena Příloha č. 5 - Přehled slov a čísel, které umí program nadiktovat Příloha č. 6 - Seznam zvuků pro nastavování Příloha č. 7 - Odkazy a použité zdroje
39
Příloha č. 1 CD ROM – Psaní pro zrakově postižené •
Adresář s názvem Práce, který obsahuje samotný program.
•
Adresář s názvem PráceNB, soubory projektu v NetBeans.
•
Adresář s názvem Zdrojové kódy – který obsahuje samostatné zdrojové kody programu.
•
Adresář s názvem Slovnik – obsahuje pomocný program pro nalezení slov obsahující daná písmena.
•
Soubor práce.pdf, který obsahuje tuto bakalářskou práci.
•
Soubor Info, který obsahuje informace o tomto programu.
40
Příloha č. 2: Seznam tabulek Tabulka č. 1 - Počet analyzovaných slov Tabulka č. 2 – Zařazení písmen a číslic v lekcích Tabulka č. 3 – Počet slov v lekci Tabulka č. 4 - Postavení prstů na klávesnici Tabulka č. 5 – Tabulka kláves (tučně jsou označeny klávesy nutné pro používání programu) Tabulka č. 6 – Události dialogů a jejich reakce Tabulka č. 7 - Počet zvuků v programu Tabulka č. 8 – Seznam dialogů Tabulka č. 9 – Typy vláken a jejich popis Tabulka č. 10 – Minimální konfigurace Tabulka č. 11 – Doporučená konfigurace Tabulka č. 12 - Minimální konfigurace pro program “Talking Typer”
41
Příloha č. 3:
Seznam obrázků Obr. č. 1 – Ukázka nastavení 1 Obr. č. 2 – Ukázka nastavení 2 Obr. č. 3 – Ukázka nastavení 3 Obr. č. 4 – Ukázka nastavení 4 Obr. č. 5 – Ukázka nastavení 5 Obr. č. 6 – Ukázka nastavení 6 Obr. č. 7 – Ukázka programu v modu číslo 1 Obr. č. 8 – Ukázka programu v modu číslo 2 Obr. č. 9 – Dialogové okno „Výběr typu lekce“ Obr. č. 10 – Dialogové okno „Výběr lekce“ Obr. č. 11 – Dialogové okno „Konec lekce“ Obr. č. 12 - Model používání Obr. č. 13 – Model nastavování
42
Příloha č. 4:
Program na výpis slov (obsahují pouze daná písmena) package pismenka; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; public class Main { static int pocetNalezenych=0; static String[] pouzite; public Main() { } public static void main(String[] args) { int[] delky = new int[30]; for (int i = 0; i < delky.length; i++) { delky[i]=0; } int celkem=0; File slovnik = new File("czech.001"); FileReader fis; try { fis = new FileReader(slovnik); BufferedReader bf = new BufferedReader(fis); String slovo; while ((slovo = bf.readLine()) != null) { celkem++; delky[slovo.length()]++; Zkontroluj(slovo); } for (int i = 0; i < delky.length; i++) { if (delky[i]!=0) System.out.println("Slova délky "+i+ ": "+delky[i]); } System.out.println("Celkem"+ celkem); System.out.println("--------------"); System.out.println("Počet nalezenych: "+pocetNalezenych); } catch (Exception ex) { ex.printStackTrace(); } } 43
public static void Zkontroluj(String co) { boolean vsechno=true; pouzite="a,ů,l,s,d,k,f,j,r,u,e,i,g,h".split(","); for (int i = 0; i < co.length(); i++) { String aktualniPismenko=co.substring(i,i+1); boolean nalezeno=false; for (int j = 0; j < pouzite.length; j++) { if (aktualniPismenko.equals(pouzite[j])) { nalezeno=true; } } if (!nalezeno) vsechno=false; } if (vsechno) if (co.indexOf("a")!=-1) // pokud chceme aby slovo nějaké //písmeno obsahovat muselo { { System.out.println(co); pocetNalezenych++;} } } public static void Konec(String co) { try{ String konec="ál"; int length=konec.length(); String konec2=co.substring(co.length()-length); if (konec2.compareTo(konec)==0) System.out.println(co); }catch (Exception s){} }
44
Příloha č. 5
Přehled slov a čísel, které umí program nadiktovat Name lla dlouho hardware koleje odkaz osada sako arab biolog doma libra tabulka zapnout bitva hmota medium vlak akce chalupa matice úder úkrok úpal boxer dary extra index kryt reflex africký kožich nůž rozvaž umýt výzbroj armáda brána nábytek rybář umřela bída díla
aal autor dohled heslo koza odkud osel software bagr biskup duben objekt trnka zelenina bomba lampa nevolno vrba cement chemie opice úhel úlek úprava bychom egypt fyzika jazyky kytka sex almužna ležet nůžky rýže úterý význam adresář hrách nálada sázet vteřina brečet domeček
ala autorita dokola hokejka logika odraz ostuda zdroj balkon boule hanba polibek unikl znak datum magnet obvod vznik cihla chlad ornice úhrada úlev úroda bylina exkurze galaxie kabelky latex text bažant loupež okamžik složka útlý výživa advokát jeřáb obhájce signál afričan ceník dráček
all autorka doufat hora loket ohlas rekord akrobat banka bronz hloubka sazba urna amor domov makrela odveta vzor dcera injekce otec újma úloha axiom byt expert grafika kodex oxid vysoko držel možnost ožil sýr úžasný zdravým bábovka kavárna panák silák akční císař gauč 45
laa daleko fosfor idol losos oko rok algebra baterka dlabat hrabat služba uznat aroma drama mapa palma znovu dvojice jalovice úcta úklid únik banky bytost exploze hygiena komplex paradox zbytky ježek můžeme papež tentýž vražda zmýlit balzám korálek pitná tenká balík čísla gumičky
lal dialog fotka jahoda odhalil okurka rokle anketa beran dobrota kabelka stehno zabil atom farma maso plamen adopce facka koberec údaj úkol únor box cyklus expozice chyba krysy praxe zlozvyk kaluž nelže protože tužka výtah ženatý blázen maják referát tváře benzín dečka halíř
hlína kočka ručník táhni sal 0 127 170 2008 2451 4 50 7 928 kladka slad lajka draka kufr rada adresa fialka klid safari alergie galerie had hlasuje hůlka akt daruj důkaz faktura iluze razil uzel adept dupot koupel opar pije pokus půda
hřebíček kopačky rýč účty ssa 1 13001 18 2009 25 40 512 71 94 kladl alfa dar dural kulka radar afrika jel krade sirka dluh garda hadr hledal jehla akta data edituje gazela jezera selhat zajal alpaka etapa lapat opat plakat pole rozpis
ječet rajčata řidič beruška ssl 102 13450 180 2010 27 4096 540 8 971 klas fasáda daru jak kůra rak asi jela les sleduje druh gel hala hluk liga aktualita datel elita hasit kajuta tisk zajdu apostrof kapela lepit padal plast popel sepsat
jídlo rámeček samička chýše ssů 1024 15210 2 22 3 42 547 81 dal kůl jak daruj kluk kurs rasa deska jikra lilek ukradl druha grafik hlad hra reaguje artikl defekt etika hazard karate touha zkusit depo kapr lupa paseka podlaha popis sklep
46
jízda rčení skočit als sůl 115 16525 20 220 3100 450 6 86 dala lak jas daruju kraj kus sud disk klasika raduje usiluje figura grafika hladit hraje reguluji asiat delta fakt hledat ladit trakt zradit displej kopal odpad peklo pokazit prsa
kočár rodiče stočit las sůs 12 17 2007 229 320 458 60 9 důl sklad lajdák drak krk luk ukradl důsledek klesl risk agrese figurka gril hlas hůl sluha atlas deset fakta hrůza lhůta trefit zrak dopad kopie odplout pes pokoj průkaz
Příloha č. 6 Seznam zvuků pro nastavování 0 10 110 130 15 160 19 20 220 260 30 35 4 45 5 500 60 7 8 9 95 end chybaIgnorovat chybne informaceANO klavesnice klavesniceRun2 konecLekce misto mod4 nastaveniZvuku ocekavane0 ocekavane4 osahat2 pausa popisANOcisla pouzivat2 rusi0 rusi4 standartni typPismena velkeANO vyberTypu
1 100 12 14 15 17 190 20 240 280 300 35 40 45 5 55 60 70 80 90 balance hra chybaInformovat chybneANO informaceNE klavesniceANO klavesyANO menuZobrazeni mod1 mod5 neulozit ocekavane1 ocekavane5 panelChybneNapsane platnoANO popisANOpismena pouzivatNE rusi1 rusi5 storno typSlova velkeNe zkouseni
10 100 120 140 150 170 2 200 25 3 320 360 40 450 50 55 65 70 85 90 barvaPisma hraSpustit chybaPipnout chybneNE informovatANO klavesniceNE klavesyNE mezernikANO mod2 napsali notebook ocekavane2 ocekavane6 panelInformace platnoNE popisNE qwerty rusi2 rusi6 ticking ulozit veSlove zkouseni2 47
10 11 13 15 16 180 20 210 25 30 340 380 400 5 50 6 65 75 85 95 barvaPozadi chyba chybaPismeno info informovatNE klavesniceRun1 konec mezernikNE mod3 nastaveni ocekavane ocekavane3 osahani panelKlavesnice popisANO pouzivat qwertz rusi3 spusteni typLekce velikostPisma vyberLekce zkouseniZavreno
zobrazeniInfo zvukyInfo zvukyUlozit
zobrazeniZavreno zvukySava zvukyZpet
zobrazeniZavreno2 zvukyStorno
zvuky zvukyStorno1 Příloha č. 7:
Odkazy a použité zdroje http://www.abclinuxu.cz/slovnik/gnu-lgpl http://www.pakuj.host.sk/mpeg_audio/layer.html http://www.sun.com http://nfb.org/legacy/bm/bm99/bm990604.htm http://www.powertyping.com/rain.shtml http://www.slunecnice.cz/sw/psani-susta/ http://magazin.slunecnice.cz/clanky/psani-na-stroji-vyuka-zdarma/ http://www.slunecnice.cz/sw/psani/obrazky/ http://en.wikipedia.org/wiki/Speech_synthesis http://www.microsoft.com/enable/demos/windowsvista/speechdemo.aspx
48