概述:简单的说就是 把文字内容转化成语音
步骤 一 导入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、文档
网友评论