您的位置:首页 > 移动开发 > Android开发

根据Android中源码修改使用Google语音识别,开始识别后每次识别不用重新点击开始。

2014-05-27 10:57 471 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐