/*** * * 离线、云端语音识别类 * */ public class AsrDemo extends Activity implements OnClickListener{ private static String TAG = AsrDemo.class.getSimpleName(); // 语音识别对象 private SpeechRecognizer mAsr; private Toast mToast; // 缓存 private SharedPreferences mSharedPreferences; // 本地语法文件 private String mLocalGrammar = null; // 本地词典 private String mLocalLexicon = null; // 云端语法文件 private String mCloudGrammar = null; // 本地语法构建路径 private String grmPath = Environment.getExternalStorageDirectory() .getAbsolutePath() + "/msc/test"; // 返回结果格式,支持:xml,json private String mResultType = "json"; private final String KEY_GRAMMAR_ABNF_ID = "grammar_abnf_id"; private final String GRAMMAR_TYPE_ABNF = "abnf"; private final String GRAMMAR_TYPE_BNF = "bnf"; private String mEngineType = "cloud"; private TtsUtils ttsUtils; private TtsOffUtil ttsOffUtil; @SuppressLint("ShowToast") public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.isrdemo); initLayout(); ttsUtils = new TtsUtils(); ttsOffUtil = new TtsOffUtil(this); // 初始化识别对象 mAsr = SpeechRecognizer.createRecognizer(this, mInitListener); // 初始化语法、命令词 mLocalLexicon = "张海羊\n刘婧\n王锋\n"; mLocalGrammar = FucUtil.readFile(this,"call.bnf", "utf-8"); mCloudGrammar = FucUtil.readFile(this,"grammar_sample.abnf","utf-8"); // 获取联系人,本地更新词典时使用 ContactManager mgr = ContactManager.createManager(AsrDemo.this, mContactListener); mgr.asyncQueryAllContactsName(); mSharedPreferences = getSharedPreferences(getPackageName(), MODE_PRIVATE); mToast = Toast.makeText(this,"",Toast.LENGTH_SHORT); } /** * 初始化Layout。 */ private void initLayout(){ findViewById(R.id.isr_recognize).setOnClickListener(this); findViewById(R.id.isr_grammar).setOnClickListener(this); findViewById(R.id.isr_lexcion).setOnClickListener(this); findViewById(R.id.isr_stop).setOnClickListener(this); findViewById(R.id.isr_cancel).setOnClickListener(this); //选择云端or本地 RadioGroup group = (RadioGroup)this.findViewById(R.id.radioGroup); group.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { if(checkedId == R.id.radioCloud) { ((EditText)findViewById(R.id.isr_text)).setText(mCloudGrammar); findViewById(R.id.isr_lexcion).setEnabled(false); mEngineType = SpeechConstant.TYPE_CLOUD; }else if(checkedId == R.id.radioLocal) { ((EditText)findViewById(R.id.isr_text)).setText(mLocalGrammar); findViewById(R.id.isr_lexcion).setEnabled(true); mEngineType = SpeechConstant.TYPE_LOCAL; } } }); } String mContent;// 语法、词典临时变量 int ret = 0;// 函数调用返回值 @Override public void onClick(View view) { if( null == mAsr ){ // 创建单例失败,与 21001 错误为同样原因,参考 http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=9688 this.showTip( "创建对象失败,请确认 libmsc.so 放置正确,\n 且有调用 createUtility 进行初始化" ); return; } if(null == mEngineType) { showTip("请先选择识别引擎类型"); return; } switch(view.getId()) { case R.id.isr_grammar: showTip("上传预设关键词/语法文件"); // 本地-构建语法文件,生成语法id if (mEngineType.equals(SpeechConstant.TYPE_LOCAL)) { ((EditText)findViewById(R.id.isr_text)).setText(mLocalGrammar); mContent = new String(mLocalGrammar); mAsr.setParameter(SpeechConstant.PARAMS, null); // 设置文本编码格式 mAsr.setParameter(SpeechConstant.TEXT_ENCODING,"utf-8"); // 设置引擎类型 mAsr.setParameter(SpeechConstant.ENGINE_TYPE, mEngineType); // 设置语法构建路径 mAsr.setParameter(ResourceUtil.GRM_BUILD_PATH, grmPath); //使用8k音频的时候请解开注释 // mAsr.setParameter(SpeechConstant.SAMPLE_RATE, "8000"); // 设置资源路径 mAsr.setParameter(ResourceUtil.ASR_RES_PATH, getResourcePath()); ret
科大讯飞 离线语音
最新推荐文章于 2024-08-01 18:38:03 发布
本文介绍了如何使用科大讯飞的离线语音识别和合成API。通过创建SpeechRecognizer对象并设置参数,实现离线语法文件和词典的构建、更新,以及语音识别和合成的功能。同时,展示了如何处理语音识别结果和错误码,并提供了语音识别和合成的监听器示例。
摘要由CSDN通过智能技术生成