关闭

集成Android 科大讯飞免费在线语音合成播报功能(附源码)

标签: Android科大讯飞语音合成源码在线
506人阅读 评论(0) 收藏 举报
分类:

概述

开篇先介绍一下‘科大讯飞’,毕竟是我家乡合肥的科技公司,我感到骄傲,更重要的是它在语音识别行业也是佼佼者,在如今人工智能横飞的时代,依然能够保持着较高水准的技术优势。在此,希望科大在AI之战中能发展的越来越棒。好了,接下里进入主题,先来看看科大讯飞在MSC移动语音终端(Android)开放的功能接口。  

 源码连接http://download.csdn.net/download/csdn_aiyang/10158914      

名词

解释

语音合成

将一段文字转换为成语音,可根据需要合成出不同音色、语速和语调的声音,让机器像人一样开口说话。

语音听写

将一段语音转换成文字内容,能识别常见的词汇、语句、语气并自动断句。

语音识别

判断所说的内容是否与预定义的语法相符合,主要用于判断用户是否下达某项命令。

语义理解

分析用户语音或文字的意图,给出相应的回答,如输入“今天合肥的天气”,云端即返回今天合肥的天气信息。

语音评测

通过智能语音技术对发音水平进行评价,给出得分。

声纹密码

一种基于每个人的声音都具有唯一性的认证机制,使用声音作为密码。

人脸识别

从照片、视频流中检测出人脸,或者识别两张人脸照片是否为同一个人。 



资料参考

   集成Android平台开发官方文档


集成准备

首先,打开科大讯飞平台,进行登录注册及创建应用。




点击右上控制台,进入管理应用和创建应用。




创建完应用,选择添加在线语音合成。另外,请注意该应用的APPID,及右方该应用的下载SDK



接下里就是点击SDK下载进入选择页面。 有单选和组合两种方式下载。组合就是多个功能一起使用。




点击下载SDK,下载完成后,打开压缩包进入,并找到sample -->lib 里 Msc.jar文件和.so文件复制到项目里。(若gradle默认引用lib下所有文件,直接sync即可)



代码工作

完成上面的准备工作,接下里就是在项目里写代码了。创建MyApplication.class类

并在AndroidManifest.xml的application标签里添加 android:name=".MyApplication"。

public class MyApplication extends Application {
    private static Context context;
    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
        SpeechUtility.createUtility(this, "appid=12345678");//=号后面写自己应用的APPID
        Setting.setShowLog(true); //设置日志开关(默认为true),设置成false时关闭语音云SDK日志打印
	//TTSUtils.getInstance().init(); 初始化工具类
    }

    //获取应用上下文环境
    public static Context getContext() {
        return context;
    }
}

需要注意,一定要记得写在平台上创建的应用APPID。另外,下载的SDK文件夹命名也会有APPID。



这里封装好一个工具类,可以直接拿到项目中使用。TTSUtils.class类

public class TTSUtils implements InitListener, SynthesizerListener {
    private static volatile TTSUtils instance = null;
    private boolean isInitSuccess = false;
    private SpeechSynthesizer mTts;
    //单例模式
    public static TTSUtils getInstance() {
        if (instance == null) {
            synchronized (TTSUtils.class) {
                if (instance == null) {
                    instance = new TTSUtils();
                }
            }
        }
        return instance;
    }
    // 初始化合成对象
    public void init() {
        mTts = SpeechSynthesizer.createSynthesizer(MyApplication.getContext(), this);
        // 清空参数
        mTts.setParameter(SpeechConstant.PARAMS, null);
        // 设置在线云端
        mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
        // 设置发音人
        mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");
        // 设置发音语速
        mTts.setParameter(SpeechConstant.SPEED, "50");
        // 设置音调
        mTts.setParameter(SpeechConstant.PITCH, "50");
        // 设置合成音量
        mTts.setParameter(SpeechConstant.VOLUME, "100");
        // 设置播放器音频流类型
        mTts.setParameter(SpeechConstant.STREAM_TYPE, "3");
        // 设置播放合成音频打断音乐播放,默认为true
        mTts.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "true");
        // 设置音频保存路径,需要申请WRITE_EXTERNAL_STORAGE权限,如不需保存注释该行代码
        mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH,"./sdcard/iflytek.pcm");
    }
    //开始合成
    public void speak(String msg) {
        if (isInitSuccess){
            if (mTts.isSpeaking()) {
                stop();
            }
            mTts.startSpeaking(msg, this);
        }else {
            init();
        }
    }
    public void stop() {
        mTts.stopSpeaking();
    }

    @Override
    public void onEvent(int eventType, int i1, int i2, Bundle bundle) {
        //以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因
        if (SpeechEvent.EVENT_SESSION_ID == eventType) {
            String sid = bundle.getString(SpeechEvent.KEY_EVENT_SESSION_ID);
        }
    }
    @Override
    public void onInit(int code) {
        if (code == ErrorCode.SUCCESS) {
            isInitSuccess = true;
        }
    }
    @Override
    public void onSpeakBegin() {
        // 监听:开始播放
    }
    @Override
    public void onBufferProgress(int percent, int beginPos, int endPos,
                                 String info) {
        // 合成进度
    }
    @Override
    public void onSpeakPaused() {
        // 暂停播放
    }
    @Override
    public void onSpeakResumed() {
        // 继续播放
    }
    @Override
    public void onSpeakProgress(int percent, int beginPos, int endPos) {
        // 播放进度
    }
    @Override
    public void onCompleted(SpeechError speechError) {
        if (speechError != null) {}
    }
    public void pause() {
        mTts.pauseSpeaking();
    }

    public void resume() {
        mTts.resumeSpeaking();
    }

    public void release() {
        if (null != mTts) {
            mTts.stopSpeaking();
            mTts.destroy();  //退出时释放
        }
    }
}


在需要使用播放语音的地方调用即可

TTSUtils.getInstance().speak("hello,我想说的话在这里");


另外,记得在AndroidManifest.xml申请权限(6.0需要动态申请权限,参考博文Android 权限Permission大全及Android6.0动态申请步骤

[html] view plain copy
  1. <uses-permission android:name="android.permission.RECORD_AUDIO" />  
  2. <uses-permission android:name="android.permission.INTERNET" />  
  3. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  4. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  5. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />  
  6. <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  7. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
  8. <uses-permission android:name="android.permission.READ_CONTACTS" />  
  9. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  10. <uses-permission android:name="android.permission.WRITE_SETTINGS" />  
  11. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />  

其他补充

科大讯飞发音人SpeechConstant.VOICE_NAME 修改

1、可以在官网试听



2、参数名称表


最后,注意一些坑

SpeechUtility.createUtility为null或SpeechSynthesizer为null时,会抛出init fail 初始化失败。项目会直接崩溃~~~  这个讯飞有点过分了。

不过,这种情况出现的情况不多,注意一下就好。

1、一般是appid没有和下载SDK相对应

2、还有 SpeechUtility.createUtility(this, "") 需要放在主线程!

项目的Android SDK API较低时MyApplication会出现不在主线程....这个我也很无奈,然后放在需要用到语音的Activity页面OnCreate中初始化就好。


1
0
查看评论

Android 语音助手源码,找了那么多,最强大就是这个

  • 2015-10-17 14:11
  • 3.35MB
  • 下载

科大讯飞在线语音合成(2017最新版本)

被csdn上的很多人和官方文档坑了一整天,一个bug一直是报空指针。最后终于找到了原因,因为csdn上的人都没有写如何配置JNILibs和配置对应cpu类型的.so库。导致我连初始化也成功不了,debug了一整天。我都有炸了电脑的冲动。废话不多说开始我的表演: 配置manifest,不多讲了,自己看...
  • u010312949
  • u010312949
  • 2017-06-05 21:00
  • 2753

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

讯飞语音开发集成地址http://www.xfyun.cn/ 解压后的doc文件夹下的msc develop 文件中有详细集成步骤 AppId: 1.先要注册开发者账户, 添加我的应用 , 下载sdk2.下载后将sdk解压, 把案例导入工程中运行看看效果 3.将libs下的两个jar包...
  • u012635169
  • u012635169
  • 2016-04-03 12:18
  • 23837

安卓文字转语音实例+代码+TextToSpeech的使用

package example.com.myapplication; import android.content.Intent; import android.speech.tts.TextToSpeech; import android.support.v7.app.AppCompatActi...
  • ITzhongzi
  • ITzhongzi
  • 2016-08-17 09:51
  • 1141

科大讯飞语音文字转换及本地语音合成

  • 2015-01-19 23:21
  • 4.01MB
  • 下载

Android开发集成科大讯飞语音识别+语音合成功能

1.下载SDK(地址:http://www.xfyun.cn/sdk/dispatcher),选择语音听写SDK(如下图) ,下载前会让你先创建应用,创建应用后会得到一个appid。然后点“立即开通”去开通“语音识别”功能,之后就会跳出“SDK下载”的页面,然后就可以下载了(未注册账号的要先注册一个...
  • highboys
  • highboys
  • 2016-08-09 12:25
  • 12887

Android TTS文字转语音开发

之前在做TTS开发的时候能够正常的将文字转为语音,但是今天做了一个小程序,结果却发不了音,仔细测试了一下,发现了一个问题。 首先先讲下TTS如何实现。 1、安装语音库,假如要中文发音,科大讯飞语音3.0就很好。 2、最简单的程序如下: package com.example.tts; import...
  • shendan00
  • shendan00
  • 2015-02-05 11:40
  • 3267

Android 科大讯飞语音集成,文字转语音

前言:记录一下科大讯飞的文字转语音功能的sdk的集成过程,希望能够帮助到大家。 登录官网,应用注册。 讯飞开放平台,进行简单的开发者注册。进入个人中心,注册应用。 注册完成后,我们可以看到自己的appid。选择自己要开通的功能,然后下载sdk。 项目集成 官网下载的代码包含了lib,do...
  • Fine1938768839
  • Fine1938768839
  • 2017-05-31 17:44
  • 1714

Python基础【03】———Python调用科大讯飞C语言接口实现语音识别

Python调用科大讯飞C语言接口实现语音识别,源代码: from ctypes import * import time # 调用动态链接库 dll = cdll.LoadLibrary("libmsc.so") #登录参数,apppid一定要和你的下载SDK对应 l...
  • fang_yang_wa
  • fang_yang_wa
  • 2017-12-13 13:57
  • 397

android开发语音播报

转载请注明出处:http://blog.csdn.net/sw950729/article/details/52050777 本文出自:马云飞的博客 上次也说了最近一直在整理东西以及封装东西。然后今天整理就发现之前写了个语音播报的demo。然后就趁关机前写一下,东西也不多,就几行代码的事,23...
  • sw950729
  • sw950729
  • 2016-07-30 00:09
  • 6134
    个人资料
    • 访问:86858次
    • 积分:2143
    • 等级:
    • 排名:千里之外
    • 原创:109篇
    • 转载:11篇
    • 译文:0篇
    • 评论:33条
    博客专栏
    文章分类
    通往Android的阶梯
      分享Android流行技术、深度学习讨论 欢迎加入QQ群569614530