整合百度语音到图灵机器人

来源:互联网 发布:bilibili直播软件 mac 编辑:程序博客网 时间:2024/04/27 17:29

源码已经打包上来了,需要的可以看看,里面需要图灵机器人的一个key,百度语音key等,需要自己去申请添加进去,分别在MainActivity类跟HttpUtil里面添加!

在前人图灵机器人的demo基础上添加了语音功能,功能简单,但是有时候还是会用到!

贴一下MainActivity类:


       public class MainActivity extends Activity implements SensorEventListener {
/**
* 展示消息的listview
*/
private ListView mChatView;
/**
* 文本域
*/
private EditText mMsg;
/**
* 存储聊天消息
*/
private List<ChatMessage> mDatas = new ArrayList<ChatMessage>();
/**
* 适配器
*/
private ListMessageAdapter mAdapter;
//定义头像
    private ImageView chat_from_icon;
private SensorManager mSensorManager;
//启动语音功能
Button  video;
    //百度语音识别对话框
    BaiduASRDigitalDialog mDialog=null;
    DialogRecognitionListener mDialogListener=null; 
    //应用授权信息 ,填入属于自己的key
    String API_KEY="XXXXXXXXXXXXXX";
    String SECRET_KEY="XXXXXXXXXXXXXX";
//private TextView sendmsg;
 
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
ChatMessage from = (ChatMessage) msg.obj;
mDatas.add(from);
mAdapter.notifyDataSetChanged();
mChatView.setSelection(mDatas.size() - 1);
};
};


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main_chatting);
initView();
mAdapter = new ListMessageAdapter(this, mDatas);
mChatView.setAdapter(mAdapter);
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
// sendmsg=(TextView)findViewById(R.id.chat_send_content);
Videos();
}
      
@Override
protected void onResume() {
super.onResume();


// 加速度传感器
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
// 还有SENSOR_DELAY_UI、SENSOR_DELAY_FASTEST、SENSOR_DELAY_GAME等,
// 根据不同应用,需要的反应速率不同,具体根据实际情况设定
SensorManager.SENSOR_DELAY_NORMAL);
}


@Override
protected void onStop() {
mSensorManager.unregisterListener(this);
super.onStop();
}


@Override
protected void onPause() {
mSensorManager.unregisterListener(this);
super.onPause();
}


private void initView() {
mChatView = (ListView) findViewById(R.id.id_chat_listView);
chat_from_icon=(ImageView)findViewById(R.id.chat_from_icon);
mMsg = (EditText) findViewById(R.id.id_chat_msg);
mDatas.add(new ChatMessage(Type.INPUT,
"我是静静,我可是上知天文,下知地理,古今中外样样精通,你什么都可以问我呦~"));

}


public void sendMessage(View view) {
final String msg = mMsg.getText().toString();
if (TextUtils.isEmpty(msg)) {
Toast.makeText(this, "您还没有输入呢,静静看不见的呦~.", 1).show();
return;
}
ChatMessage to = new ChatMessage(Type.OUTPUT, msg);
to.setDate(new Date());
mDatas.add(to);


mAdapter.notifyDataSetChanged();
mChatView.setSelection(mDatas.size() - 1);


mMsg.setText("");


// 关闭软键盘
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// 得到InputMethodManager的实例
if (imm.isActive()) {
// 如果开启
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
InputMethodManager.HIDE_NOT_ALWAYS);
// 关闭软键盘,开启方法相同,这个方法是切换开启与关闭状态的
}


new Thread() {
public void run() {
ChatMessage from = null;
try {
from = HttpUtils.sendMsg(msg);
} catch (Exception e) {
from = new ChatMessage(Type.INPUT, "服务器腿短,跟不上~~~~~");
}
Message message = Message.obtain();
message.obj = from;
mHandler.sendMessage(message);
};
}.start();


}
       //晃动手机界面摆动实现
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
int sensorType = event.sensor.getType();


// values[0]:X轴,values[1]:Y轴,values[2]:Z轴
float[] values = event.values;
if (sensorType == Sensor.TYPE_ACCELEROMETER) {
/*
* 因为一般正常情况下,任意轴数值最大就在9.8~10之间,只有在你突然摇动手机的时候,瞬时加速度才会突然增大或减少。
* 所以,经过实际测试,只需监听任一轴的加速度大于14的时候,改变你需要的设置就OK了~~~
*/
if ((Math.abs(values[0]) > 14 || Math.abs(values[1]) > 14 || Math
.abs(values[2]) > 14)) {
mChatView.startAnimation(AnimationUtils.loadAnimation(this,
R.anim.shake));
mDatas.add(new ChatMessage(Type.INPUT, "不要摇了,静静晕了~"));
mAdapter.notifyDataSetChanged();
}
}


}


@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub


}
//语音识别方法
    private void Videos(){           
    if (mDialog == null) {
            if (mDialog != null) {
            mDialog.dismiss();
        }
        Bundle params = new Bundle();
        //设置API_KEY, SECRET_KEY
        params.putString(BaiduASRDigitalDialog.PARAM_API_KEY, API_KEY);
        params.putString(BaiduASRDigitalDialog.PARAM_SECRET_KEY, SECRET_KEY);
        //默认输入模式
        params.putInt(BaiduASRDigitalDialog.PARAM_PROP, VoiceRecognitionConfig.PROP_INPUT);
        //设置语音识别对话框为蓝色高亮主题
        params.putInt(BaiduASRDigitalDialog.PARAM_DIALOG_THEME, BaiduASRDigitalDialog.THEME_BLUE_LIGHTBG);
        //默认语音类型中文普通话
        params.putString(BaiduASRDigitalDialog.PARAM_LANGUAGE, VoiceRecognitionConfig.LANGUAGE_CHINESE);
        //实例化百度语音识别对话框
         mDialog = new BaiduASRDigitalDialog(this, params);
        //设置百度语音识别回调接口
        mDialogListener=new DialogRecognitionListener()
        {
            @Override
            public void onResults(Bundle mResults) 
            {
                ArrayList<String> rs = mResults != null ? mResults.getStringArrayList(RESULTS_RECOGNITION) : null;    
                if (rs != null && rs.size() > 0) {
                final String msg=rs.get(0);                       
            ChatMessage too = new ChatMessage(Type.OUTPUT, msg);
            too.setDate(new Date());
            mDatas.add(too);
            mAdapter.notifyDataSetChanged();
            mChatView.setSelection(mDatas.size() - 1);          
            new Thread() {
            public void run() {
            ChatMessage from = null;
            try {
            from = HttpUtils.sendMsg(msg);
            } catch (Exception e) {
            from = new ChatMessage(Type.INPUT, "服务器腿短,跟不上~~~~~");
            }
            Message message = Message.obtain();
            message.obj = from;
            mHandler.sendMessage(message);
            };
            }.start();
                }                
            }
             
        };
        mDialog.setDialogRecognitionListener(mDialogListener);
    }
    //禁用语义识别
    mDialog.getParams().putBoolean(BaiduASRDigitalDialog.PARAM_NLU_ENABLE, false);    
    //界面元素
    video=(Button)findViewById(R.id.video);   
    video.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v) 
        {
            mDialog.show();
        }
    });
    
    }
}

2 0