失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 简单的语音合成与语音识别(科大讯飞)

简单的语音合成与语音识别(科大讯飞)

时间:2020-05-19 15:21:57

相关推荐

简单的语音合成与语音识别(科大讯飞)

首先导入科大讯飞工具包

MainActivity源代码:

package com.example.viocedemo;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import com.iflytek.cloud.speech.RecognizerResult;import com.iflytek.cloud.speech.SpeechConstant;import com.iflytek.cloud.speech.SpeechError;import com.iflytek.cloud.speech.SpeechListener;import com.iflytek.cloud.speech.SpeechSynthesizer;import com.iflytek.cloud.speech.SpeechUser;import com.iflytek.cloud.speech.SynthesizerListener;import com.iflytek.cloud.ui.RecognizerDialog;import com.iflytek.cloud.ui.RecognizerDialogListener;public class MainActivity extends Activity implements OnClickListener,SynthesizerListener {private EditText editText;private Button button1;private Button button2;// 合成对象private SpeechSynthesizer speechSynthesizer;// 识别窗口private RecognizerDialog recognizerDialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// appid换成自己申请的SpeechUser.getUser().login(MainActivity.this, null, null,"appid=12345678", listener);init();setParam();}/*** 初始化UI*/public void init() {editText = (EditText) findViewById(R.id.editText1);button1 = (Button) findViewById(R.id.button1);button2 = (Button) findViewById(R.id.button2);button1.setOnClickListener(this);button2.setOnClickListener(this);}/*** 初始化语音类别*/public void setParam() {speechSynthesizer = SpeechSynthesizer.createSynthesizer(this);speechSynthesizer.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");speechSynthesizer.setParameter(SpeechConstant.SPEED, "50");speechSynthesizer.setParameter(SpeechConstant.VOLUME, "50");speechSynthesizer.setParameter(SpeechConstant.PITCH, "50");}/*** 识别语音的弹出框*/public void setDialog() {recognizerDialog = new RecognizerDialog(this);recognizerDialog.setParameter(SpeechConstant.DOMAIN, "iat");recognizerDialog.setParameter(SpeechConstant.SAMPLE_RATE, "16000");editText.setText(null);// 显示DialogrecognizerDialog.setListener(dialogListener);recognizerDialog.show();}/*** 识别回调监听器*/private RecognizerDialogListener dialogListener = new RecognizerDialogListener() {// 识别结果回调@Overridepublic void onResult(RecognizerResult arg0, boolean arg1) {// TODO Auto-generated method stubString text = JsonParser.parseIatResult(arg0.getResultString());editText.append(text);editText.setSelection(editText.length());}// 识别结束回调@Overridepublic void onError(SpeechError arg0) {// TODO Auto-generated method stub}};@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.button1:// 语音播放按钮String text = editText.getText().toString();speechSynthesizer.startSpeaking(text, this);break;case R.id.button2:// 语音识别setDialog();break;default:break;}}// 缓冲进度回调通知@Overridepublic void onBufferProgress(int arg0, int arg1, int arg2, String arg3) {// TODO Auto-generated method stub}// 结束回调@Overridepublic void onCompleted(SpeechError arg0) {// TODO Auto-generated method stub}// 开始播放@Overridepublic void onSpeakBegin() {// TODO Auto-generated method stub}// 暂停播放@Overridepublic void onSpeakPaused() {// TODO Auto-generated method stub}// 播放进度@Overridepublic void onSpeakProgress(int arg0, int arg1, int arg2) {// TODO Auto-generated method stub}// 继续播放@Overridepublic void onSpeakResumed() {// TODO Auto-generated method stub}/*** 通用回调接口*/private SpeechListener listener = new SpeechListener() {// 消息回调@Overridepublic void onEvent(int arg0, Bundle arg1) {// TODO Auto-generated method stub}// 数据回调@Overridepublic void onData(byte[] arg0) {// TODO Auto-generated method stub}// 结束回调(没有错误)@Overridepublic void onCompleted(SpeechError arg0) {// TODO Auto-generated method stub}};}

JsonParser类源代码:

package com.example.viocedemo;import org.json.JSONArray;import org.json.JSONObject;import org.json.JSONTokener;import android.text.TextUtils;//import com.iflytek.speech.ErrorCode;//import com.iflytek.speech.SpeechError;/*** 对云端返回的Json结果进行解析* @author iFlytek* @since 1211*/public class JsonParser {/*** 听写结果的Json格式解析* @param json* @return*/public static String parseIatResult(String json) {if(TextUtils.isEmpty(json))return "";StringBuffer ret = new StringBuffer();try {JSONTokener tokener = new JSONTokener(json);JSONObject joResult = new JSONObject(tokener);JSONArray words = joResult.getJSONArray("ws");for (int i = 0; i < words.length(); i++) {JSONArray items = words.getJSONObject(i).getJSONArray("cw");JSONObject obj = items.getJSONObject(0);ret.append(obj.getString("w"));}} catch (Exception e) {e.printStackTrace();} return ret.toString();}}

UI布局:

<LinearLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><EditTextandroid:id="@+id/editText1"android:layout_width="match_parent"android:layout_height="250dip"android:gravity="top"android:ems="10" ><requestFocus /></EditText><Buttonandroid:id="@+id/button1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="语音播放" /><Buttonandroid:id="@+id/button2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="语音听写" /></LinearLayout>

源代码下载

如果觉得《简单的语音合成与语音识别(科大讯飞)》对你有帮助,请点赞、收藏,并留下你的观点哦!

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