概述

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

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

名词

解释

语音合成

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

语音听写

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

语音识别

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

语义理解

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

语音评测

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

声纹密码

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

人脸识别

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



资料参考

   集成Android平台开发官方文档


集成准备

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




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


集成Android 科大讯飞免费在线语音合成播报功能(附源码)_第1张图片


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

集成Android 科大讯飞免费在线语音合成播报功能(附源码)_第2张图片


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

集成Android 科大讯飞免费在线语音合成播报功能(附源码)_第3张图片

集成Android 科大讯飞免费在线语音合成播报功能(附源码)_第4张图片


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


集成Android 科大讯飞免费在线语音合成播报功能(附源码)_第5张图片

代码工作

完成上面的准备工作,接下里就是在项目里写代码了。创建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。

集成Android 科大讯飞免费在线语音合成播报功能(附源码)_第6张图片


这里封装好一个工具类,可以直接拿到项目中使用。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、可以在官网试听

集成Android 科大讯飞免费在线语音合成播报功能(附源码)_第7张图片


2、参数名称表

集成Android 科大讯飞免费在线语音合成播报功能(附源码)_第8张图片

最后,注意一些坑

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

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

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

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

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


更多相关文章

  1. Android 分享功能实现与 QQ 纯文本分享
  2. Android之rild进程启动源码分析
  3. Android实现自动更新功能
  4. Android应用系列:仿MIUI的Toast动画效果实现(有图有源码)
  5. Android设备10大不应忽略的功能
  6. 改进Android语音对讲系统的方法
  7. Android物理按键功能更改

随机推荐

  1. 跟我学Android应用开发 之 开发环境搭建
  2. 新的 Android(安卓)小收藏夏日特别版
  3. Android获取OAID
  4. Android之Activity生命周期的浅析(二)
  5. MobileMarket开发日记
  6. Android(安卓)实现锁屏的较完美方案
  7. 【Android】Source Insight 基本用法 (
  8. 初涉Android之数据库数据列表显示
  9. Android(安卓)Studio——JNI 初体验(二)
  10. Android(安卓)App发布流程----签名