语音识别方法三:使用Service调用语音识别程序
语音识别方法三:使用 Service 调用语音识别程序
1. 说明
以下例程功能为:在应用程序中使用通于访问 service
调用语言识别功能,录音并识别后将识别的字串通过 Listener
返回给应用程序。注意:使用前需要安装语音识别服务,如编译安装源码中的 development/samples/VoiceRecogitionService
。
2. 本例参考自 android 源码
- 后台服务
参见 development/samples/VoiceRecognitionService/*
此处实现了一个模拟的后台服务,它并未实现真的语音识别,而只是一个框架以示例,编译并安装它,即可在设置的语音输入与输出中看到它
,它包含了一个设置界面,当连接这个 Service 时,如果设置了 Letters,则直接返回 abc,
如果设置了 Numbers,则直接返回 123
你可以自己实现,用于连接 android 源码自带的识别引擎 srec.
- 前台程序
参见 frameworks/base/core/java/android/speech/Recognition*
它 与后台 Service 交互,此段代码实现在应用程序界面中
3. 可从此处下载可独立运行的代码 (前台程序): [http://download.csdn.net/source/2591401
](http://download.csdn.net/source/2591401)
4. 核心代码及说明
_ package com.android.mystt3; _
_ _
_ 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 MyStt3Activity 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.text); // _ _ 显示识别字串 _ __
_ 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(str); // _ _ 显示被识别的数据 _ __
_ } _
_ 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) { _
_ sr.startListening(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)); _
_ } _
_ } _
_ } _
_ _
_ (转载请注明出处: http://xy0811.spaces.live.com/
) _
_ _