百度语音搜索,基于强大的语音识别能力,支持通过语音命令快速发起搜索,让搜索更快捷、更智能。对比手机端的文本键盘输入,百度语音搜索是更自然的,符合移动设备的交互方式。在百度强大的人工智能技术支持下,语音搜索前景广阔。语音等现代搜索引擎要做的是连接人与信息及服务,它不仅会倾听,更懂得理解与思考,未来将更好地造福人类。既然这么强大,我们就要好好的利用。
首先要去百度申请开发APP,然后填入appid,key,secret到你程序。有官方源码。这里我只给出最简单的使用代码
package com.voice.bdv;
import org.json.JSONObject;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognitionListener;
import android.speech.SpeechRecognizer;
import android.view.View;
import android.widget.Button;
import android.widget.ScrollView;
import android.widget.TextView;
import com.baidu.speech.VoiceRecognitionService;
public class MainActivity extends Activity implements RecognitionListener {
TextView textView;
Button btn;
SpeechRecognizer speechRecognizer;
private static final int EVENT_ERROR = 11;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn);
textView = (TextView) findViewById(R.id.log);
speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this,
new ComponentName(this, VoiceRecognitionService.class));
speechRecognizer.setRecognitionListener(this);
}
public void onClick(View view) {
start();
}
@Override
protected void onDestroy() {
speechRecognizer.destroy();
super.onDestroy();
}
private void start() {
textView.setText("");
print("点击了“开始”");
Intent intent = new Intent();
intent.putExtra("args", "");
speechRecognizer.startListening(intent);
}
@Override
public void onReadyForSpeech(Bundle params) {
// TODO Auto-generated method stub
print("准备就绪,可以开始说话");
}
@Override
public void onBeginningOfSpeech() {
// TODO Auto-generated method stub
btn.setText("说完了");
//print("检测到用户的已经开始说话");
}
@Override
public void onRmsChanged(float rmsdB) {
// TODO Auto-generated method stub
}
@Override
public void onBufferReceived(byte[] buffer) {
// TODO Auto-generated method stub
}
@Override
public void onEndOfSpeech() {
// TODO Auto-generated method stub
//print("检测到用户的已经停止说话");
btn.setText("识别中");
}
@Override
public void onError(int error) {
// TODO Auto-generated method stub
}
@Override
public void onResults(Bundle results) {
// TODO Auto-generated method stub
String json_res = results.getString("origin_result");
try {
print("origin_result=\n" + new JSONObject(json_res).toString(3));
} catch (Exception e) {
print("origin_result=[warning: bad json]\n" + json_res);
}
btn.setText("开始");
}
@Override
public void onPartialResults(Bundle partialResults) {
// TODO Auto-generated method stub
}
@Override
public void onEvent(int eventType, Bundle params) {
// TODO Auto-generated method stub
switch (eventType) {
case EVENT_ERROR:
String reason = params.get("reason") + "";
print("EVENT_ERROR, " + reason);
break;
case VoiceRecognitionService.EVENT_ENGINE_SWITCH:
// int type = params.getInt("engine_type");
// print("*引擎切换至" + (type == 0 ? "在线" : "离线"));
break;
}
}
private void print(String msg) {
textView.append(msg + "\n");
ScrollView sv = (ScrollView) textView.getParent();
sv.smoothScrollTo(0, 1000000);
}
}