Android使用百度语音识别的示例代码
本文使用百度语音识别,完成语音识别的功能,使用百度语音识别,先要申请APPID,这个直接到百度网站上有说明文档,本文不再赘述。申请之后,下载SDK包,按照百度官网要求,合并libs和res两个目录到项目中,然后在build.gradle(module:app)中的Android{...}下添加
sourceSets{ main{ jniLibs.srcDirs=['libs'] } }
这样,百度语音识别的so文件才能正常使用。
Manifest文件中添加权限
<uses-permissionandroid:name="android.permission.RECORD_AUDIO"/> <uses-permissionandroid:name="android.permission.INTERNET"/> <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/> <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
然后还要在Manifest中添加
<!--请填写应用实际的APP_ID--> <meta-dataandroid:name="com.baidu.speech.APP_ID"android:value="APPID"/> <!--请填写应用实际的API_KEY--> <meta-dataandroid:name="com.baidu.speech.API_KEY"android:value="API_KEY"/> <!--请填写应用实际的SECRET_KEY--> <meta-dataandroid:name="com.baidu.speech.SECRET_KEY"android:value="SECRET_KEY"/> <serviceandroid:name="com.baidu.speech.VoiceRecognitionService"android:exported="false"/>
其中的APPID,API_KEY和SECRET_KEY替换为你申请的内容。
我们封装了一个工具类,用来使用语音识别
packagecom.yjp.speechrecognizer; importandroid.content.ComponentName; importandroid.content.Context; importandroid.content.Intent; importandroid.os.Bundle; importandroid.speech.RecognitionListener; importandroid.speech.SpeechRecognizer; importandroid.widget.Toast; importcom.baidu.speech.VoiceRecognitionService; publicclassSpeechRecognizerToolimplementsRecognitionListener{ publicinterfaceResultsCallback{ voidonResults(Stringresult); } privateContextmContext; privateSpeechRecognizermSpeechRecognizer; privateResultsCallbackmResultsCallback; publicSpeechRecognizerTool(Contextcontext){ mContext=context; } publicsynchronizedvoidcreateTool(){ if(null==mSpeechRecognizer){ //创建识别器 mSpeechRecognizer=SpeechRecognizer.createSpeechRecognizer(mContext, newComponentName(mContext,VoiceRecognitionService.class)); //注册监听器 mSpeechRecognizer.setRecognitionListener(this); } } publicsynchronizedvoiddestroyTool(){ mSpeechRecognizer.stopListening(); mSpeechRecognizer.destroy(); mSpeechRecognizer=null; } //开始识别 publicvoidstartASR(ResultsCallbackcallback){ mResultsCallback=callback; Intentintent=newIntent(); bindParams(intent); mSpeechRecognizer.startListening(intent); } //停止识别 publicvoidstopASR(){ mSpeechRecognizer.stopListening(); } privatevoidbindParams(Intentintent){ //设置识别参数 } @Override publicvoidonReadyForSpeech(Bundleparams){ //准备就绪 Toast.makeText(mContext,"请开始说话",Toast.LENGTH_SHORT).show(); } @Override publicvoidonBeginningOfSpeech(){ //开始说话处理 } @Override publicvoidonRmsChanged(floatrmsdB){ //音量变化处理 } @Override publicvoidonBufferReceived(byte[]buffer){ //录音数据传出处理 } @Override publicvoidonEndOfSpeech(){ //说话结束处理 } @Override publicvoidonError(interror){ } @Override publicvoidonResults(Bundleresults){ //最终结果处理 if(mResultsCallback!=null){ Stringtext=results.get(SpeechRecognizer.RESULTS_RECOGNITION) .toString().replace("]","").replace("[",""); mResultsCallback.onResults(text); } } @Override publicvoidonPartialResults(BundlepartialResults){ //临时结果处理 } @Override publicvoidonEvent(inteventType,Bundleparams){ } }
MainActivity的界面如下
<?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" android:gravity="center" tools:context="com.yjp.speechrecognizer.MainActivity"> <Button android:id="@+id/startSpeechButton" android:layout_width="60dp" android:layout_height="40dp" android:background="@drawable/bdspeech_btn_orangelight_normal" android:text="按住说话"/> <TextView android:id="@+id/speechTextView" android:layout_margin="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
MainActivity的类实现为:
packagecom.yjp.speechrecognizer; importandroid.os.Bundle; importandroid.support.v7.app.AppCompatActivity; importandroid.view.MotionEvent; importandroid.view.View; importandroid.widget.Button; importandroid.widget.TextView; publicclassMainActivityextendsAppCompatActivityimplementsSpeechRecognizerTool.ResultsCallback{ privateButtonmStartSpeechButton; privateTextViewmTextView; privateSpeechRecognizerToolmSpeechRecognizerTool=newSpeechRecognizerTool(this); @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView=(TextView)findViewById(R.id.speechTextView); mStartSpeechButton=(Button)findViewById(R.id.startSpeechButton); mStartSpeechButton.setOnTouchListener(newView.OnTouchListener(){ @Override publicbooleanonTouch(Viewv,MotionEventevent){ intaction=event.getAction(); switch(action){ caseMotionEvent.ACTION_DOWN: mSpeechRecognizerTool.startASR(MainActivity.this); mStartSpeechButton.setBackgroundResource( R.drawable.bdspeech_btn_orangelight_pressed); break; caseMotionEvent.ACTION_UP: mSpeechRecognizerTool.stopASR(); mStartSpeechButton.setBackgroundResource( R.drawable.bdspeech_btn_orangelight_normal); break; default: returnfalse; } returntrue; } }); } @Override protectedvoidonStart(){ super.onStart(); mSpeechRecognizerTool.createTool(); } @Override protectedvoidonStop(){ super.onStop(); mSpeechRecognizerTool.destroyTool(); } @Override publicvoidonResults(Stringresult){ finalStringfinalResult=result; MainActivity.this.runOnUiThread(newRunnable(){ @Override publicvoidrun(){ mTextView.setText(finalResult); } }); } }
可以运行看一下效果,感觉识别率还是不错的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。