上云无忧 > 文档中心 > 百度智能云离线语音合成 Android-SDK 接口及调用过程
离线语音合成
百度智能云离线语音合成 Android-SDK 接口及调用过程

文档简介:
简介: DEMO在SDK的基础上,封装了调用逻辑,您可以直接使用SDK,或者使用DEMO封装好SDK接口的类。也可以对比参考DEMO中对SDK的调用封装。 使用SDK方式的话,比较底层,开发者需要自行实现一部分逻辑。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

简介

DEMO在SDK的基础上,封装了调用逻辑,您可以直接使用SDK,或者使用DEMO封装好SDK接口的类。也可以对比参考DEMO中对SDK的调用封装。 使用SDK方式的话,比较底层,开发者需要自行实现一部分逻辑。

  • SDK方式调用请参考MiniActivity
  • DEMO方式调用请参考SynthActivity

本文仅描述SDK的调用方式。

初始化

获取 SpeechSynthesizer 实例

SpeechSynthesizer mSpeechSynthesizer = SpeechSynthesizer.getInstance();

SpeechSynthesizer.getInstance(); 建议每次只使用一个实例。release方法调用后,可以使用第二个,不支持多线程。

设置当前的Context

mSpeechSynthesizer.setContext(this); // this 是Context的之类,如Activity

注意 setContext只要在SpeechSynthesizer.getInstance();设置一次即可,不必切换Context时重复设置。

设置合成结果的回调

如合成成功后,SDK会调用用户设置的SpeechSynthesizerListener 里的回调方法


mSpeechSynthesizer.setSpeechSynthesizerListener(listener); //liste
ner是SpeechSynthesizerListener 的实现类,需要实现您自己的业务逻辑。
SDK合成后会对这个类的方法进行回调。


设置 App Id和 App Key 及 App Secret

在语音官网或者百度云网站上申请语音合成的应用后,会有appId、appKey、appSecret及android包名 4个鉴权信息


mSpeechSynthesizer.setAppId("8535996"/*这里只是为了让Demo运行使用的APPID,请替换成自己的id。*/);
 mSpeechSynthesizer.setApiKey("MxPpf3nF5QX0pnd******cB", "7226e84664474aa09********b2aa434"/
*这里只是为了让Demo正常运行使用APIKey,请替换成自己的APIKey*/); // 包名填写在 app/build.gradle


如果需要使用离线合成功能的话,请在申请的语音合成的应用填写您自己的包名: demo的包名是“com.baidu.tts.sample", 定义在build.gradle中。

设置合成参数

具体参数请参见 “输入参数和输出回调”一节

可以在初始化设置,也可以在合成前设置。 示例:

mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER, "0"); // 设置发声的人声音,在线生效

初始化合成引擎

设置合成的参数后,需要调用此方法初始化

mSpeechSynthesizer.initTts(TtsMode.OFFLINE); // 初始化离线混合模式,如果需要在线合成功能,使用离在线混合模式TtsMode.MIX

控制接口

合成及播放接口

如果需要合成后立即播放的请调用speak方法,如果只需要合成请调用synthesize方法。

该接口线程安全,可以快速多次调用。内部采用排队策略,调用后将自动加入队列,SDK会按照队列的顺序进行合成及播放。 注意需要合成的每个文本text不超过120的GBK字节,即60个汉字或英文字母数字。超过请自行按照句号问号等标点切分,调用多次合成接口。

返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节

speak方法示例:


int speak(String text); int speak(String text, String utteranceId); // utterance
Id在SpeechSynthesizerListener 相关事件方法中回调 speechSynthesizer.speak("百度一下");


synthesize方法示例:


int synthesize(String text); int synthesize(String text, String utteranceId); // utter
anceId在SpeechSynthesizerListener 相关事件方法中回调 speechSynthesizer.synthesize("百度一下");


调用这两个方法后,SDK会回调SpeechSynthesizerListener中的onSynthesizeDataArrived方法。

音频数据在byte[] audioData参数中,采样率16K 16bits编码 单声道。连续将audioData写入一

个文件,即可作为一个可以播放的pcm文件(采样率16K 16bits编码 单声道)。

批量合成并播放接口

效果同连续调用speak 方法。推荐连续调用speak方法,sdk内部有队列缓冲。 该接口可以批量传入多个文本并进行排队合成并播放(如果没有设置utteranceId,则使用list的索引值作为utteranceId)。 注意需要合成的每个文本text不超过120的GBK字节,

即60个汉字或英文字母数字。超过请自行按照句号问号等标点切分,放入多个SpeechSynthesizeBag

int batchSpeak(java.util.List<SpeechSynthesizeBag> speechSynthesizeBags)

以下为批量调用示例


List<SpeechSynthesizeBag> bags = new ArrayList<SpeechSynthesizeBag>(); bags.add(getSpeec
hSynthesizeBag("123456", "0")); bags.add(getSpeechSynthesizeBag("你好", "1")); bags
.add(getSpeechSynthesizeBag("使用百度语音合成SDK", "2")); bags.add(getSpeechSynthesi
zeBag("hello", "3")); bags.add(getSpeechSynthesizeBag("这是一个demo工程", "4")); int
 result = mSpeechSynthesizer.batchSpeak(bags); private SpeechSynthesizeBag getSpeechS
ynthesizeBag(String text, String utteranceId) { SpeechSynthesizeBag speechSynthesizeB
ag = new SpeechSynthesizeBag(); //需要合成的文本text的长度不能超过120个GBK字节。 speec
hSynthesizeBag.setText(text); speechSynthesizeBag.setUtteranceId(utteranceId); return 
speechSynthesizeBag; } 


返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节

播放过程中的暂停及继续

仅speak方法调用后有效。可以使用pause暂停当前的播放。pause暂停后,可使用resume进行播放。

int result = mSpeechSynthesizer.pause(); int result = mSpeechSynthesizer.resume();

返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节

停止合成并停止播放

取消当前的合成。并停止播放。

int result = mSpeechSynthesizer.stop();

返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节

其它接口

打开调试日志(重要)

LoggerProxy.printable(true); // 日志打印在logcat中

开启成功后会看见bdtts-开头的tag日志,建议上线后完全没问题再由服务端控制关闭。

判断模型文件是否有效(重要)


SynthesizerTool.verifyModelFile(/path/to/bd_etts_eng_common_text_all_xxxx.dat”) ;//判断文本资源 
SynthesizerTool.verifyModelFile(/path/to/bd_etts_common_speech_xxxx.dat”) ;//判断音库资源


释放资源

不再使用后,请释放资源,并将mSpeechSynthesizer设为null。如果需要再次使用,

可以通过SpeechSynthesizer.getInstance() 获取,并重复上述流程。

int result = mSpeechSynthesizer.release();

返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节

切换离线发音

切换离线发音人接口。 SDK默认只有4种离线,用这个方法可以切换离线发音人。 离线合成时的参数,填入两个资源文件的路径。如果切换的话,也是使用这两个文件路径。

注意:必须在引擎空闲的时候调用这个方法,否则有不为0的错误码返回。空闲是指最后一个合成回调onSynthesizeFinish 之后。

int result = mSpeechSynthesizer.loadModel(speechModelPath, textModelPath);

返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节

设置音量

该接口用来设置播放器的音量,即使用speak 播放音量时生效。范围为[0.0f-1.0f]。

int result = mSpeechSynthesizer.setStereoVolume (leftVolume, rightVolume);

此接口与PARAM_VOLUME参数的设置不同,PARAM_VOLUME设置的是服务器合成音频时的音量,而该接口设置的是播放时Android系统的音量。 返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节

音频流类型

public int setAudioAttributes(int usage, int contentType)

该接口用来设置播放器的音频流类型, 默认值为AudioAttributes.USAGE_MEDIA, AudioAttributes.CONTENT_TYPE_MUSIC,指的是用与音乐播放的音频流。 具体可以参考android官方文档 https://source.android.google.cn/devices/audio/attributes

授权检验接口(测试使用,上线可以忽略)

一般情况下,不需要使用该方法。

测试您的AppId,AppKey AppSecret填写正确,语音合成服务是否开通。

  • 离在线混合模式下,自动下载正式授权文件。每次调用时,可能会更新正式授权文件。

离在线混合模式下 ,检验应用里包名是否填写正确,如果正确,自动下载正式授权文件。如果不正确,请在应用管理页面检查合成服务是否开通,包名是否填写正确。



mSpeechSynthesizer.auth(TtsMode.ONLINE); // 纯在线 //或 mSpeechSynthesizer.auth(TtsMode.MIX); 
// 离在线混合 //或  mSpeechSynthesizer.auth(TtsMode.OFFLINE)// 纯离线


注意 demo的包名是com.baidu.tts.sample,定义在build.gradle文件中。

SpeechSynthesizerListener回调方法


// @param engineType 1: 音频数据由离线引擎合成; 0:音频数据由在线引擎(百度服务器)合成。
 void onSynthesizeDataArrived(String utteranceId, byte[] bytes, int progress, int engineType);


其它回调方法请参见 “输入参数和输出回调”一节


相似文档
  • 离线及在线选择: int initTts(TtsMode ttsMode); 初始化tts引擎,可以指定纯在线,离在线混合引擎,纯离线引擎。 TtsMode.ONLINE 纯在线。断网即不可使用。 TtsMode.MIX 离在线混合。 断网或者网络请求超时使用离线。 TtsMode.OFFLINE 纯离线。 任意网络状态都可以使用。
  • 简介: 本文档是百度离线语音合成iOS SDK的用户指南,描述了离线语音合成SDK相关接口的使用说明。 概念解释: 语音合成是实现人机语音交互,建立一个有听和讲能力的交互系统所必需的关键技术。随着语音技术的发展,百度自主研发了语音合成系统(TTS),功能是接收用户发送的文本,生成语音发送给用户。
  • 集成指南: 强烈建议用户首先运行SDK包中的Demo工程,Demo工程中详细说明了语音合成的使用方法,并提供了完整的示例。一般情况下,您只需参照demo工程即可完成所有的集成和配置工作。
  • 重要接口说明: 语音合成器: 合成器,类名BDSSpeechSynthesizer,主要用来控制合成进程:设置参数,开始,结束,取消等。 获取合成器唯一实例: 方法: (BDSSpeechSynthesizer*)sharedInstance; 参数: 无。 返回: 语音合成引擎实例。
  • 参数及完整示例: BDSSpeechSynthesizerParams.h 文件中包含了各类参数的使用说明,如果开发者想寻找一些功能的设置办法,请浏览该文件中的相关参数说明。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部