第一步:到科大讯飞官网注册并下载自己的Android SDK

网站:离线语音合成 - 语音合成 - 讯飞开放平台

第二步:

完成注册后获取到右侧红线上的APPID,!!有重要作用,

点击下载获取你需要的SDK版本

下载并解压后如图

sample:是官网给予的dome;

libs文件中的文件拷贝到Android项目中的lib包中并ADD;

assets文件拷贝到Main包中;

res文件夹中除了layout文件都要拷贝到assets文件中;

由于我选择的是离线(高质量版)所以将res文件夹中的xtts文件夹拷贝到Android项目中的assets包里;

第三步:

清单文件中加入权限

    <uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><!--连接网络权限,用于执行云端语音能力 --><uses-permission android:name="android.permission.INTERNET"/><!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 --><uses-permission android:name="android.permission.RECORD_AUDIO"/><!--读取网络信息状态 --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--获取当前wifi状态 --><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><!--允许程序改变网络连接状态 --><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/><!--读取手机信息权限 --><uses-permission android:name="android.permission.READ_PHONE_STATE"/><!--读取联系人权限,上传联系人需要用到此权限 --><uses-permission android:name="android.permission.READ_CONTACTS"/><!--外存储写权限,构建语法需要用到此权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!--外存储读权限,构建语法需要用到此权限 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><!--配置权限,用来记录应用配置信息 --><uses-permission android:name="android.permission.WRITE_SETTINGS"/><!--手机定位信息,用来为语义等功能提供定位,提供更精准的服务--><!--定位信息是敏感信息,可通过Setting.setLocationEnable(false)关闭定位请求 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><!--如需使用人脸识别,还要添加:摄相头权限,拍照需要用到 --><uses-permission android:name="android.permission.CAMERA" />

首先启动的程序中需要添加以下代码用于初始化其中xxxx使用你的APPID替换

 SpeechUtility.createUtility(this, SpeechConstant.APPID +"=xxxxx");

主要代码如下

package com.example.ttstestapplication;import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import com.iflytek.cloud.ErrorCode;
import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechEvent;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.SynthesizerListener;
import com.iflytek.cloud.util.ResourceUtil;public class ShowActivity extends AppCompatActivity {private Button mBtnPreference,mBtnStart,mBtnStop;private TextView mTvContent;private SharedPreferences mSharedPreferences;private static String TAG = ShowActivity.class.getSimpleName();// 语音合成对象private SpeechSynthesizer mTts;// 默认云端发音人// 默认本地发音人public static String voicerLocal = "xiaofeng";// 引擎类型private String mEngineType = SpeechConstant.TYPE_LOCAL;private Toast mToast;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_show);SpeechUtility.createUtility(this, SpeechConstant.APPID +"=xxxx");initUi();mTts = SpeechSynthesizer.createSynthesizer(this,mTtsInitListener);mBtnPreference.setOnClickListener(v ->{Intent intent = new Intent(this,MainActivity.class);startActivity(intent);});mBtnStart.setOnClickListener( v ->{String text =mTvContent.getText().toString();// 设置参数setParam();Log.d(TAG, "准备点击: " + System.currentTimeMillis());int code = mTts.startSpeaking(text, mTtsListener);if (code != ErrorCode.SUCCESS) {showTip("语音合成失败,错误码: " + code + ",请点击网址https://www.xfyun.cn/document/error-code查询解决方案");}});mBtnStop.setOnClickListener( v ->{mTts.stopSpeaking();    });}private void initUi() {mBtnPreference = findViewById(R.id.btn_preference);mBtnStart = findViewById(R.id.btn_start);mBtnStop = findViewById(R.id.btn_stop);mTvContent = findViewById(R.id.tv_content);mSharedPreferences = getSharedPreferences(MainActivity.PREFER_NAME, Activity.MODE_PRIVATE);}/*** 初始化监听。*/private InitListener mTtsInitListener = new InitListener() {@Overridepublic void onInit(int code) {Log.d(TAG, "InitListener init() code = " + code);if (code != ErrorCode.SUCCESS) {showTip("初始化失败,错误码:" + code + ",请点击网址https://www.xfyun.cn/document/error-code查询解决方案");} else {// 初始化成功,之后可以调用startSpeaking方法// 注:有的开发者在onCreate方法中创建完合成对象之后马上就调用startSpeaking进行合成,// 正确的做法是将onCreate中的startSpeaking调用移至这里}}};/*** 合成回调监听。*/private SynthesizerListener mTtsListener = new SynthesizerListener() {@Overridepublic void onSpeakBegin() {//showTip("开始播放");Log.d(ShowActivity.TAG, "开始播放:" + System.currentTimeMillis());}@Overridepublic void onSpeakPaused() {showTip("暂停播放");}@Overridepublic void onSpeakResumed() {showTip("继续播放");}@Overridepublic void onBufferProgress(int percent, int beginPos, int endPos,String info) {// 合成进度mPercentForBuffering = percent;}@Overridepublic void onSpeakProgress(int percent, int beginPos, int endPos) {// 播放进度mPercentForPlaying = percent;}@Overridepublic void onCompleted(SpeechError error) {if (error == null) {showTip("播放完成");} else {showTip(error.getPlainDescription(true));}}@Overridepublic void onEvent(int eventType, int arg1, int arg2, Bundle obj) {// 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因// 若使用本地能力,会话id为nullif (SpeechEvent.EVENT_SESSION_ID == eventType) {String sid = obj.getString(SpeechEvent.KEY_EVENT_AUDIO_URL);Log.d(TAG, "session id =" + sid);}//实时音频流输出参考/*if (SpeechEvent.EVENT_TTS_BUFFER == eventType) {byte[] buf = obj.getByteArray(SpeechEvent.KEY_EVENT_TTS_BUFFER);Log.e("MscSpeechLog", "buf is =" + buf);}*/}};private void showTip(final String str) {runOnUiThread(() -> {if (mToast != null) {mToast.cancel();}mToast = Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT);mToast.show();});}private void setParam() {// 清空参数mTts.setParameter(SpeechConstant.PARAMS, null);//设置使用本地引擎mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_XTTS);//设置发音人资源路径mTts.setParameter(ResourceUtil.TTS_RES_PATH, getResourcePath());//设置发音人mTts.setParameter(SpeechConstant.VOICE_NAME, voicerLocal);//mTts.setParameter(SpeechConstant.TTS_DATA_NOTIFY,"1");//支持实时音频流抛出,仅在synthesizeToUri条件下支持//设置合成语速mTts.setParameter(SpeechConstant.SPEED, mSharedPreferences.getString("speed_preference", "50"));//设置合成音调mTts.setParameter(SpeechConstant.PITCH, mSharedPreferences.getString("pitch_preference", "50"));//设置合成音量mTts.setParameter(SpeechConstant.VOLUME, mSharedPreferences.getString("volume_preference", "50"));//设置播放器音频流类型mTts.setParameter(SpeechConstant.STREAM_TYPE, mSharedPreferences.getString("stream_preference", "3"));//   mTts.setParameter(SpeechConstant.STREAM_TYPE, AudioManager.STREAM_MUSIC+"");// 设置播放合成音频打断音乐播放,默认为truemTts.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "true");// 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限mTts.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH,getExternalFilesDir("msc").getAbsolutePath() + "/tts.pcm");}//获取发音人资源路径private String getResourcePath() {StringBuffer tempBuffer = new StringBuffer();String type = "xtts";//合成通用资源tempBuffer.append(ResourceUtil.generateResourcePath(this, ResourceUtil.RESOURCE_TYPE.assets, type + "/common.jet"));tempBuffer.append(";");//发音人资源tempBuffer.append(ResourceUtil.generateResourcePath(this, ResourceUtil.RESOURCE_TYPE.assets, type + "/" + ShowActivity.voicerLocal + ".jet"));return tempBuffer.toString();}@Overrideprotected void onDestroy() {if (null != mTts) {mTts.stopSpeaking();// 退出时释放连接mTts.destroy();}super.onDestroy();}
}

Android科大讯飞TTS语音合成实例详细步骤相关推荐

  1. CAS_SSO单点登录实例详细步骤(转)、Tomcat ssl(https) 配置

    CAS_SSO单点登录实例详细步骤(转).Tomcat ssl(https) 配置 博客分类: SSO&CAS&Identity Java.Tomcat 0, 从CAS官网下载最新版本 ...

  2. unity3d android 后台运行,unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android...

    易采站长站为您分析unity3d发布apk在android虚拟机中运行的详细步骤,需要的朋友可以参考下 unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android ...

  3. 【爱加密】Android App应用安全加固详细步骤

    原文地址:点击打开链接 随着各种牌子手机的不断推出,各种Android手机应用,即Android App也是满天飞.但是,在这个山寨.黑客遍布的世界,如何保证Android App的安全是广大Andr ...

  4. android logo制作教程视频,android開机logo制作详细步骤.docx

    android開机logo制作详细步骤 Android 开机画面制作详解:(andorid 学习网站:)android 开机画面共有3个部分:一:linux kernel 的开机画面(/kernel/ ...

  5. Android科大讯飞语音集成,非常详细的使用讲解

    讯飞语音开发集成地址http://www.xfyun.cn/ 解压后的doc文件夹下的msc develop 文件中有详细集成步骤    AppId:   1.先要注册开发者账户, 添加我的应用 , ...

  6. Android 高德地图API(详细步骤+源码)

    高德地图API使用详解 前言 正文 一.创建应用 ① 获取PackageName ② 获取调试版安全码SHA1 ③ 获取发布版安全码SHA1 二.配置Android Studio工程 ① 导入SDK ...

  7. Ijkplayer编译成Android的so库的详细步骤

    Ijkplyer简介 本人在做网络摄像头的时候遇到的一个需求就是要做一个手机app能够实时看rtsp流传过来的视频,首先当然是用MediaPlayer去播放视频,结果是延时的要命,自己写一个播放器框架 ...

  8. Android 百度文字识别(详细步骤+源码)

    运行效果图 识别到的内容: {"words_result":[{"words":"突然间有想看书的冲动"},{"words&quo ...

  9. Android iOS APPUI设计规范实例(详细的UI设计方法)

    这一套UI设计规范,包含了界面布局.颜色.文字规范.按钮规范.图标规范.图片规范.列表规范.控件规范.弹出浮层,超级详细. 大家可以借鉴下,学会自己设计一套APP设计规范,成为高级设计师.但是不要生搬 ...

  10. Android接入华为推送详细步骤

    由于极光推送的到达率不高,所以项目重要集成个推,进行华为推送和小米推送 前提:先说下Mainfest文件中需要的配置,可以参考相关文件 <!--HMS-SDK引导升级HMS功能,访问OTA服务器 ...

最新文章

  1. UVA1327 King‘s Quest(强连通分量、给王子们匹配公主系列 - 1 )
  2. 传2020年苹果Mac将用自制芯片
  3. 判断字符串出现次数最多的字符 及 次数
  4. 利用pgAgent创建定时任务
  5. Entity Framework表拆分
  6. 获取元素到页面上的位置
  7. [Jscript]Js导出Excel
  8. php 父子id,父子关系PHP / MYSQL
  9. Shell脚本编程知识点总结及范例
  10. 中粤拼音在线转换_在Word中给汉字标注拼音、声调(二)
  11. 求2+22+222+2222+22222
  12. Day2--安装MediaWiki搭建自己的个人百科
  13. Local declaration of '' hides instance variable
  14. 广州互联网营销群聚会图片
  15. 软件测试周刊(第61期):内心强大的人都有三个共性「不和他人作比较」「不对他人有期待」「不批判他人」
  16. 四分之一A4纸大小的相纸打印该怎么选择
  17. Failed to resolve: com.github.chrisbanes:PhotoView:1.2.6 Show in File Show i
  18. 笛卡儿积、自然连接、等值连接的区别
  19. ..\OBJ\OLED.axf: Error: L6200E: Symbol Usart_Int multiply defined (by usart_1.o and usart.o).
  20. ansys热分析及电器电动力理论

热门文章

  1. linux安装yarn
  2. 机器视觉检测技术之颜色视觉工具应用
  3. 考研倒计时一幕刷屏!网友:这一定是最接近梦想的人!
  4. Linux命令行配置网络(有线网络,无线网络)// Debian
  5. AFDX(ARINC664)的交换机规范
  6. AFDX(ARINC664)的网络协议——IP层
  7. 计算机发展史与程序员思维
  8. 51单片机流水灯程序
  9. 理解PackageManager
  10. 51单片机外设篇:电机