package com.arthurbergmz.assistant.utils; import java.io.UnsupportedEncodingException; import java.util.List; import com.amazonaws.auth.BasicAWSCredentials; import com.arthurbergmz.assistant.Assistant; import com.arthurbergmz.assistant.Config; import com.arthurbergmz.assistant.Initializer; import com.arthurbergmz.assistant.intelligence.HelloThought; import com.arthurbergmz.assistant.intelligence.LearnThought; import com.arthurbergmz.assistant.intelligence.SearchThought; import com.arthurbergmz.assistant.intelligence.WhatIsSomethingThought; import com.arthurbergmz.assistant.intelligence.grammar.EnUSGrammar; import com.arthurbergmz.assistant.intelligence.grammar.PtBRGrammar; import com.arthurbergmz.assistant.intelligence.memorybank.Thought; import com.arthurbergmz.assistant.misc.Debug; import com.arthurbergmz.assistant.misc.SoundPlayer; import com.ivona.services.tts.IvonaSpeechCloudClient; import com.ivona.services.tts.model.CreateSpeechRequest; import com.ivona.services.tts.model.Input; import com.ivona.services.tts.model.Voice; public class AssistantUtils { private static final IvonaSpeechCloudClient SPEECH_CLOUD; private static final Runnable ASSISTANT_SPEAKING; private static final Runnable STOP_ASSISTANT_SPEAKING; static{ SPEECH_CLOUD = new IvonaSpeechCloudClient(new BasicAWSCredentials(Config.AMAZON_ACCESS_KEY, Config.AMAZON_SECRET_KEY)); SPEECH_CLOUD.setEndpoint(Config.AMAZON_IVONA_ENDPOINT); ASSISTANT_SPEAKING = new Runnable(){ @Override public void run() { Initializer.ASSISTANT.getWindow().talk(); } }; STOP_ASSISTANT_SPEAKING = new Runnable(){ @Override public void run() { Initializer.ASSISTANT.getWindow().stopTalking(); } }; } public static void initializeDefaultThoughts(Assistant a){ a.registerThought(new HelloThought()); a.registerThought(new SearchThought()); a.registerThought(new WhatIsSomethingThought()); a.registerThought(new LearnThought()); Debug.print("Pensamentos padr�es definidos!"); } public static void requestSpeech(String str){ CreateSpeechRequest createSpeechRequest = new CreateSpeechRequest(); Input input = new Input(); Voice voice = new Voice(); voice.setName(Config.LANGUAGE.getSpeaker()); input.setData(str); createSpeechRequest.setInput(input); createSpeechRequest.setVoice(voice); try{ new SoundPlayer(SPEECH_CLOUD.getCreateSpeechUrl(createSpeechRequest).toString()).play(ASSISTANT_SPEAKING, STOP_ASSISTANT_SPEAKING); }catch (UnsupportedEncodingException e){ e.printStackTrace(); } } public static Thought getMostSimilarThought(String str, List<Thought> thoughts){ str = str.toLowerCase(); Thought thought = null; int cmd = 0; double distance = 10D; if(Config.LANGUAGE.getLanguageCode().equals("pt-BR")){ PtBRGrammar[] grammar = PtBRGrammar.values(); for(int i = 0, j = grammar.length; i < j; i++){ PtBRGrammar g = grammar[i]; String[] actions = g.getGrammar(); for(int k = 0, l = actions.length; k < l; k++){ if(str.startsWith(actions[k].toLowerCase())){ cmd = g.getCommandId(); break; } } } }else{ EnUSGrammar[] grammar = EnUSGrammar.values(); for(int i = 0, j = grammar.length; i < j; i++){ EnUSGrammar g = grammar[i]; String[] actions = g.getGrammar(); for(int k = 0, l = actions.length; k < l; k++){ if(str.startsWith(actions[k].toLowerCase())){ cmd = g.getCommandId(); break; } } } } for(int i = 0, j = thoughts.size(); i < j; i++){ Thought temporaryThought = thoughts.get(i); if((cmd != 0) && (temporaryThought.getCommandId() == cmd)) return temporaryThought; String[] sentences = temporaryThought.getRelatedSentences(); for(int k = 0, l = sentences.length; k < l; k++){ double temporaryDistance = StringUtils.checkSimilarity(str, sentences[k]); if((temporaryDistance < 4) && (temporaryDistance < distance)){ thought = temporaryThought; distance = temporaryDistance; break; } } } return thought; } }