美文网首页项目
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