我这里直接在图灵机器人实现人与机器人俩天的基础上,调用了讯飞的几个方法在来实现语音的录入与输出,很简单大家可以参考学习
package com.lcmf.robot;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RadioGroup;
import android.widget.Toast;
import com.iflytek.cloud.ErrorCode;
import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.RecognizerListener;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechRecognizer;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SynthesizerListener;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;
import com.iflytek.cloud.util.ResourceUtil;
import com.iflytek.cloud.util.ResourceUtil.RESOURCE_TYPE;
import com.iflytek.speech.setting.IatSettings;
import com.iflytek.speech.setting.TtsSettings;
import com.iflytek.speech.util.JsonParser;
import com.lcmf.ad.QuitPopAd;
import com.lcmf.ad.SlideWall;
import com.lcmf.menu.MainClass;
import com.lcmf.robot.bean.ChatMessage;
import com.lcmf.robot.bean.ChatMessage.Type;
import com.lcmf.tts.TtsDemo;
import com.zhy.utils.HttpUtils;
//import android.speech.SpeechRecognizer;
public class MainActivity extends Activity implements OnClickListener {
private static String TAG = MainActivity.class.getSimpleName();
// 语音合成对象
private SpeechSynthesizer mTts;
/**
* 展示消息的listview
*/
// 听写结果内容
private ListView mChatView;
// 语音听写对象
private SpeechRecognizer mIat;
/**
* 文本域
*/
private SharedPreferences mSharedPreferences;
private RecognizerDialog mIatDialog;
private EditText mMsg;
private EditText mGetMsg;
/**
* 存储聊天消息
*/
// 默认云端发音人
public static String voicerCloud="xiaoyan";
// 默认本地发音人
public static String voicerLocal="xiaoyan";
// 云端发音人列表
private String[] cloudVoicersEntries;
private String[] cloudVoicersValue ;
// 本地发音人列表
private String[] localVoicersEntries;
private String[] localVoicersValue ;
private HashMap<String, String> mIatResults = new LinkedHashMap<String, String>();
//缓冲进度
private int mPercentForBuffering = 0;
//播放进度
private int mPercentForPlaying = 0;
// 云端/本地选择按钮
private RadioGroup mRadioGroup;
// 引擎类型
private String mEngineType = SpeechConstant.TYPE_CLOUD;
private Toast mToast;
@SuppressLint("ShowToast")
private List<ChatMessage> mDatas = new ArrayList<ChatMessage>();
/**
* 适配器
*/
private ChatMessageAdapter mAdapter;
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);
mGetMsg.setText(from.getMsg().toString());
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main_chatting);
initView();
// 使用SpeechRecognizer对象,可根据回调消息自定义界面;
mIat = SpeechRecognizer.createRecognizer(this, mInitListener);
// 初始化听写Dialog,如果只使用有UI听写功能,无需创建SpeechRecognizer
// 使用UI听写功能,请根据sdk文件目录下的notice.txt,放置布局文件和图片资源
mIatDialog = new RecognizerDialog(this, mInitListener);
mAdapter = new ChatMessageAdapter(this, mDatas);
mChatView.setAdapter(mAdapter);
// 初始化合成对象
mTts = SpeechSynthesizer.createSynthesizer(this, mTtsInitListener);
// 云端发音人名称列表
cloudVoicersEntries = getResources().getStringArray(R.array.voicer_cloud_entries);
cloudVoicersValue = getResources().getStringArray(R.array.voicer_cloud_values);
// 本地发音人名称列表
localVoicersEntries = getResources().getStringArray(R.array.voicer_local_entries);
localVoicersValue = getResources().getStringArray(R.array.voicer_local_values);
mSharedPreferences = getSharedPreferences(TtsSettings.PREFER_NAME, Activity.MODE_PRIVATE);
mToast = Toast.makeText(this,"",Toast.LENGTH_SHORT);
//SpeechRecognizer mIat = SpeechRecognizer.createSpeechRecognizer(this,null);
// mIat.setParameter(SpeechConstant.DOMAIN,"iat");
// mIat.setParameter(SpeechConstant.LANGUAGE,"zh_cn");
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
menu.add(Menu.NONE, Menu.FIRST + 1, 5, "语音设置").setIcon(android.R.drawable.ic_menu_delete);
menu.add(Menu.NONE, Menu.FIRST + 2, 2, "听写设置").setIcon(android.R.drawable.ic_menu_edit);
menu.add(Menu.NONE, Menu.FIRST + 3, 6, "选择发音人").setIcon(android.R.drawable.ic_menu_help);
/*menu.add(Menu.NONE, Menu.FIRST + 4, 1, "添加").setIcon(android.R.drawable.ic_menu_add);
menu.add(Menu.NONE, Menu.FIRST + 5, 4, "详细").setIcon(android.R.drawable.ic_menu_info_details);
menu.add(Menu.NONE, Menu.FIRST + 6, 3, "发送").setIcon(android.R.drawable.ic_menu_send);*/
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Menu.FIRST + 1:
Toast.makeText(this, "语音设置", Toast.LENGTH_LONG).show();
Intent intent = new Intent(MainActivity.this,TtsSettings.class);
startActivity(intent);
break;
case Menu.FIRST + 2:
Toast.makeText(this, "听写设置", Toast.LENGTH_LONG).show();
Intent intent1 = new Intent(MainActivity.this, IatSettings.class);
startActivity(intent1);
break;
case Menu.FIRST + 3:
Toast.makeText(this, "选择发音人", Toast.LENGTH_LONG).show();
showPresonSelectDialog();
break;
}
return false;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (SlideWall.getInstance().slideWallDrawer != null && SlideWall.getInstance().slideWallDrawer.isOpened()) {
// 如果抽屉式应用墙展示中,则关闭抽屉
SlideWall.getInstance().closeSlidingDrawer();
} else {
// 调用退屏广告
QuitPopAd.getInstance().show(this);
}
}
return true;
}
private void initView() {
mChatView = (ListView) findViewById(R.id.id_chat_listView);
mMsg = (EditText) findViewById(R.id.id_chat_msg);
mGetMsg = (EditText) f