说明
开发相关
开发准备
支持 Android 4.0 以上版本 API LEVEL 16,支持手机与平板。
合成实时流式语音,需要手机能够连接网络(3/4/5G 或 Wi-Fi 网络等)。
建议使用最新版本 Android Studio 进行开发。
服务端 API 文档。
下载安装 SDK
语音合成 Android SDK。
解压后即是示例代码工程,工程目录
libqcloudtts-demo/libs
下的 aar 文件即 SDK 包。用 Android Studio 打开此工程查看语音合成示例代码。
文本合成接口:基于基础语音合成接口封装,支持不限字数长文本入参,SDK内部会将文本切分为短句多次请求合成,也支持入参切分好的句子集合 ,支持播放暂停与恢复,适合实时播放场景,实例代码参考 LongTextTtsActivity 类。
参数说明
快速入门
在 AndroidManifest.xml 添加如下权限
< uses-permission android:name="android.permission.INTERNET"/>< uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
初始化 TtsController 示例
通过 LongTextTtsController 构造 ttsController。
LongTextTtsController mTtsController = new LongTextTtsController();
在使用云 API 之前,请前往腾讯云 API 密钥页面申请安全凭证。安全凭证包括 SecretId 和 SecretKey。
SecretId 用于标识 API 调用者身份。SecretKey 用于加密签名字符串和服务器端验证签名字符串的密钥。
注意
这里只是示例,请根据用户实际申请的 SecretId 和 SecretKey 进行后续操作。
/**直接鉴权**/mTtsController.init(this,1257709062L, //腾讯云 appId“**********************************”, //腾讯云 secretId“******************************” //腾讯云 secretKey);/**使用临时密钥鉴权1.通过sts 获取到临时证书,此步骤应在您的服务器端实现,详见https://cloud.tencent.com/document/product/598/334162.通过临时密钥调用接口**/mTtsController.init(this,1257709062L, //腾讯云 appId“*********************************”, //腾讯云 临时的 secretId“******************************” , //腾讯云 临时的 secretKey"sdfasdfdfds**fdgfgfdhghgjf" //腾讯云 对应的token);
设置自定义参数
//更多音色id可查看官网文档https://cloud.tencent.com/document/product/1073/37995public enum VoiceType {VOICE_TYPE_Zhi_Yu(1001, "智瑜"),VOICE_TYPE_Zhi_Yun(1004, "智云"),VOICE_TYPE_Zhi_Ling(1002, "智聆"),VOICE_TYPE_Zhi_Mei(1003, "智美"),VOICE_TYPE_We_Jack(1050, "WeJack,英文男声"),VOICE_TYPE_We_Rose(1051, "WeRose,英文女声"),VOICE_TYPE_Xiao_Yao( 10510000,"智逍遥,阅读男声"),}public enum VoiceSpeed {VOICE_SPEED_VERY_SLOW(-2, 0.6f, "0.6倍"),VOICE_SPEED_SLOWDOWN(-1, 0.8f, "0.8倍"),VOICE_SPEED_NORMAL(0, 1.0f, "正常语速(默认)"),VOICE_SPEED_ACCELERATE(1, 1.2f, "1.2倍"),VOICE_SPEED_VERY_FAST(2, 1.5f, "1.5倍"),}public enum VoiceLanguage {VOICE_LANGUAGE_CHINESE(1, "中文(默认)"),VOICE_LANGUAGE_ENGLISH(2, "英文"),}
示例
//设置语速mTtsController.setVoiceSpeed(speed);//设置音色mTtsController.setVoiceType(voice);//设置音量mTtsController.setVoiceVolume(volume);//设置语言mTtsController.setVoiceLanguage(language);//设置ProjectIdmTtsController.setProjectId(0);
语音合成
语音合成有两个接口:
合成接口1:直接入参文本段落,使用 SDK 内部的规则切分文本,如果 sdk 的切分规则不符合您的业务需求,您可以选用合成接口2。
合成接口2:入参切分好的句子集合,您需要确保列表内每句话长度不超过后端接口最大字符限制,建议文本中第一句话不要设的太长, demo 内附带了一份文本切分示例代码。
注意
如果要使用 SSML 标记语言,请选择使用合成接口2,并确保入参列表中每一个元素不能超过150中文字符(不包括 SSML 标签)。如果选择合成接口1,入参 SSML 标签会被切分导致 SSML 标签无效,具体使用可以参考 demo,SSML 语法详见 SSML 标记语言。
合成接口1:直接入参文本段落mTtsController.startTts(ttsText, mTtsExceptionHandler, new QCloudPlayerCallback() {//播放开始@Overridepublic void onTTSPlayStart() {Log.d("tts", "onPlayStart");}//音频缓冲中@Overridepublic void onTTSPlayWait() {Log.d("tts", "onPlayWait");}//缓冲完成,继续播放@Overridepublic void onTTSPlayResume() {Log.d("tts", "onPlayResume");}//连续播放下一句@Overridepublic void onTTSPlayNext() {Log.d("tts", "onPlayNext");}//播放中止@Overridepublic void onTTSPlayStop() {Log.d("tts", "onPlayStop");}//播放结束@Overridepublic void onTTSPlayEnd() {Log.d("tts", "onPlayEnd");}//当前播放的音频对应的句子,以及这句话在文本队列数组中的序号@Overridepublic void onTTSPlayText(String text, int lineSeq) {Log.d("tts","onTTSPlayText:" + text + ":" + lineSeq);}//实时返回分段的音频缓存文件路径 ,业务需要时可以在这里获取到音频文件做其他处理@Overridepublic void onTTSPlayAudioCachePath(String path) {Log.d(TAG, "onTTSPlayAudioCachePath: "+path);}});//此方法能获取到sdk切分好的句子列表集合//List<String> TextArray = mTtsController.getTextArray();
合成接口2:入参切分好的句子集合合成语音的源文本,按UTF-8编码统一计算。单条句子中文最大支持150个汉字(全角标点符号算一个汉字);英文最大支持500个字母(半角标点符号算一个字母)。见https://cloud.tencent.com/document/product/1073/37995。List<String> lines = new ArrayList<>();lines.add("第一句。");lines.add("第二句。");mTtsController.startTts(lines, mTtsExceptionHandler, new QCloudPlayerCallback() {//播放开始@Overridepublic void onTTSPlayStart() {Log.d("tts", "onPlayStart");}//音频缓冲中@Overridepublic void onTTSPlayWait() {Log.d("tts", "onPlayWait");}//缓冲完成,继续播放@Overridepublic void onTTSPlayResume() {Log.d("tts", "onPlayResume");}//连续播放下一句@Overridepublic void onTTSPlayNext() {Log.d("tts", "onPlayNext");}//播放中止@Overridepublic void onTTSPlayStop() {Log.d("tts", "onPlayStop");}//播放结束@Overridepublic void onTTSPlayEnd() {Log.d("tts", "onPlayEnd");}//当前播放的音频对应的句子,以及这句话在文本队列数组中的序号@Overridepublic void onTTSPlayText(String text, int lineSeq) {Log.d("tts","onTTSPlayText:" + text + ":" + lineSeq);}//实时返回分段的音频缓存文件路径 ,业务需要时可以在这里获取到音频文件做其他处理@Overridepublic void onTTSPlayAudioCachePath(String path) {Log.d(TAG, "onTTSPlayAudioCachePath: "+path);}});
接收异常
//接收接口异常private final TtsController.TtsExceptionHandler mTtsExceptionHandler = new TtsController.TtsExceptionHandler() {@Overridepublic void onRequestException(TtsController.TtsException e) {Log.e(TAG, "tts onRequestException");Toast.makeText(TtsActivity.this, e.getErrMsg(), Toast.LENGTH_SHORT).show();}};
暂停、恢复或停止语音播放
mTtsController.pause();mTtsController.resume();mTtsController.stop();