讯飞离线语音合成(离线资源包)

讯飞的语音合成有三种方式

  1. 在线语音合成(免费)

  2. 离线使用语记语音合成(免费,需要本地装一个语记App并且下载离线资源)

  3. 使用讯飞离线语音包(付费)

这里使用离线资源包实现离线语音合成,因为正式版是要付费的,所以这里使用试用的离线包(35天试用期、3个装机量)。

效果图

源码

下载地址(Android Studio工程):http://download.csdn.net/detail/q4878802/9063779

开通服务,下载SDK

之前已经介绍过,地址:http://blog.csdn.net/q4878802/article/details/47762169#t8

将SDK里提供的jar包、so库、离线资源都拷贝到我们的工程(Android Studio工程)

创建的工程默认可能没有jniLibs和assets目录,我们要自己在main下创建这两个目录

初始化

在清单文件中application标签下添加name属性

android:name=".InitApplication"

初始化

package com.example.kongqw.kqwspeechcompounddemo;import android.app.Application;
import android.widget.Toast;import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechUtility;/*** Created by kongqw on 2015/8/29.*/
public class InitApplication extends Application {@Overridepublic void onCreate() {Toast.makeText(this, "InitApplication", Toast.LENGTH_LONG).show();// 应用程序入口处调用,避免手机内存过小,杀死后台进程后通过历史intent进入Activity造成SpeechUtility对象为null// 如在Application中调用初始化,需要在Mainifest中注册该Applicaiton// 注意:此接口在非主进程调用会返回null对象,如需在非主进程使用语音功能,请增加参数:SpeechConstant.FORCE_LOGIN+"=true"// 参数间使用“,”分隔。// 设置你申请的应用appidStringBuffer param = new StringBuffer();param.append("appid=55d33f09");param.append(",");param.append(SpeechConstant.ENGINE_MODE + "=" + SpeechConstant.MODE_MSC);// param.append(",");// param.append(SpeechConstant.FORCE_LOGIN + "=true");SpeechUtility.createUtility(InitApplication.this, param.toString());super.onCreate();}
}

语音合成工具类

package com.example.kongqw.kqwspeechcompounddemo.engine;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;
import com.iflytek.cloud.util.ResourceUtil;
import com.iflytek.cloud.util.ResourceUtil.RESOURCE_TYPE;import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;/*** 语音合成器** @author kongqw*/
public class KqwSpeechSynthesizer {// Log标签private static final String TAG = "KqwSpeechSynthesizer";private Context mContext;// 语音合成对象private SpeechSynthesizer mTts;public KqwSpeechSynthesizer(Context context) {mContext = context;// 初始化合成对象mTts = SpeechSynthesizer.createSynthesizer(context, new InitListener() {@Overridepublic void onInit(int code) {Log.d(TAG, "InitListener init() code = " + code);if (code != ErrorCode.SUCCESS) {Toast.makeText(mContext, "初始化失败,错误码:" + code, Toast.LENGTH_SHORT).show();}}});}/*** 开始语音合成** @param text*/public void start(String text) {// 设置参数setParam();int code = mTts.startSpeaking(text, mTtsListener);if (code != ErrorCode.SUCCESS) {Toast.makeText(mContext, "语音合成失败,错误码: " + code, Toast.LENGTH_SHORT).show();}}/*** 合成回调监听。*/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) {Log.i(TAG, "传冲进度 :" + percent);}@Overridepublic void onSpeakProgress(int percent, int beginPos, int endPos) {Log.i(TAG, "合成进度 : " + percent);}@Overridepublic void onCompleted(SpeechError error) {if (error == null) {Log.i(TAG, "合成完成");} else if (error != null) {Log.i(TAG, "error : " + error.toString());}}@Overridepublic void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {// TODO Auto-generated method stub}};/*** 参数设置** @return*/private void setParam() {// 清空参数mTts.setParameter(SpeechConstant.PARAMS, null);// 设置使用本地引擎mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);// 设置发音人资源路径mTts.setParameter(ResourceUtil.TTS_RES_PATH, getResourcePath());// 设置发音人mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");// 设置语速mTts.setParameter(SpeechConstant.SPEED, "50");// 设置音调mTts.setParameter(SpeechConstant.PITCH, "50");// 设置音量mTts.setParameter(SpeechConstant.VOLUME, "50");// 设置播放器音频流类型mTts.setParameter(SpeechConstant.STREAM_TYPE, "3");}// 获取发音人资源路径private String getResourcePath() {StringBuffer tempBuffer = new StringBuffer();// 合成通用资源tempBuffer.append(ResourceUtil.generateResourcePath(mContext, RESOURCE_TYPE.assets, "tts/common.jet"));tempBuffer.append(";");// 发音人资源tempBuffer.append(ResourceUtil.generateResourcePath(mContext, RESOURCE_TYPE.assets, "tts/xiaoyan.jet"));return tempBuffer.toString();}}

测试类

package com.example.kongqw.kqwspeechcompounddemo;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;import com.example.kongqw.kqwspeechcompounddemo.engine.KqwSpeechSynthesizer;public class MainActivity extends Activity {private EditText mEtText;private KqwSpeechSynthesizer mKqwSpeechSynthesizer;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mEtText = (EditText) findViewById(R.id.et_text);// 初始化语音合成对象mKqwSpeechSynthesizer = new KqwSpeechSynthesizer(this);}/*** 开始合成** @param view*/public void start(View view) {Toast.makeText(this, "开始合成 : " + mEtText.getText().toString().trim(), Toast.LENGTH_SHORT).show();mKqwSpeechSynthesizer.start(mEtText.getText().toString().trim());}
}

XML页面布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/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=".MainActivity"><EditText
        android:id="@+id/et_text"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="语音合成的内容"android:textSize="20dp" /><Button
        android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/et_text"android:gravity="center"android:onClick="start"android:text="语音合成"android:textSize="20dp" /></RelativeLayout>

说明

因为我用的是离线资源包,试用期是有35天并且只有3个装机量,所以如果直接使用我的demo可能会有问题,如果要自己再创建一个工程,千万不要忘记替换APPID、库、离线资源。

讯飞离线语音合成(离线资源包)相关推荐

  1. 讯飞sdk语音合成测试用例(linux版)

    由于最近要做语音交互方面的开发,而国内讯飞在语音开发这方面做的非常好,所以打算使用讯飞的sdk.但是下载下来发现压缩包中的文件和讯飞官网的说明不同,大概是官网文档没有进行更新,所以接下来介绍一下语音合 ...

  2. 讯飞webapi语音合成多音字处理

    在使用讯飞webapi方式进行语音合成时,发现多音字经常不按语义进行发音,在讯飞论坛上找了半天,按论坛上的方法不起作用,反复试了一下,用下面组合可以起作用. 一.后台参数配置 后台主要涉及3个参数,t ...

  3. 【Demo】iOS平台上的讯飞语音识别语音合成开发

    官方文档:http://www.xfyun.cn/doccenter/iOS 目前开放的服务: 准备工作 需要到讯飞官网注册一个开发账号,注册后登录并创建一个新的应用,添加需要的服务(语音听写.语音合 ...

  4. SkyVoice离线语音合成-离线TTS-C#离线语音转文字

    文字转语音函数介绍 接口采用C语言编写,支持各种语言调用. 其他详细文档联系QQ :1481662712

  5. 集成讯飞SDK,实现离线命令词、离线语音合成、离线唤醒,语音在线/离线听写

    关于讯飞开发平台的注册以及SDK下载:## ##请参考: http://blog.csdn.net/weixin_39923324/article/details/78924892 强烈推荐 分享一个 ...

  6. 科大讯飞输入法android离线语音,讯飞输入法Android5.0.1752 离线语音更轻快的表达...

    在追求时间效率的当下,语音是最佳输入方式,尤其离线语音可在无网络和网络环境不好时依然保持语音输入的便捷.通过手机本地运算,用离线语音包代替云端服务器功能,识别转文字无需等待.讯飞输入法新版离线语音不断 ...

  7. IOS开发--语音合成(讯飞接口)

    IOS开发–语音播报 想要实现iOS语音播报,要使用讯飞/百度语音播报的第三方接口.我使用的是讯飞的语音合成接口. 登录注册讯飞平台,申请语音合成接口! 下载iOS开发所需sdk,sdk中包含语音开发 ...

  8. Unity与讯飞的aiui交互

    前言最近项目是做机器人,机器人最大的(普通的)AI功能就是语音交流,所以AIUI就是一个很好的选择.AIUI是封装了,讯飞的语音合成.语音识别等功能,重点是它有个兜底功能选择,还有技能工作室的加持,虽 ...

  9. “讯飞语音+”语音识别开放功能使用方法介绍

    1"讯飞语音+"功能介绍 "讯飞语音+"主要提供的语音服务包括语音合成.语音识别.语义理解和语音搜索. 语音合成 讯飞语音+提供的语音合成服务包括在线语音合成与 ...

  10. 深耕语音输入12载:讯飞输入法走向万物智能新世界

    科目二考试不慎挂科后,我爸在微信上向我抱怨道: "整天都在说人工智能,可人工智能到底在哪里呢,为什么到了2022年,自动倒车入库的功能都没普及,导致科目二考试还是那么难."除了文字 ...

最新文章

  1. 也说 ASP.NET MVC的 Script 管理
  2. Android Fragment中ListView的OnItemClickListener无效
  3. 基于DDD的.NET开发框架 - ABP缓存Caching实现
  4. 图解Java中的18 把锁!
  5. Android含文档server结束(client UI接口异步请求的一部分)三
  6. display: flex的兼容性写法
  7. Linux操作系统安装过程
  8. 西门子1200走总线FB284控制3台V90伺服和相机调整角 度,DP通讯控制FANUC机器人
  9. Java冒泡排序代码实现
  10. mendeley引用参考文献不显示_使用 Zotero 在 Markdown 中优雅处理参考文献
  11. scrapy项目-爬取阳光问政
  12. Git LFS 初探
  13. js 打印去掉页眉页脚页码_javascript 打印时去掉页眉页脚
  14. 阿里云如何购买mysql_如何选购配置阿里云数据库RDS MySQL的流程 新手必看
  15. 基于K210的MNIST手写数字识别
  16. 23位华人学者入选!2022年ACM杰出会员名单公布!
  17. IAR中map文件全解析
  18. 交流耦合仪表放大器(AC-Coupled Instrumentation Amplifier)
  19. Jetbrains系列产品
  20. ArcEngine创建平头缓冲区的方法

热门文章

  1. 300行python代码从零开始构建基于知识图谱的电影问答系统4-用户问题预处理
  2. xp打开html页面不正常显示不出来,xp打开网页图片加载不出来如何解决
  3. 003-信息技术学科知识与教学能力
  4. Cesium中如何获取鼠标单击位置的经纬度
  5. android webview 清除缓存,android 读取WebView缓存及清理WebView缓存
  6. qcon_从QCon伦敦2010中学到的重点知识和教训
  7. C语言入夏标志,[二级C语言程序设计.docx
  8. Foundation框架 之 常见结构体、包装数据、日期
  9. linux图片裁剪工具,linux中如何使用终端裁剪图片?
  10. 谷歌 AI 团队用 GAN 模型合成异形生物体