Android科大讯飞TTS语音合成实例详细步骤
第一步:到科大讯飞官网注册并下载自己的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语音合成实例详细步骤相关推荐
- CAS_SSO单点登录实例详细步骤(转)、Tomcat ssl(https) 配置
CAS_SSO单点登录实例详细步骤(转).Tomcat ssl(https) 配置 博客分类: SSO&CAS&Identity Java.Tomcat 0, 从CAS官网下载最新版本 ...
- unity3d android 后台运行,unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android...
易采站长站为您分析unity3d发布apk在android虚拟机中运行的详细步骤,需要的朋友可以参考下 unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android ...
- 【爱加密】Android App应用安全加固详细步骤
原文地址:点击打开链接 随着各种牌子手机的不断推出,各种Android手机应用,即Android App也是满天飞.但是,在这个山寨.黑客遍布的世界,如何保证Android App的安全是广大Andr ...
- android logo制作教程视频,android開机logo制作详细步骤.docx
android開机logo制作详细步骤 Android 开机画面制作详解:(andorid 学习网站:)android 开机画面共有3个部分:一:linux kernel 的开机画面(/kernel/ ...
- Android科大讯飞语音集成,非常详细的使用讲解
讯飞语音开发集成地址http://www.xfyun.cn/ 解压后的doc文件夹下的msc develop 文件中有详细集成步骤 AppId: 1.先要注册开发者账户, 添加我的应用 , ...
- Android 高德地图API(详细步骤+源码)
高德地图API使用详解 前言 正文 一.创建应用 ① 获取PackageName ② 获取调试版安全码SHA1 ③ 获取发布版安全码SHA1 二.配置Android Studio工程 ① 导入SDK ...
- Ijkplayer编译成Android的so库的详细步骤
Ijkplyer简介 本人在做网络摄像头的时候遇到的一个需求就是要做一个手机app能够实时看rtsp流传过来的视频,首先当然是用MediaPlayer去播放视频,结果是延时的要命,自己写一个播放器框架 ...
- Android 百度文字识别(详细步骤+源码)
运行效果图 识别到的内容: {"words_result":[{"words":"突然间有想看书的冲动"},{"words&quo ...
- Android iOS APPUI设计规范实例(详细的UI设计方法)
这一套UI设计规范,包含了界面布局.颜色.文字规范.按钮规范.图标规范.图片规范.列表规范.控件规范.弹出浮层,超级详细. 大家可以借鉴下,学会自己设计一套APP设计规范,成为高级设计师.但是不要生搬 ...
- Android接入华为推送详细步骤
由于极光推送的到达率不高,所以项目重要集成个推,进行华为推送和小米推送 前提:先说下Mainfest文件中需要的配置,可以参考相关文件 <!--HMS-SDK引导升级HMS功能,访问OTA服务器 ...
最新文章
- UVA1327 King‘s Quest(强连通分量、给王子们匹配公主系列 - 1 )
- 传2020年苹果Mac将用自制芯片
- 判断字符串出现次数最多的字符 及 次数
- 利用pgAgent创建定时任务
- Entity Framework表拆分
- 获取元素到页面上的位置
- [Jscript]Js导出Excel
- php 父子id,父子关系PHP / MYSQL
- Shell脚本编程知识点总结及范例
- 中粤拼音在线转换_在Word中给汉字标注拼音、声调(二)
- 求2+22+222+2222+22222
- Day2--安装MediaWiki搭建自己的个人百科
- Local declaration of '' hides instance variable
- 广州互联网营销群聚会图片
- 软件测试周刊(第61期):内心强大的人都有三个共性「不和他人作比较」「不对他人有期待」「不批判他人」
- 四分之一A4纸大小的相纸打印该怎么选择
- Failed to resolve: com.github.chrisbanes:PhotoView:1.2.6 Show in File Show i
- 笛卡儿积、自然连接、等值连接的区别
- ..\OBJ\OLED.axf: Error: L6200E: Symbol Usart_Int multiply defined (by usart_1.o and usart.o).
- ansys热分析及电器电动力理论