Download Jar. Uses 4079K of libraries. Click here for Pure Java version (15118L/110K).
| 1 | !7 | 
| 2 | |
| 3 | static long attnTimeout = 10000; | 
| 4 | sS denkmodulID = #1013938; | 
| 5 | |
| 6 | sS friendlySound = #1009564; //#1013870 | 
| 7 | sS angrySound = #1013884; | 
| 8 | sS startUpSound = null; //#1013982; | 
| 9 | sS defaultText = "Sorry"; | 
| 10 | sbool flatInfoBoxOnUtterance = true; | 
| 11 | |
| 12 | sS regexpActivator = "Katze|Katze|Katja|Götze|Qatar|Cookson|Captain|Cat|Kettle|Cut|Kurt|Computer"; | 
| 13 | |
| 14 | static JTextArea ta; | 
| 15 | static IVar<S> text; | 
| 16 | static Class recognizer; | 
| 17 | static Class denkmodul; | 
| 18 | static long attention, skipTill; | 
| 19 | sbool fullAttention; | 
| 20 | sO speakFunction; // voidfunc(S) | 
| 21 | |
| 22 | p {
 | 
| 23 |   if (isMain()) {
 | 
| 24 | substance(); | 
| 25 | hideVMShowingConsole(); | 
| 26 | outBuf(64K); | 
| 27 | autoRestart(10.0); | 
| 28 | } | 
| 29 | //javaSoundOnly(); // It just corrupts audio sometimes | 
| 30 | loadLibrary(#1013975); | 
| 31 |   bot_ensureNotRunning("Katze.");
 | 
| 32 | recognizer = hotwireDependent(#1009816); | 
| 33 | //denkmodul = run(denkmodulID); | 
| 34 | if (nempty(denkmodulID)) | 
| 35 |     runInMCVarWithAutoRestart('denkmodul, denkmodulID, f denkmodulLoaded);
 | 
| 36 |   //autoRestartModule('denkmodul, denkmodulID, true);
 | 
| 37 | |
| 38 |   if (isMain()) {
 | 
| 39 |     text = persistentVar("Text");
 | 
| 40 | ta = fontSize(20, bindTextAreaToVar(text, jwordwraptextarea())); | 
| 41 | moveCaretToEnd(ta); | 
| 42 | //showFrame(ta); | 
| 43 | |
| 44 | consoleIcon(#1101168); | 
| 45 | consoleMainContainer(); // cache it before changing layout | 
| 46 | //SingleComponentPanel scp = singleComponentPanel(); | 
| 47 | //JSplitPane sp = jhsplit(ta, scp); | 
| 48 | //JPanel sp = jhgrid(ta, scp); | 
| 49 | //JTextArea cta = consoleTextArea(); | 
| 50 | //replaceAWTComponent(cta, sp); | 
| 51 | //scp.setComponent(cta); | 
| 52 | //setSplitPaneLater(sp, 0.5); | 
| 53 | addToWindowLeftHalf(consoleFrame(), ta); | 
| 54 | doubleWindowSizeToTheLeft(consoleFrame()); | 
| 55 | doubleWindowSizeToTheTop(consoleFrame()); | 
| 56 | } | 
| 57 | |
| 58 |   set(recognizer, onFirstWebSocket := r {
 | 
| 59 | playMP3Snippet(startUpSound); | 
| 60 | }); | 
| 61 | |
| 62 |   set(recognizer, onUtterance := voidfunc(S utterance) {
 | 
| 63 | if (flatInfoBoxOnUtterance) flatInfoBox(utterance); | 
| 64 |     if (ai_isStopListeningCommand(utterance)) {
 | 
| 65 | call(recognizer, 'stopRecognition); | 
| 66 | playBlip(); | 
| 67 | } | 
| 68 | appendToTextAreaAndMoveCaret(ta, utterance + "\n"); | 
| 69 | callAnswerMethodVerbose(utterance); | 
| 70 | }); | 
| 71 | |
| 72 | //set(recognizer, startRecognition := true); | 
| 73 | callMain(recognizer); | 
| 74 | //call(recognizer, 'switchToGerman); | 
| 75 | } | 
| 76 | |
| 77 | sS answer(fS s) {
 | 
| 78 | if (sysNow() < skipTill) null; | 
| 79 | if (sysNow() >= attention+attnTimeout) attnOff(); | 
| 80 | |
| 81 |   if (attention != 0) {
 | 
| 82 | attnOff(); | 
| 83 | |
| 84 |     if "nichts|nix|vergiss es|nothing|forget it" {
 | 
| 85 | playWAVSnippet(#1013870); | 
| 86 | } | 
| 87 | |
| 88 | try answer denk(s); | 
| 89 | } | 
| 90 | |
| 91 | S reKatze; | 
| 92 |   if (regexpICFind(reKatze = reKatze(), s)) {
 | 
| 93 | fullAttention = true; | 
| 94 | S rest; | 
| 95 |     if (empty(reKatze) || eq(reKatze, ".")) rest = s; else {
 | 
| 96 |       rest = regexpICLastGroup("(" + reKatze + ")(.*)", s);
 | 
| 97 | |
| 98 | // e.g. "Computer[ ]spiel George Michael" | 
| 99 | if (startsWithLetter(rest) && !swic(rest, "spiel")) | 
| 100 | rest = trim(substring(rest, indexOf(rest, ' '))); | 
| 101 | } | 
| 102 | |
| 103 | if (nempty(rest)) | 
| 104 | try answer denk(rest); | 
| 105 |     else {
 | 
| 106 | if (isShit(s)) | 
| 107 | playMP3Snippet(angrySound); | 
| 108 | else | 
| 109 | playMP3Snippet(friendlySound); | 
| 110 | attention = sysNow(); | 
| 111 | fullAttention = true; | 
| 112 |       print("attn");
 | 
| 113 | ret "Yo"; | 
| 114 | } | 
| 115 | } | 
| 116 | |
| 117 |   L<S> g = regexpGetGroups("(-?\\d+) x (-?\\d+)", s);
 | 
| 118 | if (g != null) | 
| 119 | ret speak_withBlip(str(parseLong(first(g))*parseLong(second(g)))); | 
| 120 | |
| 121 | null; | 
| 122 | } | 
| 123 | |
| 124 | sbool isShit(S s) {
 | 
| 125 |   ret regexpICFind("scheiß", s);
 | 
| 126 | } | 
| 127 | |
| 128 | sS denk(S s) {
 | 
| 129 |   print(">> " + s);
 | 
| 130 | |
| 131 | S a = "Fehler"; | 
| 132 | |
| 133 |   try {
 | 
| 134 | a = denk2(s); | 
| 135 |   } catch e {
 | 
| 136 | if (eqic(getInnerMessage(e), "command stopped")) null; | 
| 137 | else printStackTrace(e); | 
| 138 | } | 
| 139 | |
| 140 |   if (empty(a)) {
 | 
| 141 | if (!fullAttention) null; | 
| 142 | a = defaultText; | 
| 143 |   } else {
 | 
| 144 | attention = sysNow(); fullAttention = false; | 
| 145 |     print("half attn");
 | 
| 146 | } | 
| 147 | |
| 148 | skipTill = sysNow()+60000; | 
| 149 |   try {
 | 
| 150 | speak_withBlip(a); | 
| 151 |   } finally {
 | 
| 152 | skipTill = sysNow()+1000; | 
| 153 | } | 
| 154 | ret a; | 
| 155 | } | 
| 156 | |
| 157 | sS denk2(S s) {
 | 
| 158 |   if "neu" if (nempty(denkmodulID)) {
 | 
| 159 |     upgradeModuleVar('denkmodul, denkmodulID, true);
 | 
| 160 | ret "OK"; | 
| 161 | } | 
| 162 | |
| 163 |   print("Sending to denkmodul " + programID(denkmodul) + ": " + s);
 | 
| 164 | callOpt(denkmodul, 'setMsgGlobalID, getOpt(recognizer, 'lastGlobalID)); | 
| 165 | S a = callAnswerFunction(denkmodul, s); | 
| 166 |   print("Got: " + a);
 | 
| 167 | ret a; | 
| 168 | } | 
| 169 | |
| 170 | svoid attnOff {
 | 
| 171 | if (attention == 0) ret; | 
| 172 | attention = 0; | 
| 173 |   print("attn off");
 | 
| 174 | } | 
| 175 | |
| 176 | sS speak_withBlip(S s) {
 | 
| 177 |   if (speakFunction != null) {
 | 
| 178 | callF(speakFunction, s); | 
| 179 | ret s; | 
| 180 | } else | 
| 181 | ret speakInRecognizerLanguage/*_withBlip*/(s); | 
| 182 | } | 
| 183 | |
| 184 | svoid denkmodulLoaded {
 | 
| 185 | setOpt(denkmodul, actions := true); | 
| 186 | } | 
| 187 | |
| 188 | sS reKatze() {
 | 
| 189 | ret or((S) getOpt(denkmodul, 'regexpActivator), regexpActivator); | 
| 190 | } | 
Began life as a copy of #1013871
download show line numbers debug dex old transpilations
Travelled to 20 computer(s): anzfkgltbrzg, aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, irmadwmeruwu, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, oikenkqtkxpn, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt, vpdwwinrgdga, xfbsdwenvhih, ydilcnlqtmvn
No comments. add comment
| Snippet ID: | #1013936 | 
| Snippet name: | Katze/Computer [Invisible VM w/speech recognition module] | 
| Eternal ID of this version: | #1013936/102 | 
| Text MD5: | 58c54aba9979f43e49cbec39d103d510 | 
| Transpilation MD5: | 7fdb5301357a65cb9b86470afbed0128 | 
| Author: | stefan | 
| Category: | javax / speech | 
| Type: | JavaX source code (desktop) | 
| Public (visible to everyone): | Yes | 
| Archived (hidden from active list): | No | 
| Created/modified: | 2018-10-05 13:42:42 | 
| Source code size: | 4745 bytes / 190 lines | 
| Pitched / IR pitched: | No / No | 
| Views / Downloads: | 1031 / 93450 | 
| Version history: | 101 change(s) | 
| Referenced in: | [show references] |