根据Android中源码修改使用Google语音识别,开始识别后每次识别不用重新点击开始。
来源:互联网 发布:sql 合计列字段 编辑:程序博客网 时间:2024/06/06 18:53
Android源码目录 “/android/packages/inputmethods/LatinIME/java/src/com/android/inputmethod/deprecated/voice”中
VoiceInput.java、SoundIndicator.java、RecognitionView.java。
SoundIndicator.java是一个话筒图片更具说话的声音大小显示不同
RecognitionView.java是语音识别界面
VoiceInput.java中有设置监听语音识别的服务,在不同识别状态下RecognitionView的显示
创建一个新工程SpeachRecognition
将RecognitionView.java和SoundIndicator.java复制到工程中。将需要的布局文件Value值和其他资源文件也一并复制到工程中。同时去掉一些不必要的资源文件比如识别界面中不同识别状态的背景色,并修改以上中用到的代码。
最后就是设置语音识别服务和监听识别,主要代码:
语音识别Listener
private class ImeRecognitionListener implements RecognitionListener { // Waveform data final ByteArrayOutputStream mWaveBuffer = new ByteArrayOutputStream(); int mSpeechStart; @Override public void onReadyForSpeech(Bundle noiseParams) { mRecognitionView.showListening(); } @Override public void onBeginningOfSpeech() { mSpeechStart = mWaveBuffer.size(); } @Override public void onRmsChanged(float rmsdB) { mRecognitionView.updateVoiceMeter(rmsdB); } @Override public void onBufferReceived(byte[] buf) { try { mWaveBuffer.write(buf); } catch (IOException e) { // ignore. } } @Override public void onEndOfSpeech() { mState = WORKING; mRecognitionView.showWorking(mWaveBuffer, mSpeechStart, mWaveBuffer.size()); } @Override public void onError(int errorType) { mState = ERROR; switch (errorType) { case SpeechRecognizer.ERROR_AUDIO: // mISpeechRecognize.setRecognizeResult("录音出错"); Log.d("error", "录音出错"); break; case SpeechRecognizer.ERROR_CLIENT: // mISpeechRecognize.setRecognizeResult("客户端错误"); Log.d("error", "客户端错误"); break; case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS: // mISpeechRecognize.setRecognizeResult("权限不足"); Log.d("error", "权限不足"); break; case SpeechRecognizer.ERROR_NETWORK: // mISpeechRecognize.setRecognizeResult("网络连接错误"); Log.d("error", "网络连接错误"); break; case SpeechRecognizer.ERROR_NETWORK_TIMEOUT: // mISpeechRecognize.setRecognizeResult("网络连接超时"); Log.d("error", "网络连接超时"); break; case SpeechRecognizer.ERROR_NO_MATCH: // mISpeechRecognize.setRecognizeResult("无法识别"); Log.d("error", "无法识别"); break; case SpeechRecognizer.ERROR_RECOGNIZER_BUSY: // mISpeechRecognize.setRecognizeResult("服务繁忙"); Log.d("error", "服务繁忙"); break; case SpeechRecognizer.ERROR_SERVER: // mISpeechRecognize.setRecognizeResult("服务器错误"); Log.d("error", "服务器错误"); break; case SpeechRecognizer.ERROR_SPEECH_TIMEOUT: // mISpeechRecognize.setRecognizeResult("没有语音输入"); Log.d("error", "没有语音输入"); break; } destroy(); startListening(); } @Override public void onResults(Bundle resultsBundle) { List<String> results = resultsBundle .getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); // VS Market update is needed for IME froyo clients to access the alternatesBundle mState = DEFAULT; mISpeechRecognize.setRecognizeResult(results.get(0)); destroy(); startListening(); } @Override public void onPartialResults(final Bundle partialResults) { } @Override public void onEvent(int eventType, Bundle params) { } }
开始监听:
private void startListening() { mRecognitionListener = new ImeRecognitionListener(); mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(mContext); mSpeechRecognizer.setRecognitionListener(mRecognitionListener); mState = LISTENING; mRecognitionView.showInitializing(); Intent intent = makeIntent(); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, ""); intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "something"); mSpeechRecognizer.startListening(intent); }
停止监听:
public void stopListening() { mSpeechRecognizer.stopListening(); mRecognitionView.showInitializing(); }
获取监听服务Intent
private static Intent makeIntent() { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); if (Build.VERSION.RELEASE.equals("1.5")) { intent = intent.setClassName("com.google.android.voiceservice", "com.google.android.voiceservice.IMERecognitionService"); } else { intent = intent.setClassName("com.google.android.voicesearch", "com.google.android.voicesearch.RecognitionService"); } return intent; }
要让程序正常运行还需要安装google提供的VoiceSearch.apk
结果图:
下载:http://download.csdn.net/detail/hazard88/7408803
0 0
- 根据Android中源码修改使用Google语音识别,开始识别后每次识别不用重新点击开始。
- 开始学习语音识别技术
- 使用Google语音识别引擎
- Android语音识别功能使用
- Android使用百度语音识别
- 【Google Voice】Android 轻松实现语音识别
- google语音识别API的使用
- android 语音识别 Recognizer.cpp 源码
- android 语音识别接口
- android语音识别简介
- Android语音识别
- android语音识别代码
- android 本地语音识别
- android 语音识别
- android 语音识别
- Android-语音识别
- Android 语音识别
- Android 实现语音识别
- Highcharts 饼图tooltip format
- Scripts:报告数据库中所有数据文件使用情况dba_files_all.sql
- Photoshop + ExifToolGUI 完美复制照片信息
- Shell编程Shift
- 要大力发扬湖湘文化敢为人先的优良传统 着力打造移动互联网“湘军”
- 根据Android中源码修改使用Google语音识别,开始识别后每次识别不用重新点击开始。
- DFHDFH563435FGJGDHDFG54
- Linux下四款Web服务器压力测试工具(http_load、webbench、ab、siege)介绍
- Python操作Mysql数据库
- Velocity 字符串拼接
- spring security web.xml 监听器
- Scripts:报告无效对象汇总dba_invalid_objects_summary.sql
- Android Gson解析
- Linux curl使用简单介绍