700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android studio通过科大讯飞的SDK实现文字转语音功能

Android studio通过科大讯飞的SDK实现文字转语音功能

时间:2020-04-09 06:11:33

相关推荐

Android studio通过科大讯飞的SDK实现文字转语音功能

Android studio通过科大讯飞的SDK实现文字转语音功能

一、介绍二、具体操作

一、介绍

可以先看看我之前的博客:

Android studio调用科大讯飞的语音转文字功能

Android studio调用科大讯飞的关键词提取功能

Android studio根据文本提取出的关键词在sqlite数据库中查找相关内容

这篇博客主要是记录在Android studio上如何通过科大讯飞的SDK实现文字转语音功能。

二、具体操作

1.首先需要在安卓中配置SDK以及相关权限等内容,由于之前语音转文字已经配置好了,所以不想要重新进行配置,配置方法可参考:

Android studio调用科大讯飞的语音转文字功能

2.新建Java类MyAPP,代码如下:

package com.example.myapplication;import android.app.Application;import com.iflytek.cloud.SpeechConstant;import com.iflytek.cloud.SpeechUtility;public class MyAPP extends Application {@Overridepublic void onCreate() {super.onCreate();SpeechUtility.createUtility(MyAPP.this, SpeechConstant.APPID + "=填写自己appid"); //初始化}}

3.新建Java类KqwSpeechCompound,代码如下:

package com.example.myapplication;import android.content.Context;import android.os.Bundle;import android.text.TextUtils;import android.util.Log;import android.widget.Toast;import com.iflytek.cloud.ErrorCode;import com.iflytek.cloud.InitListener;import com.iflytek.cloud.SpeechConstant;import com.iflytek.cloud.SpeechError;import com.iflytek.cloud.SpeechSynthesizer;import com.iflytek.cloud.SynthesizerListener;public class KqwSpeechCompound {// Log标签private static final String TAG = "KqwSpeechCompound";// 上下文private Context mContext;// 语音合成对象private static SpeechSynthesizer mTts;/*** 发音人*/public final static String[] COLOUD_VOICERS_ENTRIES = {"小燕", "小宇", "凯瑟琳", "亨利", "玛丽", "小研", "小琪", "小峰", "小梅", "小莉", "小蓉", "小芸", "小坤", "小强 ", "小莹","小新", "楠楠", "老孙",};public final static String[] COLOUD_VOICERS_VALUE = {"xiaoyan", "xiaoyu", "catherine", "henry", "vimary", "vixy", "xiaoqi", "vixf", "xiaomei","xiaolin", "xiaorong", "xiaoqian", "xiaokun", "xiaoqiang", "vixying", "xiaoxin", "nannan", "vils",};/*** 构造方法** @param context*/public KqwSpeechCompound(Context context) {Log.d("tag54", "初始化失败,错ss 误码:" );// 上下文mContext = context;// 初始化合成对象mTts = SpeechSynthesizer.createSynthesizer(mContext, new InitListener() {@Overridepublic void onInit(int code) {if (code != ErrorCode.SUCCESS) {Log.d("tag54", "初始化失败,错误码:" + code);}Log.d("tag54", "初始化失败,q错误码:" + code);}});}/*** 开始合成** @param text*/public void speaking(String text) {// 非空判断if (TextUtils.isEmpty(text)) {return;}int code = mTts.startSpeaking(text, mTtsListener);Log.d("tag54","-----"+code+"++++++++++");if (code != ErrorCode.SUCCESS) {if (code == ErrorCode.ERROR_COMPONENT_NOT_INSTALLED) {Toast.makeText(mContext, "没有安装语音+ code = " + code, Toast.LENGTH_SHORT).show();} else {Toast.makeText(mContext, "语音合成失败,错误码: " + code, Toast.LENGTH_SHORT).show();}}}/** 停止语音播报*/public static void stopSpeaking() {// 对象非空并且正在说话if (null != mTts && mTts.isSpeaking()) {// 停止说话mTts.stopSpeaking();}}/*** 判断当前有没有说话** @return*/public static boolean isSpeaking() {if (null != mTts) {return mTts.isSpeaking();} else {return false;}}/*** 合成回调监听。*/private SynthesizerListener mTtsListener = new SynthesizerListener() {@Overridepublic void onSpeakBegin() {Log.i(TAG, "开始播放");}@Overridepublic void onSpeakPaused() {Log.i(TAG, "暂停播放");}@Overridepublic void onSpeakResumed() {Log.i(TAG, "继续播放");}@Overridepublic void onBufferProgress(int percent, int beginPos, int endPos, String info) {// TODO 缓冲的进度Log.i(TAG, "缓冲 : " + percent);}@Overridepublic void onSpeakProgress(int percent, int beginPos, int endPos) {// TODO 说话的进度Log.i(TAG, "合成 : " + percent);}@Overridepublic void onCompleted(SpeechError error) {if (error == null) {Log.i(TAG, "播放完成");} else if (error != null) {Log.i(TAG, error.getPlainDescription(true));}}@Overridepublic void onEvent(int eventType, int arg1, int arg2, Bundle obj) {}};/*** 参数设置** @return*/private void setParam() {// 清空参数mTts.setParameter(SpeechConstant.PARAMS, null);// 引擎类型 网络mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);// 设置发音人mTts.setParameter(SpeechConstant.VOICE_NAME, COLOUD_VOICERS_VALUE[0]);// 设置语速mTts.setParameter(SpeechConstant.SPEED, "50");// 设置音调mTts.setParameter(SpeechConstant.PITCH, "50");// 设置音量mTts.setParameter(SpeechConstant.VOLUME, "100");// 设置播放器音频流类型mTts.setParameter(SpeechConstant.STREAM_TYPE, "3");// mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, Environment.getExternalStorageDirectory() + "/KRobot/wavaudio.pcm");// 背景音乐 1有 0 无// mTts.setParameter("bgs", "1");}}

4.在MainActivity.java中进行调用:

//合成语音kqwSpeechCompound=new KqwSpeechCompound(this);kqwSpeechCompound.speaking(resultcontent.trim());//resultcontent是一个字符串

综合之前的代码,MainActivity.java的全部代码如下:

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import com.chaquo.python.PyObject;import com.chaquo.python.Python;import com.chaquo.python.android.AndroidPlatform;import com.iflytek.cloud.RecognizerResult;import static com.example.myapplication.XunFeiUtil.parseIatResult;import static com.example.myapplication.XunFeiUtil.*;import java.util.List;public class MainActivity extends AppCompatActivity implements View.OnClickListener{private Button btn_click;private EditText mResultText;private SQLiteDatabase readableDatabase;private KqwSpeechCompound kqwSpeechCompound;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//相当于建立连接MySqlhelp mySqlhelp = new MySqlhelp(this,"database.db",null,1);//打开 相当于数据库创建完成readableDatabase = mySqlhelp.getReadableDatabase();//创建things表String sql = "create table if not exists things(name varchar(50) primary key ,content varchar(500))";readableDatabase.execSQL(sql);//插入几条数据// sql = "insert into things values('水杯','水杯在客厅的桌子上')";// readableDatabase.execSQL(sql);// sql = "insert into things values('钥匙','钥匙在客厅的桌子上')";// readableDatabase.execSQL(sql);// sql = "insert into things values('鼠标','鼠标在卧室的桌子上')";// readableDatabase.execSQL(sql);//调用语音识别函数initXunFei(this);btn_click = (Button) findViewById(R.id.btn_click);mResultText = ((EditText) findViewById(R.id.result));//点击按钮进行识别btn_click.setOnClickListener(this);//合成语音kqwSpeechCompound=new KqwSpeechCompound(this);}@Overridepublic void onClick(View v) {startVoice(this, new XunFeiCallbackListener() {@Overridepublic void onFinish(RecognizerResult results) {String text = parseIatResult(results.getResultString());// 获取语音转换成的文字mResultText.append(text);//调用python代码initPython();// 初始化Python环境Python py = Python.getInstance();PyObject pyObject=py.getModule("tiquguanjianci").callAttr("main",text);List returnList =pyObject.asList();//python代码返回的是listint size = returnList.size();String resultcontent="";//记录数据库查找结果for (int i = 0; i < size; i++) {String name= returnList.get(i).toString();//遍历每一个关键词Log.d("res",name);//查询数据库String[] selectionArgs = new String[]{name };Cursor cursor = readableDatabase.query("things", null, "name=?", selectionArgs, null, null, null);if (cursor!=null){while (cursor.moveToNext()){String content= cursor.getString(cursor.getColumnIndex("content"));//得到查询结果resultcontent+=content;}cursor.close();}}if(resultcontent==""){resultcontent="抱歉,没有找到";Log.d("res1","没有找到");}else{Log.d("res1",resultcontent);}kqwSpeechCompound.speaking(resultcontent.trim());}});}// 初始化Python环境public void initPython(){if (! Python.isStarted()) {Python.start(new AndroidPlatform(this));}}}

全部的文件结构如下:

至此,就可以实现文字转语音的功能了。

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