Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to use the SpeechRecognizer API directly for speech input?

Tags:

The Android Dev website provides an example of doing speech input using the built-in Google Speech Input Activity. The activity displays a pre-configured pop-up with the mic and passes its results using onActivityResult()

My question: Is there a way to use the SpeechRecognizer class directly to do speech input without displaying the canned activity? This would let me build my own Activity for voice input.

like image 740
vladimir.vivien Avatar asked Feb 12 '11 00:02

vladimir.vivien


People also ask

Can I use Web Speech API?

Support for Web Speech API speech recognition is currently limited to Chrome for Desktop and Android — Chrome has supported it since around version 33 but with prefixed interfaces, so you need to include prefixed versions of them, e.g. webkitSpeechRecognition .

Can Google speech API be used offline?

Speech recognition can be activated when typing on your Android device. If this facility is available in the app you are using, a microphone icon will appear on the keypad. Pressing this activates the speech recognition. Android does have offline speech recognition capabilities.

Is Google speech API free?

The Google Speech-To-Text API isn't free, however. It is free for speech recognition for audio less than 60 minutes. For audio transcriptions longer than that, it costs $0.006 per 15 seconds. For video transcriptions, it costs $0.006 per 15 seconds for videos up to 60 minutes in length.


1 Answers

Here is the code using SpeechRecognizer class (sourced from here and here):

import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.speech.RecognitionListener; import android.speech.RecognizerIntent; import android.speech.SpeechRecognizer; import android.widget.Button; import android.widget.TextView; import java.util.ArrayList; import android.util.Log;    public class VoiceRecognitionTest extends Activity implements OnClickListener  {     private TextView mText;    private SpeechRecognizer sr;    private static final String TAG = "MyStt3Activity";    @Override    public void onCreate(Bundle savedInstanceState)     {             super.onCreate(savedInstanceState);             setContentView(R.layout.main);             Button speakButton = (Button) findViewById(R.id.btn_speak);                  mText = (TextView) findViewById(R.id.textView1);                  speakButton.setOnClickListener(this);             sr = SpeechRecognizer.createSpeechRecognizer(this);                    sr.setRecognitionListener(new listener());            }     class listener implements RecognitionListener              {             public void onReadyForSpeech(Bundle params)             {                      Log.d(TAG, "onReadyForSpeech");             }             public void onBeginningOfSpeech()             {                      Log.d(TAG, "onBeginningOfSpeech");             }             public void onRmsChanged(float rmsdB)             {                      Log.d(TAG, "onRmsChanged");             }             public void onBufferReceived(byte[] buffer)             {                      Log.d(TAG, "onBufferReceived");             }             public void onEndOfSpeech()             {                      Log.d(TAG, "onEndofSpeech");             }             public void onError(int error)             {                      Log.d(TAG,  "error " +  error);                      mText.setText("error " + error);             }             public void onResults(Bundle results)                                {                      String str = new String();                      Log.d(TAG, "onResults " + results);                      ArrayList data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);                      for (int i = 0; i < data.size(); i++)                      {                                Log.d(TAG, "result " + data.get(i));                                str += data.get(i);                      }                      mText.setText("results: "+String.valueOf(data.size()));                     }             public void onPartialResults(Bundle partialResults)             {                      Log.d(TAG, "onPartialResults");             }             public void onEvent(int eventType, Bundle params)             {                      Log.d(TAG, "onEvent " + eventType);             }    }    public void onClick(View v) {             if (v.getId() == R.id.btn_speak)              {                 Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);                         intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);                 intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,"voice.recognition.test");                  intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,5);                  sr.startListening(intent);                 Log.i("111111","11111111");             }    } } 

Define main.xml with a button and give RECORD_AUDIO permission in manifest

like image 65
png Avatar answered Oct 22 '22 12:10

png