首页 资讯 【Android语音合成与语音识别】

【Android语音合成与语音识别】

来源:泰然健康网 时间:2024年12月07日 22:48

大   中   小

Android语音合成与语音识别

日期:2014/2/12 23:30:00 来源:本网整理 阅读:0次

Android语音合成与语音识别

这里调用科大讯飞语音的API,语音云开放平台介绍:http://open./

调用科大讯飞语音的API,需要加添库文件Msc.jar,添加libmsc.so文件,还需添加权限,具体步骤可参看SDK里的文档

参看开发的文档写了一个简单的语音合成和识别demo,图示如下


在EditText里输入文字,点击语音合成,可以实现文字转化为语音


点击语音合成,输入语音,识别的文字以提示的形式显示,并且显示在EditText中


主要代码如下,注意appid需要自己申请

package com.example.voice; import java.util.ArrayList; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.iflytek.cloud.speech.*; public class VoiceActivity extends Activity {private static final String APPID = "appid=52cddb99";private EditText et = null;private Button btn1 = null;private Button btn2 = null;String text = "";String temp="";protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_voice);et = (EditText) findViewById(R.id.et);btn1 = (Button) findViewById(R.id.btn1);btn1.setOnClickListener(mylistener);btn2 = (Button) findViewById(R.id.btn2);btn2.setOnClickListener(mylistener);}private OnClickListener mylistener = new OnClickListener() {public void onClick(View v) {SpeechUser.getUser().login(VoiceActivity.this, null, null, APPID,loginListener);Button btn = (Button) v;switch (btn.getId()) {case R.id.btn1:SpeechSynthesizer mSpeechSynthesizer = SpeechSynthesizer.createSynthesizer(VoiceActivity.this);mSpeechSynthesizer.setParameter(SpeechConstant.VOICE_NAME,"xiaoyu");mSpeechSynthesizer.setParameter(SpeechConstant.SPEED, "50");mSpeechSynthesizer.startSpeaking(et.getText().toString(),mSynListener);break;case R.id.btn2:text = "";temp="";SpeechRecognizer recognizer = SpeechRecognizer.createRecognizer(VoiceActivity.this);recognizer.setParameter(SpeechConstant.DOMAIN, "iat");recognizer.setParameter(SpeechConstant.LANGUAGE, "zh_cn");recognizer.setParameter(SpeechConstant.ACCENT, "accent");recognizer.startListening(mRecoListener);break;}}};private SynthesizerListener mSynListener = new SynthesizerListener() {public void onBufferProgress(int arg0, int arg1, int arg2, String arg3) {}public void onCompleted(SpeechError arg0) {}public void onSpeakBegin() {}public void onSpeakPaused() {}public void onSpeakProgress(int arg0, int arg1, int arg2) {}public void onSpeakResumed() {}};private RecognizerListener mRecoListener = new RecognizerListener() {public void onBeginOfSpeech() {}public void onEndOfSpeech() {}public void onError(SpeechError error) {}public void onEvent(int arg0, int arg1, int arg2, String arg3) {}public void onVolumeChanged(int arg0) {}public void onResult(RecognizerResult results, boolean isLast) {//将解析后的字符串连在一起temp=results.getResultString();JsonParser json = new JsonParser();text+=json.parseIatResult(temp);if(isLast==true){et.setText(text, null);Toast.makeText(VoiceActivity.this,text,Toast.LENGTH_LONG).show();}}};private SpeechListener loginListener = new SpeechListener() {public void onCompleted(SpeechError arg0) {}public void onData(byte[] arg0) {}public void onEvent(int arg0, Bundle arg1) {}};public boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.voice, menu);return true;} }

布局文件

<TableLayout xmlns:android="http://schemas./apk/res/android" xmlns:tools="http://schemas./tools" 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" tools:context=".VoiceActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="VoiceApplication" /> <EditText android:id="@+id/et" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="top" android:layout_weight="0.32" /> <Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0.03" android:text="语音合成" /> <Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0.03" android:text="语音识别" /> </TableLayout>

解析Json格式的数据是参照讯飞的文档中的

package com.example.voice; 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 20131211 */ 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"));// 如果需要多候选结果,解析数组其他字段// for(int j = 0; j < items.length(); j++)// {// JSONObject obj = items.getJSONObject(j);// ret.append(obj.getString("w"));// }}} catch (Exception e) {e.printStackTrace();}return ret.toString();} }

本文转载自suancaiyucoding博客,版权归suancaiyucoding所有

本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。

相关知识

语音识别抑郁症的关键技术研究
语音胎教故事
瑜伽语音冥想大揭秘
华为运动健康App开启智能教练和基础语音播报
5岁儿童发音不准、说话不清,语音障碍如何矫治?
音乐疗法联合语言训练对发育迟缓儿童语言康复的作用
英语启蒙=音素意识+自然拼读+分级阅读?No! (下篇)
科学育儿|婴儿语音发育的三个阶段
启音博士\u0026#183;佑声言语健康中心
【收藏】儿童语言障碍发音训练(一)

网址: 【Android语音合成与语音识别】 https://www.trfsz.com/newsview348392.html

推荐资讯