package com.alieeen.smartchair.fragments.menu; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.alieeen.smartchair.R; import com.alieeen.smartchair.bluetooth.BluetoothState; import com.alieeen.smartchair.bluetooth.DeviceList; import org.androidannotations.annotations.Background; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.UiThread; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import edu.cmu.pocketsphinx.Assets; import edu.cmu.pocketsphinx.Hypothesis; import edu.cmu.pocketsphinx.RecognitionListener; import edu.cmu.pocketsphinx.SpeechRecognizer; import static android.widget.Toast.makeText; import static edu.cmu.pocketsphinx.SpeechRecognizerSetup.defaultSetup; /** * Created by alinekborges on 18/05/15. */ @EFragment public class MainFragment extends BluetoothFragment implements RecognitionListener { private static final String KWS_FOWARD = "foward"; private static final String LOG_TAG = "MainFragment"; private static final String KEYPHRASE = "oh mighty computer"; /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @return A new instance of fragment CitiesFragment. */ private View v; private Button btnConnect; private TextView txtListening; private Button btnSend; private SpeechRecognizer recognizer; private HashMap<String, Integer> captions; public static MainFragment newInstance() { MainFragment_ fragment = new MainFragment_(); return fragment; } public MainFragment() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment v = inflater.inflate(R.layout.fragment_main, container, false); initComponents(); setUpSpeechRegonition(); return v; } @Background public void setUpSpeechRegonition() { try { Assets assets = new Assets(getActivity()); File assetDir = assets.syncAssets(); Log.i(LOG_TAG, assetDir.getAbsolutePath()); setupRecognizer(assetDir); } catch (Exception e) { Log.i(LOG_TAG, "ERRO"); } } public void initComponents() { btnConnect = (Button) v.findViewById(R.id.btn_devices_choose); btnSend = (Button) v.findViewById(R.id.btnSend); txtListening = (TextView) v.findViewById(R.id.txt_listening); btnConnect.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if (bt.getServiceState() == BluetoothState.STATE_CONNECTED) { Log.i("MAIN", "disconecting..."); btnConnect.setText("CONNECTED!"); //bt.disconnect(); } else { Intent intent = new Intent(getActivity(), DeviceList.class); startActivityForResult(intent, BluetoothState.REQUEST_CONNECT_DEVICE); } } }); btnSend.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { bt.send("Text", true); } }); } public void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == BluetoothState.REQUEST_CONNECT_DEVICE) { if(resultCode == Activity.RESULT_OK) bt.connect(data); btnConnect.setText("CONNECTED+01!"); } else if(requestCode == BluetoothState.REQUEST_ENABLE_BT) { if(resultCode == Activity.RESULT_OK) { bt.setupService(); } else { Toast.makeText(getActivity() , "Bluetooth was not enabled." , Toast.LENGTH_SHORT).show(); //finish(); } } } @Override public void onBeginningOfSpeech() { } @Override public void onEndOfSpeech() { } @Override public void onPartialResult(Hypothesis hypothesis) { if (hypothesis == null) return; String text = hypothesis.getHypstr(); if (text.equals(KWS_FOWARD)) { Log.i(LOG_TAG, "FOWARD"); } } @Override public void onResult(Hypothesis hypothesis) { txtListening.setText(""); if (hypothesis != null) { String text = hypothesis.getHypstr(); makeText(getActivity(), text, Toast.LENGTH_SHORT).show(); } } @Override public void onError(Exception e) { } @Override public void onTimeout() { } private void setupRecognizer(File assetsDir) throws Exception { // The recognizer can be configured to perform multiple searches // of different kind and switch between them recognizer = defaultSetup() .setAcousticModel(new File(assetsDir, "en-us-ptm")) .setDictionary(new File(assetsDir, "cmudict-en-us.dict")) // To disable logging of raw audio comment out this call (takes a lot of space on the device) .setRawLogDir(assetsDir) // Threshold to tune for keyphrase to balance between false alarms and misses .setKeywordThreshold(1e-45f) // Use context-independent phonetic search, context-dependent is too slow for mobile .setBoolean("-allphone_ci", true) .getRecognizer(); recognizer.addListener(this); /** In your application you might not need to add all those searches. * They are added here for demonstration. You can leave just one. */ // Create keyword-activation search. recognizer.addKeyphraseSearch(KWS_FOWARD, KEYPHRASE); //startRecognition(); } @UiThread public void startRecognition() { Log.i(LOG_TAG, "start listening"); txtListening.setText("Listening......."); recognizer.startListening(KWS_FOWARD); } }