DroidFish: Spanish text to speech support.

This commit is contained in:
Peter Osterlund 2017-01-01 14:36:15 +01:00
parent 140b4957fe
commit bd586b9ea9
3 changed files with 75 additions and 42 deletions
DroidFish
res/values
src/org/petero/droidfish
DroidFishTest/src/org/petero/droidfish/gamelogic

@ -707,11 +707,13 @@ you are not actively using the program.\
<item>sound</item> <item>sound</item>
<item>speech_en</item> <item>speech_en</item>
<item>speech_de</item> <item>speech_de</item>
<item>speech_es</item>
</string-array> </string-array>
<string-array name="move_announce_type_texts"> <string-array name="move_announce_type_texts">
<item>Off</item> <item>Off</item>
<item>Play sound</item> <item>Play sound</item>
<item>English Speech</item> <item>English Speech</item>
<item>German Speech</item> <item>German Speech</item>
<item>Spanish Speech</item>
</string-array> </string-array>
</resources> </resources>

@ -39,6 +39,7 @@ public class Speech {
public enum Language { public enum Language {
EN, // English EN, // English
DE, // German DE, // German
ES, // Spanish
NONE; // Not supported NONE; // Not supported
public static Language fromString(String langStr) { public static Language fromString(String langStr) {
@ -46,6 +47,8 @@ public class Speech {
return EN; return EN;
if ("de".equals(langStr)) if ("de".equals(langStr))
return DE; return DE;
if ("es".equals(langStr))
return ES;
return NONE; return NONE;
} }
} }
@ -223,6 +226,8 @@ public class Speech {
return Locale.US; return Locale.US;
case DE: case DE:
return Locale.GERMANY; return Locale.GERMANY;
case ES:
return new Locale("es", "ES");
case NONE: case NONE:
return null; return null;
} }
@ -258,6 +263,15 @@ public class Speech {
case Piece.WKNIGHT: return "Springer"; case Piece.WKNIGHT: return "Springer";
default: return ""; default: return "";
} }
case ES:
switch (piece) {
case Piece.WKING: return "Rey";
case Piece.WQUEEN: return "Dama";
case Piece.WROOK: return "Torre";
case Piece.WBISHOP: return "Alfil";
case Piece.WKNIGHT: return "Caballo";
default: return "";
}
case NONE: case NONE:
return ""; return "";
} }
@ -272,6 +286,8 @@ public class Speech {
return from; return from;
case DE: case DE:
return from; return from;
case ES:
return from;
case NONE: case NONE:
return ""; return "";
} }
@ -288,6 +304,8 @@ public class Speech {
return to.startsWith("e") ? "take" : "takes"; return to.startsWith("e") ? "take" : "takes";
case DE: case DE:
return "schlägt"; return "schlägt";
case ES:
return "captura";
case NONE: case NONE:
return ""; return "";
} }
@ -300,6 +318,8 @@ public class Speech {
return kingSide ? "Short castle" : "Long castle"; return kingSide ? "Short castle" : "Long castle";
case DE: case DE:
return kingSide ? "Kleine Rochade" : "Große Rochade"; return kingSide ? "Kleine Rochade" : "Große Rochade";
case ES:
return kingSide ? "Enroque corto" : "Enroque largo";
case NONE: case NONE:
return ""; return "";
} }
@ -312,6 +332,8 @@ public class Speech {
return ""; return "";
case DE: case DE:
return "en passant"; return "en passant";
case ES:
return "al paso";
case NONE: case NONE:
return ""; return "";
} }
@ -325,6 +347,8 @@ public class Speech {
return pn; return pn;
case DE: case DE:
return "Umwandlung zu " + pn; return "Umwandlung zu " + pn;
case ES:
return pn;
case NONE: case NONE:
return ""; return "";
} }
@ -337,6 +361,8 @@ public class Speech {
return "check!"; return "check!";
case DE: case DE:
return "Schach!"; return "Schach!";
case ES:
return ",jaque!";
case NONE: case NONE:
return ""; return "";
} }
@ -349,6 +375,8 @@ public class Speech {
return "check mate!"; return "check mate!";
case DE: case DE:
return "Schach matt!"; return "Schach matt!";
case ES:
return ",mate!";
case NONE: case NONE:
return ""; return "";
} }

@ -43,165 +43,168 @@ public class SpeechTest extends TestCase {
} }
public void testEnglish() { public void testEnglish() {
String[] lang = {"en", "de"}; String[] lang = {"en", "de", "es"};
{ {
Game game = new Game(null, new TimeControlData()); Game game = new Game(null, new TimeControlData());
Pair<Boolean,Move> res = game.processString("e4"); Pair<Boolean,Move> res = game.processString("e4");
assertEquals(new String[]{"e4", "e4"}, assertEquals(new String[]{"e4", "e4", "e4"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("d5"); res = game.processString("d5");
assertEquals(new String[]{"d5", "d5"}, assertEquals(new String[]{"d5", "d5", "d5"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("exd5"); res = game.processString("exd5");
assertEquals(new String[]{"e takes d5", "e schlägt d5"}, assertEquals(new String[]{"e takes d5", "e schlägt d5", "e captura d5"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("Qxd5"); res = game.processString("Qxd5");
assertEquals(new String[]{"Queen takes d5", "Dame schlägt d5"}, assertEquals(new String[]{"Queen takes d5", "Dame schlägt d5", "Dama captura d5"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("Ne2"); res = game.processString("Ne2");
assertEquals(new String[]{"Knight e2", "Springer e2"}, assertEquals(new String[]{"Knight e2", "Springer e2", "Caballo e2"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("Nf6"); res = game.processString("Nf6");
assertEquals(new String[]{"Knight f6", "Springer f6"}, assertEquals(new String[]{"Knight f6", "Springer f6", "Caballo f6"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("Nbc3"); res = game.processString("Nbc3");
assertEquals(new String[]{"Knight b c3", "Springer b c3"}, assertEquals(new String[]{"Knight b c3", "Springer b c3", "Caballo b c3"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("e5"); res = game.processString("e5");
assertEquals(new String[]{"e5", "e5"}, assertEquals(new String[]{"e5", "e5", "e5"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("b4"); res = game.processString("b4");
assertEquals(new String[]{"b4", "b4"}, assertEquals(new String[]{"b4", "b4", "b4"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("a5"); res = game.processString("a5");
assertEquals(new String[]{"a5", "a5"}, assertEquals(new String[]{"a5", "a5", "a5"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("a3"); res = game.processString("a3");
assertEquals(new String[]{"a3", "a3"}, assertEquals(new String[]{"a3", "a3", "a3"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("axb4"); res = game.processString("axb4");
assertEquals(new String[]{"ae takes b4", "a schlägt b4"}, assertEquals(new String[]{"ae takes b4", "a schlägt b4", "a captura b4"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("axb4"); res = game.processString("axb4");
assertEquals(new String[]{"ae takes b4", "a schlägt b4"}, assertEquals(new String[]{"ae takes b4", "a schlägt b4", "a captura b4"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
} }
{ {
Game game = new Game(null, new TimeControlData()); Game game = new Game(null, new TimeControlData());
Pair<Boolean,Move> res = game.processString("d4"); Pair<Boolean,Move> res = game.processString("d4");
assertEquals(new String[]{"d4", "d4"}, assertEquals(new String[]{"d4", "d4", "d4"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("e5"); res = game.processString("e5");
assertEquals(new String[]{"e5", "e5"}, moveToText(game.prevPos(), res.second, lang)); assertEquals(new String[]{"e5", "e5", "e5"}, moveToText(game.prevPos(), res.second, lang));
res = game.processString("dxe5"); res = game.processString("dxe5");
assertEquals(new String[]{"d take e5", "d schlägt e5"}, moveToText(game.prevPos(), res.second, lang)); assertEquals(new String[]{"d take e5", "d schlägt e5", "d captura e5"},
moveToText(game.prevPos(), res.second, lang));
res = game.processString("f6"); res = game.processString("f6");
assertEquals(new String[]{"f6", "f6"}, moveToText(game.prevPos(), res.second, lang)); assertEquals(new String[]{"f6", "f6", "f6"}, moveToText(game.prevPos(), res.second, lang));
res = game.processString("exf6"); res = game.processString("exf6");
assertEquals(new String[]{"e takes f6", "e schlägt f6"}, moveToText(game.prevPos(), res.second, lang)); assertEquals(new String[]{"e takes f6", "e schlägt f6", "e captura f6"},
moveToText(game.prevPos(), res.second, lang));
res = game.processString("Bb4"); res = game.processString("Bb4");
assertEquals(new String[]{"Bishop b4 check!", "Läufer b4 Schach!"}, assertEquals(new String[]{"Bishop b4 check!", "Läufer b4 Schach!", "Alfil b4 ,jaque!"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("c3"); res = game.processString("c3");
assertEquals(new String[]{"c3", "c3"}, assertEquals(new String[]{"c3", "c3", "c3"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("Ne7"); res = game.processString("Ne7");
assertEquals(new String[]{"Knight e7", "Springer e7"}, assertEquals(new String[]{"Knight e7", "Springer e7", "Caballo e7"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("cxb4"); res = game.processString("cxb4");
assertEquals(new String[]{"c takes b4", "c schlägt b4"}, assertEquals(new String[]{"c takes b4", "c schlägt b4", "c captura b4"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("O-O"); res = game.processString("O-O");
assertEquals(new String[]{"Short castle", "Kleine Rochade"}, assertEquals(new String[]{"Short castle", "Kleine Rochade", "Enroque corto"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("fxg7"); res = game.processString("fxg7");
assertEquals(new String[]{"f takes g7", "f schlägt g7"}, assertEquals(new String[]{"f takes g7", "f schlägt g7", "f captura g7"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("h6"); res = game.processString("h6");
assertEquals(new String[]{"h6", "h6"}, assertEquals(new String[]{"h6", "h6", "h6"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("gxf8Q+"); res = game.processString("gxf8Q+");
assertEquals(new String[]{"g takes f8 Queen check!", "g schlägt f8 Umwandlung zu Dame Schach!"}, assertEquals(new String[]{"g takes f8 Queen check!", "g schlägt f8 Umwandlung zu Dame Schach!",
"g captura f8 Dama ,jaque!"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("Kxf8"); res = game.processString("Kxf8");
assertEquals(new String[]{"King takes f8", "König schlägt f8"}, assertEquals(new String[]{"King takes f8", "König schlägt f8", "Rey captura f8"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("b5"); res = game.processString("b5");
assertEquals(new String[]{"b5", "b5"}, assertEquals(new String[]{"b5", "b5", "b5"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("a5"); res = game.processString("a5");
assertEquals(new String[]{"a5", "a5"}, assertEquals(new String[]{"a5", "a5", "a5"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("bxa6"); res = game.processString("bxa6");
assertEquals(new String[]{"b takes a6", "b schlägt a6 en passant"}, assertEquals(new String[]{"b takes a6", "b schlägt a6 en passant", "b captura a6 al paso"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
} }
{ {
Game game = new Game(null, new TimeControlData()); Game game = new Game(null, new TimeControlData());
Pair<Boolean,Move> res = game.processString("f4"); Pair<Boolean,Move> res = game.processString("f4");
assertEquals(new String[]{"f4", "f4"}, assertEquals(new String[]{"f4", "f4", "f4"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("e5"); res = game.processString("e5");
assertEquals(new String[]{"e5", "e5"}, assertEquals(new String[]{"e5", "e5", "e5"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("g4"); res = game.processString("g4");
assertEquals(new String[]{"g4", "g4"}, assertEquals(new String[]{"g4", "g4", "g4"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
res = game.processString("Qh4"); res = game.processString("Qh4");
assertEquals(new String[]{"Queen h4 check mate!", "Dame h4 Schach matt!"}, assertEquals(new String[]{"Queen h4 check mate!", "Dame h4 Schach matt!", "Dama h4 ,mate!"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
} }
{ {
Game game = new Game(null, new TimeControlData()); Game game = new Game(null, new TimeControlData());
playMoves(game, "d4 d5 Nc3 Nc6 Bf4 Bf5 Qd2 Qd7"); playMoves(game, "d4 d5 Nc3 Nc6 Bf4 Bf5 Qd2 Qd7");
Pair<Boolean,Move> res = game.processString("O-O-O"); Pair<Boolean,Move> res = game.processString("O-O-O");
assertEquals(new String[]{"Long castle", "Große Rochade"}, assertEquals(new String[]{"Long castle", "Große Rochade", "Enroque largo"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
playMoves(game, "Nxd4 Nxd5 Qxd5 Qxd4 Qxd4 Nf3 Qxd1 Kxd1"); playMoves(game, "Nxd4 Nxd5 Qxd5 Qxd4 Qxd4 Nf3 Qxd1 Kxd1");
res = game.processString("O-O-O"); res = game.processString("O-O-O");
assertEquals(new String[]{"Long castle check!", "Große Rochade Schach!"}, assertEquals(new String[]{"Long castle check!", "Große Rochade Schach!", "Enroque largo ,jaque!"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
playMoves(game, "Kc1"); playMoves(game, "Kc1");
res = game.processString("Rd7"); res = game.processString("Rd7");
assertEquals(new String[]{"Rook d7", "Turm d7"}, assertEquals(new String[]{"Rook d7", "Turm d7", "Torre d7"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
} }
{ {
Game game = new Game(null, new TimeControlData()); Game game = new Game(null, new TimeControlData());
playMoves(game, "e4 e5 h3 Bb4 Ne2 Bc3"); playMoves(game, "e4 e5 h3 Bb4 Ne2 Bc3");
Pair<Boolean,Move> res = game.processString("Nexc3"); Pair<Boolean,Move> res = game.processString("Nexc3");
assertEquals(new String[]{"Knight e takes c3", "Springer e schlägt c3"}, assertEquals(new String[]{"Knight e takes c3", "Springer e schlägt c3", "Caballo e captura c3"},
moveToText(game.prevPos(), res.second, lang)); moveToText(game.prevPos(), res.second, lang));
} }
} }