美文网首页项目
Android:第三方讯飞在线语音合成的集成

Android:第三方讯飞在线语音合成的集成

作者: 17e8f01b69a9 | 来源:发表于2017-05-10 17:19 被阅读1524次


    概述:简单的说就是 把文字内容转化成语音


    步骤 一 导入SDK

                    将在官网下载 的Android SDK 压缩包中libs目录下所有子文件拷贝至Android工程的libs目录下

                   

              或将Android SDK中sample/SpeechDemo/libs目录下所有子文件拷贝至Android工程的libs目录下

    步骤 二 添加用户权限

    在工程AndroidManifest.xml文件中添加如下权限:

    //连接网络权限,用于执行云端语音能力

    <uses-permissionandroid:name="android.permission.INTERNET"/>

    //获取手机录音机使用权限,听写、识别、语义理解需要用到此权限

    <uses-permissionandroid:name="android.permission.RECORD_AUDIO"/>

    //读取网络信息状态

    <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>

    //获取当前wifi状态

    <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>

    //允许程序改变网络连接状态

    <uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE"/>

    //读取手机信息权限

    <uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>

    //读取联系人权限,上传联系人需要用到此权限

    <uses-permissionandroid:name="android.permission.READ_CONTACTS"/>

    //外存储写权限,构建语法需要用到此权限

    <uses-permissionandroid:name="android.permission. WRITE_EXTERNAL_STORAGE"/>

    //外存储读权限,构建语法需要用到此权限

    <uses-permissionandroid:name="android.permission. READ_EXTERNAL_STORAGE"/>

    //配置权限,用来记录应用配置信息

    <uses-permissionandroid:name="android.permission. WRITE_SETTINGS"/>

    步骤 三 初始化

    初始化即创建语音配置对象,只有初始化后才可以使用MSC的各项服务。建议将初始化放在程序入口处(如Application、Activity的onCreate方法),初始化代码如下:

    // 将“11111111”替换成您申请的APPID(别把“=”也替换了),申请地址:http://open.voicecloud.cn

    SpeechUtility.createUtility(context, SpeechConstant.APPID +"=11111111");

    注意:此接口在非主进程调用会返回null对象,如需在非主进程使用语音功能,请使用参数:SpeechConstant.APPID+"=11111111,"+SpeechConstant.FORCE_LOGIN+"=true"。

    步骤 四 代码

    1.从SpeechDemo中找出如下图的两个类放到自己项目中

    2.

    //初始化合成对象

    mTts= SpeechSynthesizer.createSynthesizer(context,null);

    mSharedPreferences= context.getSharedPreferences(TtsSettings.PREFER_NAME, context.MODE_PRIVATE);

    FlowerCollector.onEvent(context,"tts_play");

    setParam();

    private void setParam() {

    //清空参数

    mTts.setParameter(SpeechConstant.PARAMS,null);

    mTts.setParameter(SpeechConstant.PARAMS,"rdn=2");

    //根据合成引擎设置相应参数

    if(mEngineType.equals(SpeechConstant.TYPE_CLOUD)) {

    mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);

    //设置在线合成发音人

    mTts.setParameter(SpeechConstant.VOICE_NAME,"xiaoyan");

    //设置合成语速

    mTts.setParameter(SpeechConstant.SPEED,mSharedPreferences.getString("speed_preference","60"));

    //设置合成音调

    mTts.setParameter(SpeechConstant.PITCH,mSharedPreferences.getString("pitch_preference","50"));

    //设置合成音量

    mTts.setParameter(SpeechConstant.VOLUME,mSharedPreferences.getString("volume_preference","100"));

    }else{

    mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);

    //设置本地合成发音人voicer为空,默认通过语记界面指定发音人。

    mTts.setParameter(SpeechConstant.VOICE_NAME,"");

    /**

    *TODO本地合成不设置语速、音调、音量,默认使用语记设置 开发者如需自定义参数,请参考在线合成参数设置

    */

    }

    //设置播放器音频流类型

    mTts.setParameter(SpeechConstant.STREAM_TYPE,mSharedPreferences.getString("stream_preference","3"));

    //设置播放合成音频打断音乐播放,默认为true

    mTts.setParameter(SpeechConstant.KEY_REQUEST_FOCUS,"true");

    //设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限

    //注:AUDIO_FORMAT参数语记需要更新版本才能生效

    mTts.setParameter(SpeechConstant.AUDIO_FORMAT,"wav");

    mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, Environment.getExternalStorageDirectory() +"/msc/tts.wav");

    }

    /**

    *合成回调监听。

    */

    private SynthesizerListener mTtsListener=new SynthesizerListener() {

    @Override

    public void onSpeakBegin() {

    // show Tip("开始播放");

    }

    @Override

    public void onSpeakPaused() {

    // showTip("暂停播放");

    }

    @Override

    public void onSpeakResumed() {

    // showTip("继续播放");

    }

    @Override

    public void onBufferProgress(intpercent,intbeginPos,intendPos, String info) {

    //合成进度

    }

    @Override public void onSpeakProgress(intpercent,intbeginPos,intendPos) {

    //播放进度

    // mPercentForPlaying = percent;

    // showTip(String.format(getString(R.string.tts_toast_format),

    // mPercentForBuffering, mPercentForPlaying));
    }
    @Override
    public void onCompleted(SpeechError error) {
    if(error ==null) {
    // showTip("播放完成");
    }else if(error !=null) {
    // showTip(error.getPlainDescription(true));
    }
    }
    @Override
    public void onEvent(inteventType,intarg1,intarg2, Bundle obj) {
    //以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因
    //若使用本地能力,会话id为null
    // if (SpeechEvent.EVENT_SESSION_ID == eventType) {
    // String sid = obj.getString(SpeechEvent.KEY_EVENT_SESSION_ID);
    // Log.d(TAG, "session id =" + sid);
    // }
    }
    };
    /**
    *销毁语音合成
    */
    public static void onDestroy() {
    if(mTts!=null) {
    mTts.stopSpeaking();
    mTts.destroy();
    }
    }

    //text:要合成的文本

    mTts.startSpeaking(text,mTtsListener);

    来自于http://www.xfyun.cn/ ,如果有什么不明白或者想更深入的,可以去下载SDK,看Demo、文档

    相关文章

      网友评论

        本文标题:Android:第三方讯飞在线语音合成的集成

        本文链接:https://www.haomeiwen.com/subject/ufqgtxtx.html