AndroidStudio集成科大讯飞语音SDK

原创 2016年05月31日 14:14:28

AndroidStudio集成科大讯飞语音SDK

讯飞开放平台作为全球首个开放的智能交互技术服务平台,致力于为开发者打造一站式智能人机交互解决方案。用户可通过互联网、移动互联网,使用任何设备、在任何时间、任何地点,随时随地享受讯飞开放平台提供的“听、说、读、写……”等全方位的人工智能服务。目前,开放平台以“云+端”的形式向开发者提供语音合成、语音识别、语音唤醒、语义理解、人脸识别、个性化彩铃、移动应用分析等多项服务。本篇blog主要记录AS下科大讯飞语音sdk的具体步骤

下载科大讯飞语音sdk

科大讯飞开放平台
在下载SDK之前建议先创建应用,因为应用需要先审核。

科大讯飞语音sdk集成步骤

1、解压缩 Android_voice_xxxx_574cfae8.zip 压缩包

image

2、建议复制lib下所有.jar或.so文件

3、如果需要讯飞的语音合成UI,复制assets下文件到你当前项目的main目录下

4、配置 AndroidManifest.xml(权限)

    <!--连接网络权限,用于执行云端语音能力 -->
    <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"/>   <!--摄相头权限,拍照需要用到 -->
<uses-permission android:name="android.permission.CAMERA" /> 

初始化SDK(需要在应用程序启动时调用一次该 API 即可,所以建议写在Application里面)

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        SpeechUtility.createUtility(this, SpeechConstant.APPID + "=你的APPID");
    }
}

以上都配置好了,接下来就是接入使用了

1、简单的集成 讯飞语音输入 UI

image

public void startlis(View view) {
        //1.创建RecognizerDialog对象
        RecognizerDialog mDialog = new RecognizerDialog(this, new InitListener() {
            @Override
            public void onInit(int i) {

            }
        });
        //2.设置accent、language等参数
        mDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
        mDialog.setParameter(SpeechConstant.ACCENT, "mandarin");
        //若要将UI控件用于语义理解,必须添加以下参数设置,设置之后onResult回调返回将是语义理解 //结果
        // mDialog.setParameter("asr_sch", "1");
        // mDialog.setParameter("nlp_version", "2.0");
        //3.设置回调接口
        mDialog.setListener(new RecognizerDialogListener() {
            @Override
            public void onResult(RecognizerResult recognizerResult, boolean b) {
                printResult(recognizerResult);
            }

            @Override
            public void onError(SpeechError speechError) {

            }
        });
        // 4.显示dialog,接收语音输入
        mDialog.show();
    }

获取到返回结果是json格式,解析即可:


/**
     * 解析方法
     * @param results
     */
    private void printResult(RecognizerResult results) {
        JsonParser jsonParser = new JsonParser();
        String text = jsonParser.parseIatResult(results.getResultString());

        String sn = null;
        // 读取json结果中的sn字段
        try {
            JSONObject resultJson = new JSONObject(results.getResultString());
            sn = resultJson.optString("sn");
        } catch (JSONException e) {
            e.printStackTrace();
        }

        mIatResults.put(sn, text);

        StringBuffer resultBuffer = new StringBuffer();
        for (String key : mIatResults.keySet()) {
            resultBuffer.append(mIatResults.get(key));
        }

        mResultText.setText(resultBuffer.toString());
    }

/**
     * Json结果解析类
     */
    class JsonParser {

        String parseIatResult(String json) {
            StringBuffer ret = new StringBuffer();
            try {
                JSONTokener tokener = new JSONTokener(json);
                JSONObject joResult = new JSONObject(tokener);

                JSONArray words = joResult.getJSONArray("ws");
                for (int i = 0; i < words.length(); i++) {
                    // 转写结果词,默认使用第一个结果
                    JSONArray items = words.getJSONObject(i).getJSONArray("cw");
                    JSONObject obj = items.getJSONObject(0);
                    ret.append(obj.getString("w"));
//              如果需要多候选结果,解析数组其他字段
//              for(int j = 0; j < items.length(); j++)
//              {
//                  JSONObject obj = items.getJSONObject(j);
//                  ret.append(obj.getString("w"));
//              }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return ret.toString();
        }
    }

2、集成 语音合成 功能

public void readnews(View view) {
//1.创建 SpeechSynthesizer 对象, 第二个参数:本地合成时传 InitListener
        SpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(MainActivity.this, null);
        //2.合成参数设置,详见《MSC Reference Manual》SpeechSynthesizer 类
        // 设置发音人(更多在线发音人,用户可参见 附录13.2
        mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");
        //设置发音人
        mTts.setParameter(SpeechConstant.SPEED, "50");
        //设置语速
        mTts.setParameter(SpeechConstant.VOLUME, "80");
        //设置音量,范围 0~100
        mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);//设置云端
        //设置合成音频保存位置(可自定义保存位置),保存在“./sdcard/iflytek.pcm”
//保存在 SD 卡需要在 AndroidManifest.xml 添加写 SD 卡权限
// 仅支持保存为 pcm 和 wav 格式,如果不需要保存合成音频,注释该行代码
// mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./sdcard/iflytek.pcm"); //3.开始合成
        String trim = mResultText.getText().toString().trim();
        if (TextUtils.isEmpty(trim)) {
            mTts.startSpeaking("主人,你好像还没有说话哦!", this);
        }else {
            mTts.startSpeaking(trim, this);
        }
    }

集成更多讯飞功能,请参考讯飞开发者api

以上就是简单的集成讯飞sdk的“语音输入”和“语音合成”功能,如果你在集成过程中出现一些问题,可以参考这里解决:讯飞社区,搜索你出现的错误,应该很容易解决。

关于作者
- 个人主页:Hsia
- Email:xiaweifeng@live.cn

版权声明:Android从零单排怒上王者之路。

相关文章推荐

AndroidStudio科大讯飞语音接入辅助教程

现在很多应用中都加入了语音功能,通常情况下我们都是接入第三方的API进行实现,用的比较多的主要就是科大讯飞和百度的语音。此次针对AndroidStudio下接入科大讯飞语音写了个辅助教程,仅供参考。 ...

科大讯飞语音无限制录音、识别功能的实现:Android studio(一)

无限制录音时长、识别全部语音文件
  • imhxl
  • imhxl
  • 2016年03月11日 10:48
  • 16349

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

科大讯飞SDK学习与总结

科大讯飞SDK使用研究 语音听写(主要对象 SpeechRecognizer)初始化SpeechRecognizer recognizer=SpeechRecognizer.createRecogni...
  • naivor
  • naivor
  • 2017年05月13日 09:08
  • 728

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

1.下载SDK(地址:http://www.xfyun.cn/sdk/dispatcher),选择语音听写SDK(如下图) ,下载前会让你先创建应用,创建应用后会得到一个appid。然后点“立即开通”...

科大讯飞语音接入(AndroidStudio)

科大讯飞语音接入(AndroidStudio)操作时间2016/5/7 15:14:13 效果图 步骤 完全按照文档即可。不过需要注意以下提到的注意事项 注意事项 导入 SDK首先需要按照手...
  • wgyscsf
  • wgyscsf
  • 2016年05月07日 15:17
  • 3424

【记录】科大讯飞语音控件的使用——Android Studio

一、将libs文件夹移至Android Studio的Project的根目录下将科大讯飞提供的SDK中的libs文件夹直接拖拽至Android Studio的Project的根目录下 二、导...
  • jiasike
  • jiasike
  • 2016年08月19日 11:18
  • 2625

Android Studio 科大讯飞语音合成接口 整合教程

2017年 Android Studio 集成 科大讯飞语音合成接口 一:注册 科大讯飞网站  http://www.xfyun.cn/?ch=bdtg 二:选择要使用的接口 ...

讯飞语音 20006 错误,已解决

错误显示 未能启动录音, 原因分析: 我的这里的原因是因为,唤醒的监听还是start的状态,所以唤醒它占用了录音的设备,所以当唤醒之后再想听取用户的录音就会出现未能启动录音的20006 的错误. ...
  • Rodulf
  • Rodulf
  • 2016年04月18日 10:00
  • 6690

Android Studio下Android应用开发集成百度语音合成使用方法样例

转载请注明来源: http://blog.csdn.net/kjunchen/article/details/51093134 Android Studio下Android应用开发集成百度语音合成使用...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AndroidStudio集成科大讯飞语音SDK
举报原因:
原因补充:

(最多只允许输入30个字)