1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > AndroidStudio快速开发讯飞语音听写

AndroidStudio快速开发讯飞语音听写

时间:2023-03-14 10:24:46

相关推荐

AndroidStudio快速开发讯飞语音听写

好久没更新了,差点就忘记这个东东了,不过好在一闲下来就赶紧更新一波 哈哈^_^

**此博客主要针对将要进行语音开发的小白,如有不对的地方,请指正

到科大讯飞官网注册账号并登陆,选择单个服务SDK下载 ,选择语音听写服务、Android平台并新建一个应用,下载完成后解压。如下图

1.新建一个项目,将解压后的assets文件复制在项目的main目录下,并且在main目录下新建一个名为jniLibs的文件夹,将libs中的所有文件夹复制到jniLibs中,然后把libs的Msc.jar和Sunflower.jar放在项目的libs下并且右键选择添加到库。项目的文件目录如下

2.将打开sample–SpeechDemo–src–com–iflytek–speech-util,将FucUtil.java(功能性函数扩展类)和JsonParser.java(Json结果解析类)复制到utils包下

3.这里我直接将代码放过来,有不懂得可以看下注释

public class RecognitionActivity extends AppCompatActivity {//显示听写结果private TextView textView;//语音听写对象private SpeechRecognizer speechRecognizer;//语音听写UIprivate RecognizerDialog recognizerDialog;//是否显示听写UIprivate boolean isShowDialog = true;//缓存private SharedPreferences sharedPreferences;//用hashmap存储听写结果private HashMap<String, String> hashMap = new LinkedHashMap<String, String>();//引擎类型(云端或本地)private String mEngineType = null;//函数返回值private int ret = 0;private Toast toast;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_recognition);initView();initDate();}private void initDate() {//初始化sdk 将自己申请的appid放到下面//此句代码应该放在application中的,这里为了方便就直接放代码中了SpeechUtility.createUtility(this, "appid=你自己申请的appid");speechRecognizer = SpeechRecognizer.createRecognizer(this, initListener);recognizerDialog = new RecognizerDialog(this, initListener);sharedPreferences = getSharedPreferences(this.getPackageName(), Context.MODE_PRIVATE);toast = Toast.makeText(this, "", Toast.LENGTH_SHORT);//这里我直接将引擎类型设置为云端,因为本地需要下载讯飞语记,这里为了方便直接使用云端//有需要的朋友可以加个单选框 让用户选择云端或本地mEngineType = SpeechConstant.TYPE_CLOUD;}private void initView() {textView = (TextView) findViewById(R.id.tv);}//开始听写public void start(View view) {textView.setText("");hashMap.clear();setParams();if (isShowDialog) {recognizerDialog.setListener(dialogListener);recognizerDialog.show();} else {ret = speechRecognizer.startListening(recognizerListener);if (ret != ErrorCode.SUCCESS) {Log.e("tag", "听写失败,错误码" + ret);}}}//结束听写public void stop(View view) {Toast.makeText(this, "停止听写", Toast.LENGTH_SHORT).show();if (isShowDialog) {recognizerDialog.dismiss();} else {speechRecognizer.stopListening();}}//初始化监听器private InitListener initListener = new InitListener() {@Overridepublic void onInit(int i) {if (i != ErrorCode.SUCCESS) {Log.e("tag", "初始化失败,错误码" + i);}}};//无UI监听器private RecognizerListener recognizerListener = new RecognizerListener() {@Overridepublic void onVolumeChanged(final int i, byte[] bytes) {Log.e("tag", "返回数据大小" + bytes.length);runOnUiThread(new Runnable() {@Overridepublic void run() {toast.setText("当前音量" + i);}});}@Overridepublic void onBeginOfSpeech() {Log.e("tag", "开始说话");}@Overridepublic void onEndOfSpeech() {Log.e("tag", "结束说话");}@Overridepublic void onResult(RecognizerResult recognizerResult, boolean b) {if (recognizerResult != null) {Log.e("tag", "听写结果:" + recognizerResult.getResultString());printResult(recognizerResult);}}@Overridepublic void onError(SpeechError speechError) {Log.e("tag", "错误信息" + speechError.getPlainDescription(true));}@Overridepublic void onEvent(int i, int i1, int i2, Bundle bundle) {// 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因// 若使用本地能力,会话id为null// if (SpeechEvent.EVENT_SESSION_ID == eventType) {//String sid = obj.getString(SpeechEvent.KEY_EVENT_SESSION_ID);//Log.d(TAG, "session id =" + sid);// }}};//有UI监听器private RecognizerDialogListener dialogListener = new RecognizerDialogListener() {@Overridepublic void onResult(RecognizerResult recognizerResult, boolean b) {if (recognizerResult != null) {Log.e("tag", "听写结果:" + recognizerResult.getResultString());printResult(recognizerResult);}}@Overridepublic void onError(SpeechError speechError) {Log.e("tag", speechError.getPlainDescription(true));}};//输出结果,将返回的json字段解析并在textVie中显示private void printResult(RecognizerResult results) {String text = JsonParser.parseIatResult(results.getResultString());String sn = null;// 读取json结果中的sn字段try {JSONObject resultJson = new JSONObject(results.getResultString());sn = resultJson.optString("sn");} catch (JSONException e) {e.printStackTrace();}hashMap.put(sn, text);StringBuffer resultBuffer = new StringBuffer();for (String key : hashMap.keySet()) {resultBuffer.append(hashMap.get(key));}textView.setText(resultBuffer.toString());}private void setParams() {//清空参数speechRecognizer.setParameter(SpeechConstant.PARAMS, null);//设置引擎speechRecognizer.setParameter(SpeechConstant.ENGINE_TYPE, mEngineType);//设置返回数据类型speechRecognizer.setParameter(SpeechConstant.RESULT_TYPE, "json");//设置中文 普通话speechRecognizer.setParameter(SpeechConstant.LANGUAGE, "zh_cn");speechRecognizer.setParameter(SpeechConstant.ACCENT, "mandarin");// 设置语音前端点:静音超时时间,即用户多长时间不说话则当做超时处理speechRecognizer.setParameter(SpeechConstant.VAD_BOS,sharedPreferences.getString("iat_vadbos_preference", "4000"));// 设置语音后端点:后端点静音检测时间,即用户停止说话多长时间内即认为不再输入, 自动停止录音speechRecognizer.setParameter(SpeechConstant.VAD_EOS,sharedPreferences.getString("iat_vadeos_preference", "1000"));// 设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点speechRecognizer.setParameter(SpeechConstant.ASR_PTT,sharedPreferences.getString("iat_punc_preference", "0"));// 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限// 注:AUDIO_FORMAT参数语记需要更新版本才能生效speechRecognizer.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");speechRecognizer.setParameter(SpeechConstant.ASR_AUDIO_PATH,Environment.getExternalStorageDirectory() + "/msc/iat.wav");}}

布局文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:id="@+id/activity_recognition"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextView android:id="@+id/tv"android:layout_width="match_parent"android:layout_height="100dp"android:background="#55cccccc" /><LinearLayout android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Button android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:onClick="start"android:text="开始听写" /><Button android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:onClick="stop"android:text="停止听写" /></LinearLayout></LinearLayout>

注释:appid可以在登陆科大讯飞后进入控制台中查看,项目中的注释有我个人的想法,所以可能和官方的不太一样,大家以理解为主

还有别忘了在AndroidManifest.xml中添加权限

<!-- 讯飞语音权限开始 --><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 讯飞语音权限结束 -->

到此,讯飞平台的语音听写功能就实现了,大家赶紧来试一下吧!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。